2 * Author: Viktor Dukhovni
3 * License: THIS CODE IS IN THE PUBLIC DOMAIN.
9 #include <openssl/opensslv.h>
10 #include <openssl/err.h>
11 #include <openssl/crypto.h>
12 #include <openssl/safestack.h>
13 #include <openssl/objects.h>
14 #include <openssl/x509.h>
15 #include <openssl/x509v3.h>
16 #include <openssl/evp.h>
17 #include <openssl/bn.h>
19 #if OPENSSL_VERSION_NUMBER < 0x1000000fL
20 # error "OpenSSL 1.0.0 or higher required"
21 #else /* remainder of file */
23 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
24 # define X509_up_ref(x) CRYPTO_add(&((x)->references), 1, CRYPTO_LOCK_X509)
26 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
27 # define EXIM_HAVE_ASN1_MACROS
28 # define EXIM_OPAQUE_X509
34 #define DANESSL_F_ADD_SKID 100
35 #define DANESSL_F_ADD_TLSA 101
36 #define DANESSL_F_CHECK_END_ENTITY 102
37 #define DANESSL_F_CTX_INIT 103
38 #define DANESSL_F_GROW_CHAIN 104
39 #define DANESSL_F_INIT 105
40 #define DANESSL_F_LIBRARY_INIT 106
41 #define DANESSL_F_LIST_ALLOC 107
42 #define DANESSL_F_MATCH 108
43 #define DANESSL_F_PUSH_EXT 109
44 #define DANESSL_F_SET_TRUST_ANCHOR 110
45 #define DANESSL_F_VERIFY_CERT 111
46 #define DANESSL_F_WRAP_CERT 112
48 #define DANESSL_R_BAD_CERT 100
49 #define DANESSL_R_BAD_CERT_PKEY 101
50 #define DANESSL_R_BAD_DATA_LENGTH 102
51 #define DANESSL_R_BAD_DIGEST 103
52 #define DANESSL_R_BAD_NULL_DATA 104
53 #define DANESSL_R_BAD_PKEY 105
54 #define DANESSL_R_BAD_SELECTOR 106
55 #define DANESSL_R_BAD_USAGE 107
56 #define DANESSL_R_INIT 108
57 #define DANESSL_R_LIBRARY_INIT 109
58 #define DANESSL_R_NOSIGN_KEY 110
59 #define DANESSL_R_SCTX_INIT 111
60 #define DANESSL_R_SUPPORT 112
62 #ifndef OPENSSL_NO_ERR
63 #define DANESSL_F_PLACEHOLDER 0 /* FIRST! Value TBD */
64 static ERR_STRING_DATA dane_str_functs[] = {
65 {DANESSL_F_PLACEHOLDER, "DANE library"}, /* FIRST!!! */
66 {DANESSL_F_ADD_SKID, "add_skid"},
67 {DANESSL_F_ADD_TLSA, "DANESSL_add_tlsa"},
68 {DANESSL_F_CHECK_END_ENTITY, "check_end_entity"},
69 {DANESSL_F_CTX_INIT, "DANESSL_CTX_init"},
70 {DANESSL_F_GROW_CHAIN, "grow_chain"},
71 {DANESSL_F_INIT, "DANESSL_init"},
72 {DANESSL_F_LIBRARY_INIT, "DANESSL_library_init"},
73 {DANESSL_F_LIST_ALLOC, "list_alloc"},
74 {DANESSL_F_MATCH, "match"},
75 {DANESSL_F_PUSH_EXT, "push_ext"},
76 {DANESSL_F_SET_TRUST_ANCHOR, "set_trust_anchor"},
77 {DANESSL_F_VERIFY_CERT, "verify_cert"},
78 {DANESSL_F_WRAP_CERT, "wrap_cert"},
81 static ERR_STRING_DATA dane_str_reasons[] = {
82 {DANESSL_R_BAD_CERT, "Bad TLSA record certificate"},
83 {DANESSL_R_BAD_CERT_PKEY, "Bad TLSA record certificate public key"},
84 {DANESSL_R_BAD_DATA_LENGTH, "Bad TLSA record digest length"},
85 {DANESSL_R_BAD_DIGEST, "Bad TLSA record digest"},
86 {DANESSL_R_BAD_NULL_DATA, "Bad TLSA record null data"},
87 {DANESSL_R_BAD_PKEY, "Bad TLSA record public key"},
88 {DANESSL_R_BAD_SELECTOR, "Bad TLSA record selector"},
89 {DANESSL_R_BAD_USAGE, "Bad TLSA record usage"},
90 {DANESSL_R_INIT, "DANESSL_init() required"},
91 {DANESSL_R_LIBRARY_INIT, "DANESSL_library_init() required"},
92 {DANESSL_R_NOSIGN_KEY, "Certificate usage 2 requires EC support"},
93 {DANESSL_R_SCTX_INIT, "DANESSL_CTX_init() required"},
94 {DANESSL_R_SUPPORT, "DANE library features not supported"},
99 #define DANEerr(f, r) ERR_PUT_error(err_lib_dane, (f), (r), __FILE__, __LINE__)
101 static int err_lib_dane = -1;
102 static int dane_idx = -1;
104 #ifdef X509_V_FLAG_PARTIAL_CHAIN /* OpenSSL >= 1.0.2 */
105 static int wrap_to_root = 0;
107 static int wrap_to_root = 1;
110 static void (*cert_free)(void *) = (void (*)(void *)) X509_free;
111 static void (*pkey_free)(void *) = (void (*)(void *)) EVP_PKEY_free;
113 typedef struct dane_list
115 struct dane_list *next;
119 #define LINSERT(h, e) do { (e)->next = (h); (h) = (e); } while (0)
121 typedef struct dane_host_list
123 struct dane_host_list *next;
127 typedef struct dane_data
130 unsigned char data[0];
133 typedef struct dane_data_list
135 struct dane_data_list *next;
139 typedef struct dane_mtype
146 typedef struct dane_mtype_list
148 struct dane_mtype_list *next;
152 typedef struct dane_selector
155 dane_mtype_list mtype;
158 typedef struct dane_selector_list
160 struct dane_selector_list *next;
162 } *dane_selector_list;
164 typedef struct dane_pkey_list
166 struct dane_pkey_list *next;
170 typedef struct dane_cert_list
172 struct dane_cert_list *next;
176 typedef struct ssl_dane
178 int (*verify)(X509_STORE_CTX *);
179 STACK_OF(X509) *roots;
180 STACK_OF(X509) *chain;
181 X509 *match; /* Matched cert */
182 const char *thost; /* TLSA base domain */
183 char *mhost; /* Matched peer name */
184 dane_pkey_list pkeys;
185 dane_cert_list certs;
186 dane_host_list hosts;
187 dane_selector_list selectors[DANESSL_USAGE_LAST + 1];
189 int mdpth; /* Depth of matched cert */
190 int multi; /* Multi-label wildcards? */
191 int count; /* Number of TLSA records */
194 #ifndef X509_V_ERR_HOSTNAME_MISMATCH
195 # define X509_V_ERR_HOSTNAME_MISMATCH X509_V_ERR_APPLICATION_VERIFICATION
201 match(dane_selector_list slist, X509 *cert, int depth)
206 * Note, set_trust_anchor() needs to know whether the match was for a
207 * pkey digest or a certificate digest. We return MATCHED_PKEY or
208 * MATCHED_CERT accordingly.
210 #define MATCHED_CERT (DANESSL_SELECTOR_CERT + 1)
211 #define MATCHED_PKEY (DANESSL_SELECTOR_SPKI + 1)
214 * Loop over each selector, mtype, and associated data element looking
217 for (matched = 0; !matched && slist; slist = slist->next)
220 unsigned char mdbuf[EVP_MAX_MD_SIZE];
221 unsigned char *buf = NULL;
223 unsigned int len = 0;
226 * Extract ASN.1 DER form of certificate or public key.
228 switch(slist->value->selector)
230 case DANESSL_SELECTOR_CERT:
231 len = i2d_X509(cert, NULL);
232 buf2 = buf = (unsigned char *) OPENSSL_malloc(len);
233 if(buf) i2d_X509(cert, &buf2);
235 case DANESSL_SELECTOR_SPKI:
236 len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), NULL);
237 buf2 = buf = (unsigned char *) OPENSSL_malloc(len);
238 if(buf) i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &buf2);
244 DANEerr(DANESSL_F_MATCH, ERR_R_MALLOC_FAILURE);
247 OPENSSL_assert(buf2 - buf == len);
250 * Loop over each mtype and data element
252 for (m = slist->value->mtype; !matched && m; m = m->next)
255 unsigned char *cmpbuf = buf;
256 unsigned int cmplen = len;
259 * If it is a digest, compute the corresponding digest of the
260 * DER data for comparison, otherwise, use the full object.
265 if (!EVP_Digest(buf, len, cmpbuf, &cmplen, m->value->md, 0))
268 for (d = m->value->data; !matched && d; d = d->next)
269 if ( cmplen == d->value->datalen
270 && memcmp(cmpbuf, d->value->data, cmplen) == 0)
271 matched = slist->value->selector + 1;
281 push_ext(X509 *cert, X509_EXTENSION *ext)
284 if (X509_add_ext(cert, ext, -1))
286 X509_EXTENSION_free(ext);
288 DANEerr(DANESSL_F_PUSH_EXT, ERR_R_MALLOC_FAILURE);
293 add_ext(X509 *issuer, X509 *subject, int ext_nid, char *ext_val)
297 X509V3_set_ctx(&v3ctx, issuer, subject, 0, 0, 0);
298 return push_ext(subject, X509V3_EXT_conf_nid(0, &v3ctx, ext_nid, ext_val));
302 set_serial(X509 *cert, AUTHORITY_KEYID *akid, X509 *subject)
307 if (akid && akid->serial)
308 return (X509_set_serialNumber(cert, akid->serial));
311 * Add one to subject's serial to avoid collisions between TA serial and
312 * serial of signing root.
314 if ( (bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(subject), 0)) != 0
315 && BN_add_word(bn, 1)
316 && BN_to_ASN1_INTEGER(bn, X509_get_serialNumber(cert)))
325 add_akid(X509 *cert, AUTHORITY_KEYID *akid)
327 int nid = NID_authority_key_identifier;
333 * 0 will never be our subject keyid from a SHA-1 hash, but it could be
334 * our subject keyid if forced from child's akid. If so, set our
335 * authority keyid to 1. This way we are never self-signed, and thus
336 * exempt from any potential (off by default for now in OpenSSL)
337 * self-signature checks!
339 id = (akid && akid->keyid) ? akid->keyid : 0;
340 if (id && ASN1_STRING_length(id) == 1 && *ASN1_STRING_data(id) == c)
343 if ( (akid = AUTHORITY_KEYID_new()) != 0
344 && (akid->keyid = ASN1_OCTET_STRING_new()) != 0
345 #ifdef EXIM_HAVE_ASN1_MACROS
346 && ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
348 && M_ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
350 && X509_add1_ext_i2d(cert, nid, akid, 0, X509V3_ADD_APPEND))
353 AUTHORITY_KEYID_free(akid);
358 add_skid(X509 *cert, AUTHORITY_KEYID *akid)
360 int nid = NID_subject_key_identifier;
362 if (!akid || !akid->keyid)
363 return add_ext(0, cert, nid, "hash");
364 return X509_add1_ext_i2d(cert, nid, akid->keyid, 0, X509V3_ADD_APPEND) > 0;
368 akid_issuer_name(AUTHORITY_KEYID *akid)
370 if (akid && akid->issuer)
373 GENERAL_NAMES *gens = akid->issuer;
375 for (i = 0; i < sk_GENERAL_NAME_num(gens); ++i)
377 GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
379 if (gn->type == GEN_DIRNAME)
387 set_issuer_name(X509 *cert, AUTHORITY_KEYID *akid)
389 X509_NAME *name = akid_issuer_name(akid);
392 * If subject's akid specifies an authority key identifer issuer name, we
395 return X509_set_issuer_name(cert,
396 name ? name : X509_get_subject_name(cert));
400 grow_chain(ssl_dane *dane, int trusted, X509 *cert)
402 STACK_OF(X509) **xs = trusted ? &dane->roots : &dane->chain;
403 static ASN1_OBJECT *serverAuth = 0;
408 if ( trusted && !serverAuth
409 && !(serverAuth = OBJ_nid2obj(NID_server_auth)))
411 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
414 if (!*xs && !(*xs = sk_X509_new_null()))
416 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
422 if (trusted && !X509_add1_trust_object(cert, serverAuth))
424 #ifdef EXIM_OPAQUE_X509
427 CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509);
429 if (!sk_X509_push(*xs, cert))
432 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
440 wrap_issuer(ssl_dane *dane, EVP_PKEY *key, X509 *subject, int depth, int top)
444 AUTHORITY_KEYID *akid;
445 X509_NAME *name = X509_get_issuer_name(subject);
446 EVP_PKEY *newkey = key ? key : X509_get_pubkey(subject);
448 #define WRAP_MID 0 /* Ensure intermediate. */
449 #define WRAP_TOP 1 /* Ensure self-signed. */
451 if (!name || !newkey || !(cert = X509_new()))
455 * Record the depth of the trust-anchor certificate.
458 dane->depth = depth + 1;
461 * XXX: Uncaught error condition:
463 * The return value is NULL both when the extension is missing, and when
464 * OpenSSL rans out of memory while parsing the extension.
467 akid = X509_get_ext_d2i(subject, NID_authority_key_identifier, 0, 0);
468 /* XXX: Should we peek at the error stack here??? */
471 * If top is true generate a self-issued root CA, otherwise an
472 * intermediate CA and possibly its self-signed issuer.
474 * CA cert valid for +/- 30 days
476 if ( !X509_set_version(cert, 2)
477 || !set_serial(cert, akid, subject)
478 || !X509_set_subject_name(cert, name)
479 || !set_issuer_name(cert, akid)
480 || !X509_gmtime_adj(X509_get_notBefore(cert), -30 * 86400L)
481 || !X509_gmtime_adj(X509_get_notAfter(cert), 30 * 86400L)
482 || !X509_set_pubkey(cert, newkey)
483 || !add_ext(0, cert, NID_basic_constraints, "CA:TRUE")
484 || (!top && !add_akid(cert, akid))
485 || !add_skid(cert, akid)
486 || ( !top && wrap_to_root
487 && !wrap_issuer(dane, newkey, cert, depth, WRAP_TOP)))
491 AUTHORITY_KEYID_free(akid);
493 EVP_PKEY_free(newkey);
495 ret = grow_chain(dane, !top && wrap_to_root ? UNTRUSTED : TRUSTED, cert);
502 wrap_cert(ssl_dane *dane, X509 *tacert, int depth)
505 dane->depth = depth + 1;
508 * If the TA certificate is self-issued, or need not be, use it directly.
509 * Otherwise, synthesize requisuite ancestors.
512 || X509_check_issued(tacert, tacert) == X509_V_OK)
513 return grow_chain(dane, TRUSTED, tacert);
515 if (wrap_issuer(dane, 0, tacert, depth, WRAP_MID))
516 return grow_chain(dane, UNTRUSTED, tacert);
521 ta_signed(ssl_dane *dane, X509 *cert, int depth)
529 * First check whether issued and signed by a TA cert, this is cheaper
530 * than the bare-public key checks below, since we can determine whether
531 * the candidate TA certificate issued the certificate to be checked
532 * first (name comparisons), before we bother with signature checks
533 * (public key operations).
535 for (x = dane->certs; !done && x; x = x->next)
537 if (X509_check_issued(x->value, cert) == X509_V_OK)
539 if (!(pk = X509_get_pubkey(x->value)))
542 * The cert originally contained a valid pkey, which does
543 * not just vanish, so this is most likely a memory error.
548 /* Check signature, since some other TA may work if not this. */
549 if (X509_verify(cert, pk) > 0)
550 done = wrap_cert(dane, x->value, depth) ? 1 : -1;
556 * With bare TA public keys, we can't check whether the trust chain is
557 * issued by the key, but we can determine whether it is signed by the
558 * key, so we go with that.
560 * Ideally, the corresponding certificate was presented in the chain, and we
561 * matched it by its public key digest one level up. This code is here
562 * to handle adverse conditions imposed by sloppy administrators of
563 * receiving systems with poorly constructed chains.
565 * We'd like to optimize out keys that should not match when the cert's
566 * authority key id does not match the key id of this key computed via
567 * the RFC keyid algorithm (SHA-1 digest of public key bit-string sans
568 * ASN1 tag and length thus also excluding the unused bits field that is
569 * logically part of the length). However, some CAs have a non-standard
570 * authority keyid, so we lose. Too bad.
572 * This may push errors onto the stack when the certificate signature is
573 * not of the right type or length, throw these away,
575 for (k = dane->pkeys; !done && k; k = k->next)
576 if (X509_verify(cert, k->value) > 0)
577 done = wrap_issuer(dane, k->value, cert, depth, WRAP_MID) ? 1 : -1;
585 set_trust_anchor(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
593 STACK_OF(X509) *in = ctx->untrusted; /* XXX: Accessor? */
595 if (!grow_chain(dane, UNTRUSTED, 0))
599 * Accept a degenerate case: depth 0 self-signed trust-anchor.
601 if (X509_check_issued(cert, cert) == X509_V_OK)
604 matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], cert, 0);
605 if (matched > 0 && !grow_chain(dane, TRUSTED, cert))
610 /* Make a shallow copy of the input untrusted chain. */
611 if (!(in = sk_X509_dup(in)))
613 DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
618 * At each iteration we consume the issuer of the current cert. This
619 * reduces the length of the "in" chain by one. If no issuer is found,
620 * we are done. We also stop when a certificate matches a TA in the
623 * Caller ensures that the initial certificate is not self-signed.
625 for (n = sk_X509_num(in); n > 0; --n, ++depth)
627 for (i = 0; i < n; ++i)
628 if (X509_check_issued(sk_X509_value(in, i), cert) == X509_V_OK)
632 * Final untrusted element with no issuer in the peer's chain, it may
633 * however be signed by a pkey or cert obtained via a TLSA RR.
638 /* Peer's chain contains an issuer ca. */
639 ca = sk_X509_delete(in, i);
641 /* If not a trust anchor, record untrusted ca and continue. */
642 if ((matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], ca,
645 if (grow_chain(dane, UNTRUSTED, ca))
647 if (!X509_check_issued(ca, ca) == X509_V_OK)
649 /* Restart with issuer as subject */
653 /* Final self-signed element, skip ta_signed() check. */
659 else if(matched == MATCHED_CERT)
661 if(!wrap_cert(dane, ca, depth))
664 else if(matched == MATCHED_PKEY)
666 if ( !(takey = X509_get_pubkey(ca))
667 || !wrap_issuer(dane, takey, cert, depth, WRAP_MID))
670 EVP_PKEY_free(takey);
672 DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
679 /* Shallow free the duplicated input untrusted chain. */
683 * When the loop exits, if "cert" is set, it is not self-signed and has
684 * no issuer in the chain, we check for a possible signature via a DNS
685 * obtained TA cert or public key.
687 if (matched == 0 && cert)
688 matched = ta_signed(dane, cert, depth);
694 check_end_entity(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
698 matched = match(dane->selectors[DANESSL_USAGE_DANE_EE], cert, 0);
706 if ( (ctx->chain = sk_X509_new_null()) != 0
707 && sk_X509_push(ctx->chain, cert))
711 DANEerr(DANESSL_F_CHECK_END_ENTITY, ERR_R_MALLOC_FAILURE);
720 match_name(const char *certid, ssl_dane *dane)
722 int multi = dane->multi;
723 dane_host_list hosts;
725 for (hosts = dane->hosts; hosts; hosts = hosts->next)
727 int match_subdomain = 0;
728 const char *domain = hosts->value;
733 if (*domain == '.' && domain[1] != '\0')
740 * Sub-domain match: certid is any sub-domain of hostname.
744 if ( (idlen = strlen(certid)) > (domlen = strlen(domain)) + 1
745 && certid[idlen - domlen - 1] == '.'
746 && !strcasecmp(certid + (idlen - domlen), domain))
753 * Exact match and initial "*" match. The initial "*" in a certid
754 * matches one (if multi is false) or more hostname components under
755 * the condition that the certid contains multiple hostname components.
757 if ( !strcasecmp(certid, domain)
758 || ( certid[0] == '*' && certid[1] == '.' && certid[2] != 0
759 && (parent = strchr(domain, '.')) != 0
760 && (idlen = strlen(certid + 1)) <= (domlen = strlen(parent))
761 && strcasecmp(multi ? parent + domlen - idlen : parent, certid+1) == 0))
768 check_name(char *name, int len)
770 char *cp = name + len;
772 while (len > 0 && !*--cp)
773 --len; /* Ignore trailing NULs */
776 for (cp = name; *cp; cp++)
779 if (!((c >= 'a' && c <= 'z') ||
780 (c >= '0' && c <= '9') ||
781 (c >= 'A' && c <= 'Z') ||
782 (c == '.' || c == '-') ||
784 return 0; /* Only LDH, '.' and '*' */
786 if (cp - name != len) /* Guard against internal NULs */
792 parse_dns_name(const GENERAL_NAME *gn)
794 if (gn->type != GEN_DNS)
796 if (ASN1_STRING_type(gn->d.ia5) != V_ASN1_IA5STRING)
798 return check_name((char *) ASN1_STRING_data(gn->d.ia5),
799 ASN1_STRING_length(gn->d.ia5));
803 parse_subject_name(X509 *cert)
805 X509_NAME *name = X509_get_subject_name(cert);
806 X509_NAME_ENTRY *entry;
807 ASN1_STRING *entry_str;
808 unsigned char *namebuf;
809 int nid = NID_commonName;
813 if (!name || (i = X509_NAME_get_index_by_NID(name, nid, -1)) < 0)
815 if (!(entry = X509_NAME_get_entry(name, i)))
817 if (!(entry_str = X509_NAME_ENTRY_get_data(entry)))
820 if ((len = ASN1_STRING_to_UTF8(&namebuf, entry_str)) < 0)
822 if (len <= 0 || check_name((char *) namebuf, len) == 0)
824 OPENSSL_free(namebuf);
827 return (char *) namebuf;
831 name_check(ssl_dane *dane, X509 *cert)
834 BOOL got_altname = FALSE;
837 gens = X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0);
840 int n = sk_GENERAL_NAME_num(gens);
843 for (i = 0; i < n; ++i)
845 const GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
848 if (gn->type != GEN_DNS)
851 certid = parse_dns_name(gn);
852 if (certid && *certid)
854 if ((matched = match_name(certid, dane)) == 0)
856 if (!(dane->mhost = OPENSSL_strdup(certid)))
858 DEBUG(D_tls) debug_printf("Dane name_check: matched SAN %s\n", certid);
862 GENERAL_NAMES_free(gens);
866 * XXX: Should the subjectName be skipped when *any* altnames are present,
867 * or only when DNS altnames are present?
871 char *certid = parse_subject_name(cert);
872 if (certid != 0 && *certid && (matched = match_name(certid, dane)) != 0)
874 DEBUG(D_tls) debug_printf("Dane name_check: matched SN %s\n", certid);
875 dane->mhost = OPENSSL_strdup(certid);
878 OPENSSL_free(certid);
884 verify_chain(X509_STORE_CTX *ctx)
886 dane_selector_list issuer_rrs;
887 dane_selector_list leaf_rrs;
888 int (*cb)(int, X509_STORE_CTX *) = ctx->verify_cb;
889 int ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
890 SSL *ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
891 ssl_dane *dane = SSL_get_ex_data(ssl, dane_idx);
892 X509 *cert = ctx->cert; /* XXX: accessor? */
894 int chain_length = sk_X509_num(ctx->chain);
896 DEBUG(D_tls) debug_printf("Dane verify_chain\n");
898 issuer_rrs = dane->selectors[DANESSL_USAGE_PKIX_TA];
899 leaf_rrs = dane->selectors[DANESSL_USAGE_PKIX_EE];
900 ctx->verify = dane->verify;
902 if ((matched = name_check(dane, cert)) < 0)
904 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
910 ctx->error_depth = 0;
911 ctx->current_cert = cert;
912 X509_STORE_CTX_set_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH);
919 * Satisfy at least one usage 0 or 1 constraint, unless we've already
920 * matched a usage 2 trust anchor.
922 * XXX: internal_verify() doesn't callback with top certs that are not
923 * self-issued. This should be fixed in a future OpenSSL.
925 if (dane->roots && sk_X509_num(dane->roots))
927 X509 *top = sk_X509_value(ctx->chain, dane->depth);
929 dane->mdpth = dane->depth;
933 #ifndef NO_CALLBACK_WORKAROUND
934 if (X509_check_issued(top, top) != X509_V_OK)
936 ctx->error_depth = dane->depth;
937 ctx->current_cert = top;
942 /* Pop synthetic trust-anchor ancestors off the chain! */
943 while (--chain_length > dane->depth)
944 X509_free(sk_X509_pop(ctx->chain));
952 * Check for an EE match, then a CA match at depths > 0, and
953 * finally, if the EE cert is self-issued, for a depth 0 CA match.
956 matched = match(leaf_rrs, xn, 0);
957 if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched EE\n");
959 if (!matched && issuer_rrs)
960 for (n = chain_length-1; !matched && n >= 0; --n)
962 xn = sk_X509_value(ctx->chain, n);
963 if (n > 0 || X509_check_issued(xn, xn) == X509_V_OK)
964 matched = match(issuer_rrs, xn, n);
966 if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched %s\n",
967 n>0 ? "CA" : "selfisssued EE");
971 ctx->current_cert = cert;
972 ctx->error_depth = 0;
973 X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_UNTRUSTED);
985 return ctx->verify(ctx);
989 dane_reset(ssl_dane *dane)
994 OPENSSL_free(dane->mhost);
999 sk_X509_pop_free(dane->roots, X509_free);
1004 sk_X509_pop_free(dane->chain, X509_free);
1009 X509_free(dane->match);
1016 verify_cert(X509_STORE_CTX *ctx, void *unused_ctx)
1018 static int ssl_idx = -1;
1021 int (*cb)(int, X509_STORE_CTX *) = ctx->verify_cb;
1023 X509 *cert = ctx->cert; /* XXX: accessor? */
1025 DEBUG(D_tls) debug_printf("Dane verify_cert\n");
1028 ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1031 DANEerr(DANESSL_F_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
1035 ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
1036 if (!(dane = SSL_get_ex_data(ssl, dane_idx)) || !cert)
1037 return X509_verify_cert(ctx);
1039 /* Reset for verification of a new chain, perhaps a renegotiation. */
1042 if (dane->selectors[DANESSL_USAGE_DANE_EE])
1044 if ((matched = check_end_entity(ctx, dane, cert)) > 0)
1046 ctx->error_depth = 0;
1047 ctx->current_cert = cert;
1052 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1057 if (dane->selectors[DANESSL_USAGE_DANE_TA])
1059 if ((matched = set_trust_anchor(ctx, dane, cert)) < 0)
1061 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1067 * Check that setting the untrusted chain updates the expected
1068 * structure member at the expected offset.
1070 X509_STORE_CTX_trusted_stack(ctx, dane->roots);
1071 X509_STORE_CTX_set_chain(ctx, dane->chain);
1072 OPENSSL_assert(ctx->untrusted == dane->chain);
1077 * Name checks and usage 0/1 constraint enforcement are delayed until
1078 * X509_verify_cert() builds the full chain and calls our verify_chain()
1081 dane->verify = ctx->verify;
1082 ctx->verify = verify_chain;
1084 if (X509_verify_cert(ctx))
1088 * If the chain is invalid, clear any matching cert or hostname, to
1089 * protect callers that might erroneously rely on these alone without
1090 * checking the validation status.
1094 X509_free(dane->match);
1099 OPENSSL_free(dane->mhost);
1106 list_alloc(size_t vsize)
1108 void *value = (void *) OPENSSL_malloc(vsize);
1113 DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1116 if (!(l = (dane_list) OPENSSL_malloc(sizeof(*l))))
1118 OPENSSL_free(value);
1119 DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1128 list_free(void *list, void (*f)(void *))
1133 for (head = (dane_list) list; head; head = next)
1136 if (f && head->value)
1143 dane_mtype_free(void *p)
1145 list_free(((dane_mtype) p)->data, CRYPTO_free);
1150 dane_selector_free(void *p)
1152 list_free(((dane_selector) p)->mtype, dane_mtype_free);
1160 Tidy up once the connection is finished with.
1163 ssl The ssl connection handle
1165 => Before calling SSL_free()
1166 tls_close() and tls_getc() [the error path] are the obvious places.
1167 Could we do it earlier - right after verification? In tls_client_start()
1168 right after SSL_connect() returns, in that case.
1173 DANESSL_cleanup(SSL *ssl)
1178 DEBUG(D_tls) debug_printf("Dane lib-cleanup\n");
1180 if (dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1182 (void) SSL_set_ex_data(ssl, dane_idx, 0);
1186 list_free(dane->hosts, CRYPTO_free);
1187 for (u = 0; u <= DANESSL_USAGE_LAST; ++u)
1188 if (dane->selectors[u])
1189 list_free(dane->selectors[u], dane_selector_free);
1191 list_free(dane->pkeys, pkey_free);
1193 list_free(dane->certs, cert_free);
1197 static dane_host_list
1198 host_list_init(const char **src)
1200 dane_host_list head = NULL;
1204 dane_host_list elem = (dane_host_list) OPENSSL_malloc(sizeof(*elem));
1207 list_free(head, CRYPTO_free);
1210 elem->value = OPENSSL_strdup(*src++);
1211 LINSERT(head, elem);
1218 DANESSL_get_match_cert(SSL *ssl, X509 **match, const char **mhost, int *depth)
1222 if (dane_idx < 0 || (dane = SSL_get_ex_data(ssl, dane_idx)) == 0)
1224 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1231 *match = dane->match;
1233 *mhost = dane->mhost;
1235 *depth = dane->mdpth;
1238 return (dane->match != 0);
1244 DANESSL_verify_chain(SSL *ssl, STACK_OF(X509) *chain)
1248 X509_STORE_CTX store_ctx;
1249 SSL_CTX *ssl_ctx = SSL_get_SSL_CTX(ssl);
1250 X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx);
1251 int store_ctx_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1253 cert = sk_X509_value(chain, 0);
1254 if (!X509_STORE_CTX_init(&store_ctx, store, cert, chain))
1256 X509_STORE_CTX_set_ex_data(&store_ctx, store_ctx_idx, ssl);
1258 X509_STORE_CTX_set_default(&store_ctx,
1259 SSL_is_server(ssl) ? "ssl_client" : "ssl_server");
1260 X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&store_ctx),
1261 SSL_get0_param(ssl));
1263 if (SSL_get_verify_callback(ssl))
1264 X509_STORE_CTX_set_verify_cb(&store_ctx, SSL_get_verify_callback(ssl));
1266 ret = verify_cert(&store_ctx, NULL);
1268 SSL_set_verify_result(ssl, X509_STORE_CTX_get_error(&store_ctx));
1269 X509_STORE_CTX_cleanup(&store_ctx);
1280 Call this for each TLSA record found for the target, after the
1281 DANE setup has been done on the ssl connection handle.
1284 ssl Connection handle
1285 usage TLSA record field
1286 selector TLSA record field
1287 mdname ??? message digest name?
1288 data ??? TLSA record megalump?
1298 DANESSL_add_tlsa(SSL *ssl, uint8_t usage, uint8_t selector, const char *mdname,
1299 unsigned const char *data, size_t dlen)
1302 dane_selector_list s = 0;
1303 dane_mtype_list m = 0;
1304 dane_data_list d = 0;
1305 dane_cert_list xlist = 0;
1306 dane_pkey_list klist = 0;
1307 const EVP_MD *md = 0;
1309 DEBUG(D_tls) debug_printf("Dane add-tlsa: usage %u sel %u mdname \"%s\"\n",
1310 usage, selector, mdname);
1312 if(dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1314 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1318 if (usage > DANESSL_USAGE_LAST)
1320 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_USAGE);
1323 if (selector > DANESSL_SELECTOR_LAST)
1325 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_SELECTOR);
1329 /* Support built-in standard one-digit mtypes */
1330 if (mdname && *mdname && mdname[1] == '\0')
1331 switch (*mdname - '0')
1333 case DANESSL_MATCHING_FULL: mdname = 0; break;
1334 case DANESSL_MATCHING_2256: mdname = "sha256"; break;
1335 case DANESSL_MATCHING_2512: mdname = "sha512"; break;
1337 if (mdname && *mdname && (md = EVP_get_digestbyname(mdname)) == 0)
1339 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DIGEST);
1342 if (mdname && *mdname && dlen != EVP_MD_size(md))
1344 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DATA_LENGTH);
1349 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_NULL_DATA);
1354 * Full Certificate or Public Key when NULL or empty digest name
1356 if (!mdname || !*mdname)
1360 const unsigned char *p = data;
1362 #define xklistinit(lvar, ltype, var, freeFunc) do { \
1363 (lvar) = (ltype) OPENSSL_malloc(sizeof(*(lvar))); \
1364 if ((lvar) == 0) { \
1365 DANEerr(DANESSL_F_ADD_TLSA, ERR_R_MALLOC_FAILURE); \
1370 lvar->value = var; \
1372 #define xkfreeret(ret) do { \
1373 if (xlist) list_free(xlist, cert_free); \
1374 if (klist) list_free(klist, pkey_free); \
1380 case DANESSL_SELECTOR_CERT:
1381 if (!d2i_X509(&x, &p, dlen) || dlen != p - data)
1385 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT);
1388 k = X509_get_pubkey(x);
1393 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT_PKEY);
1396 if (usage == DANESSL_USAGE_DANE_TA)
1397 xklistinit(xlist, dane_cert_list, x, X509_free);
1400 case DANESSL_SELECTOR_SPKI:
1401 if (!d2i_PUBKEY(&k, &p, dlen) || dlen != p - data)
1405 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_PKEY);
1408 if (usage == DANESSL_USAGE_DANE_TA)
1409 xklistinit(klist, dane_pkey_list, k, EVP_PKEY_free);
1414 /* Find insertion point and don't add duplicate elements. */
1415 for (s = dane->selectors[usage]; s; s = s->next)
1416 if (s->value->selector == selector)
1418 for (m = s->value->mtype; m; m = m->next)
1419 if (m->value->md == md)
1421 for (d = m->value->data; d; d = d->next)
1422 if ( d->value->datalen == dlen
1423 && memcmp(d->value->data, data, dlen) == 0)
1430 if ((d = (dane_data_list) list_alloc(sizeof(*d->value) + dlen)) == 0)
1432 d->value->datalen = dlen;
1433 memcpy(d->value->data, data, dlen);
1436 if ((m = (dane_mtype_list) list_alloc(sizeof(*m->value))) == 0)
1438 list_free(d, CRYPTO_free);
1442 if ((m->value->md = md) != 0)
1443 m->value->mdlen = dlen;
1446 if ((s = (dane_selector_list) list_alloc(sizeof(*s->value))) == 0)
1448 list_free(m, dane_mtype_free);
1451 s->value->mtype = 0;
1452 s->value->selector = selector;
1453 LINSERT(dane->selectors[usage], s);
1455 LINSERT(s->value->mtype, m);
1457 LINSERT(m->value->data, d);
1460 LINSERT(dane->certs, xlist);
1462 LINSERT(dane->pkeys, klist);
1471 Call this once we have an ssl connection handle but before
1472 making the TLS connection.
1474 => In tls_client_start() after the call to SSL_new()
1475 and before the call to SSL_connect(). Exactly where
1476 probably does not matter.
1477 We probably want to keep our existing SNI handling;
1478 call this with NULL.
1481 ssl Connection handle
1482 sni_domain Optional peer server name
1483 hostnames list of names to chack against peer cert
1492 DANESSL_init(SSL *ssl, const char *sni_domain, const char **hostnames)
1497 DEBUG(D_tls) debug_printf("Dane ssl_init\n");
1500 DANEerr(DANESSL_F_INIT, DANESSL_R_LIBRARY_INIT);
1504 if (sni_domain && !SSL_set_tlsext_host_name(ssl, sni_domain))
1507 if ((dane = (ssl_dane *) OPENSSL_malloc(sizeof(ssl_dane))) == 0)
1509 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1512 if (!SSL_set_ex_data(ssl, dane_idx, dane))
1514 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1528 dane->mhost = 0; /* Future SSL control interface */
1529 dane->mdpth = 0; /* Future SSL control interface */
1530 dane->multi = 0; /* Future SSL control interface */
1534 for (i = 0; i <= DANESSL_USAGE_LAST; ++i)
1535 dane->selectors[i] = 0;
1537 if (hostnames && (dane->hosts = host_list_init(hostnames)) == 0)
1539 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1540 DANESSL_cleanup(ssl);
1550 Call this once we have a context to work with, but
1551 before DANESSL_init()
1553 => in tls_client_start(), after tls_init() call gives us the ctx,
1554 if we decide we want to (policy) and can (TLSA records available)
1555 replacing (? what about fallback) everything from testing tls_verify_hosts
1556 down to just before calling SSL_new() for the conn handle.
1567 DANESSL_CTX_init(SSL_CTX *ctx)
1569 DEBUG(D_tls) debug_printf("Dane ctx-init\n");
1572 SSL_CTX_set_cert_verify_callback(ctx, verify_cert, 0);
1575 DANEerr(DANESSL_F_CTX_INIT, DANESSL_R_LIBRARY_INIT);
1580 init_once(volatile int *value, int (*init)(void), void (*postinit)(void))
1584 CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
1587 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1588 CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
1598 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
1600 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1608 * Store library id in zeroth function slot, used to locate the library
1609 * name. This must be done before we load the error strings.
1611 #ifndef OPENSSL_NO_ERR
1612 dane_str_functs[0].error |= ERR_PACK(err_lib_dane, 0, 0);
1613 ERR_load_strings(err_lib_dane, dane_str_functs);
1614 ERR_load_strings(err_lib_dane, dane_str_reasons);
1618 * Register SHA-2 digests, if implemented and not already registered.
1620 #if defined(LN_sha256) && defined(NID_sha256) && !defined(OPENSSL_NO_SHA256)
1621 if (!EVP_get_digestbyname(LN_sha224)) EVP_add_digest(EVP_sha224());
1622 if (!EVP_get_digestbyname(LN_sha256)) EVP_add_digest(EVP_sha256());
1624 #if defined(LN_sha512) && defined(NID_sha512) && !defined(OPENSSL_NO_SHA512)
1625 if (!EVP_get_digestbyname(LN_sha384)) EVP_add_digest(EVP_sha384());
1626 if (!EVP_get_digestbyname(LN_sha512)) EVP_add_digest(EVP_sha512());
1630 * Register an SSL index for the connection-specific ssl_dane structure.
1631 * Using a separate index makes it possible to add DANE support to
1632 * existing OpenSSL releases that don't have a suitable pointer in the
1635 dane_idx = SSL_get_ex_new_index(0, 0, 0, 0, 0);
1642 Call this once. Probably early in startup will do; may need
1643 to be after SSL library init.
1645 => put after call to tls_init() for now
1653 DANESSL_library_init(void)
1655 DEBUG(D_tls) debug_printf("Dane lib-init\n");
1656 if (err_lib_dane < 0)
1657 init_once(&err_lib_dane, ERR_get_next_error_library, dane_init);
1659 #if defined(LN_sha256)
1660 /* No DANE without SHA256 support */
1661 if (dane_idx >= 0 && EVP_get_digestbyname(LN_sha256) != 0)
1664 DANEerr(DANESSL_F_LIBRARY_INIT, DANESSL_R_SUPPORT);
1669 #endif /* OPENSSL_VERSION_NUMBER */