summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoug <>2015-04-29 00:24:31 +0000
committerdoug <>2015-04-29 00:24:31 +0000
commit0f00fd11c521724cc0763feed192676c04edcbed (patch)
tree0fca393d669e322e74118681366789dc496a1a5b
parent843c114d1987e49ba9785f455dad7c1709177bb2 (diff)
downloadopenbsd-0f00fd11c521724cc0763feed192676c04edcbed.tar.gz
openbsd-0f00fd11c521724cc0763feed192676c04edcbed.tar.bz2
openbsd-0f00fd11c521724cc0763feed192676c04edcbed.zip
Reject dNSName of " " for subjectAltName extension.
RFC 5280 says " " must not be used as a dNSName. ok jsing@ jca@
-rw-r--r--src/lib/libtls/tls_verify.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/lib/libtls/tls_verify.c b/src/lib/libtls/tls_verify.c
index c1a5387829..6a569e1761 100644
--- a/src/lib/libtls/tls_verify.c
+++ b/src/lib/libtls/tls_verify.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_verify.c,v 1.7 2015/02/11 06:46:33 jsing Exp $ */ 1/* $OpenBSD: tls_verify.c,v 1.8 2015/04/29 00:24:31 doug Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> 3 * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org>
4 * 4 *
@@ -79,6 +79,7 @@ tls_match_name(const char *cert_name, const char *name)
79 return -1; 79 return -1;
80} 80}
81 81
82/* See RFC 5280 section 4.2.1.6 for SubjectAltName details. */
82int 83int
83tls_check_subject_altname(struct tls *ctx, X509 *cert, const char *name) 84tls_check_subject_altname(struct tls *ctx, X509 *cert, const char *name)
84{ 85{
@@ -132,6 +133,20 @@ tls_check_subject_altname(struct tls *ctx, X509 *cert, const char *name)
132 break; 133 break;
133 } 134 }
134 135
136 /*
137 * Per RFC 5280 section 4.2.1.6:
138 * " " is a legal domain name, but that
139 * dNSName must be rejected.
140 */
141 if (strcmp(data, " ") == 0) {
142 tls_set_error(ctx,
143 "error verifying name '%s': "
144 "a dNSName of \" \" must not be "
145 "used", name);
146 rv = -2;
147 break;
148 }
149
135 if (tls_match_name(data, name) == 0) { 150 if (tls_match_name(data, name) == 0) {
136 rv = 0; 151 rv = 0;
137 break; 152 break;
@@ -159,6 +174,10 @@ tls_check_subject_altname(struct tls *ctx, X509 *cert, const char *name)
159 break; 174 break;
160 } 175 }
161 176
177 /*
178 * Per RFC 5280 section 4.2.1.6:
179 * IPv4 must use 4 octets and IPv6 must use 16 octets.
180 */
162 if (datalen == addrlen && 181 if (datalen == addrlen &&
163 memcmp(data, &addrbuf, addrlen) == 0) { 182 memcmp(data, &addrbuf, addrlen) == 0) {
164 rv = 0; 183 rv = 0;