2 * Author: Viktor Dukhovni
3 * License: THIS CODE IS IN THE PUBLIC DOMAIN.
5 * Copyright (c) The Exim Maintainers 2014 - 2016
11 #include <openssl/opensslv.h>
12 #include <openssl/err.h>
13 #include <openssl/crypto.h>
14 #include <openssl/safestack.h>
15 #include <openssl/objects.h>
16 #include <openssl/x509.h>
17 #include <openssl/x509v3.h>
18 #include <openssl/evp.h>
19 #include <openssl/bn.h>
21 #if OPENSSL_VERSION_NUMBER < 0x1000000fL
22 # error "OpenSSL 1.0.0 or higher required"
23 #else /* remainder of file */
25 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
26 # define X509_up_ref(x) CRYPTO_add(&((x)->references), 1, CRYPTO_LOCK_X509)
28 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
29 # define EXIM_HAVE_ASN1_MACROS
30 # define EXIM_OPAQUE_X509
36 #define DANESSL_F_ADD_SKID 100
37 #define DANESSL_F_ADD_TLSA 101
38 #define DANESSL_F_CHECK_END_ENTITY 102
39 #define DANESSL_F_CTX_INIT 103
40 #define DANESSL_F_GROW_CHAIN 104
41 #define DANESSL_F_INIT 105
42 #define DANESSL_F_LIBRARY_INIT 106
43 #define DANESSL_F_LIST_ALLOC 107
44 #define DANESSL_F_MATCH 108
45 #define DANESSL_F_PUSH_EXT 109
46 #define DANESSL_F_SET_TRUST_ANCHOR 110
47 #define DANESSL_F_VERIFY_CERT 111
48 #define DANESSL_F_WRAP_CERT 112
50 #define DANESSL_R_BAD_CERT 100
51 #define DANESSL_R_BAD_CERT_PKEY 101
52 #define DANESSL_R_BAD_DATA_LENGTH 102
53 #define DANESSL_R_BAD_DIGEST 103
54 #define DANESSL_R_BAD_NULL_DATA 104
55 #define DANESSL_R_BAD_PKEY 105
56 #define DANESSL_R_BAD_SELECTOR 106
57 #define DANESSL_R_BAD_USAGE 107
58 #define DANESSL_R_INIT 108
59 #define DANESSL_R_LIBRARY_INIT 109
60 #define DANESSL_R_NOSIGN_KEY 110
61 #define DANESSL_R_SCTX_INIT 111
62 #define DANESSL_R_SUPPORT 112
64 #ifndef OPENSSL_NO_ERR
65 #define DANESSL_F_PLACEHOLDER 0 /* FIRST! Value TBD */
66 static ERR_STRING_DATA dane_str_functs[] = {
67 {DANESSL_F_PLACEHOLDER, "DANE library"}, /* FIRST!!! */
68 {DANESSL_F_ADD_SKID, "add_skid"},
69 {DANESSL_F_ADD_TLSA, "DANESSL_add_tlsa"},
70 {DANESSL_F_CHECK_END_ENTITY, "check_end_entity"},
71 {DANESSL_F_CTX_INIT, "DANESSL_CTX_init"},
72 {DANESSL_F_GROW_CHAIN, "grow_chain"},
73 {DANESSL_F_INIT, "DANESSL_init"},
74 {DANESSL_F_LIBRARY_INIT, "DANESSL_library_init"},
75 {DANESSL_F_LIST_ALLOC, "list_alloc"},
76 {DANESSL_F_MATCH, "match"},
77 {DANESSL_F_PUSH_EXT, "push_ext"},
78 {DANESSL_F_SET_TRUST_ANCHOR, "set_trust_anchor"},
79 {DANESSL_F_VERIFY_CERT, "verify_cert"},
80 {DANESSL_F_WRAP_CERT, "wrap_cert"},
83 static ERR_STRING_DATA dane_str_reasons[] = {
84 {DANESSL_R_BAD_CERT, "Bad TLSA record certificate"},
85 {DANESSL_R_BAD_CERT_PKEY, "Bad TLSA record certificate public key"},
86 {DANESSL_R_BAD_DATA_LENGTH, "Bad TLSA record digest length"},
87 {DANESSL_R_BAD_DIGEST, "Bad TLSA record digest"},
88 {DANESSL_R_BAD_NULL_DATA, "Bad TLSA record null data"},
89 {DANESSL_R_BAD_PKEY, "Bad TLSA record public key"},
90 {DANESSL_R_BAD_SELECTOR, "Bad TLSA record selector"},
91 {DANESSL_R_BAD_USAGE, "Bad TLSA record usage"},
92 {DANESSL_R_INIT, "DANESSL_init() required"},
93 {DANESSL_R_LIBRARY_INIT, "DANESSL_library_init() required"},
94 {DANESSL_R_NOSIGN_KEY, "Certificate usage 2 requires EC support"},
95 {DANESSL_R_SCTX_INIT, "DANESSL_CTX_init() required"},
96 {DANESSL_R_SUPPORT, "DANE library features not supported"},
101 #define DANEerr(f, r) ERR_PUT_error(err_lib_dane, (f), (r), __FILE__, __LINE__)
103 static int err_lib_dane = -1;
104 static int dane_idx = -1;
106 #ifdef X509_V_FLAG_PARTIAL_CHAIN /* OpenSSL >= 1.0.2 */
107 static int wrap_to_root = 0;
109 static int wrap_to_root = 1;
112 static void (*cert_free)(void *) = (void (*)(void *)) X509_free;
113 static void (*pkey_free)(void *) = (void (*)(void *)) EVP_PKEY_free;
115 typedef struct dane_list
117 struct dane_list *next;
121 #define LINSERT(h, e) do { (e)->next = (h); (h) = (e); } while (0)
123 typedef struct dane_host_list
125 struct dane_host_list *next;
129 typedef struct dane_data
132 unsigned char data[0];
135 typedef struct dane_data_list
137 struct dane_data_list *next;
141 typedef struct dane_mtype
148 typedef struct dane_mtype_list
150 struct dane_mtype_list *next;
154 typedef struct dane_selector
157 dane_mtype_list mtype;
160 typedef struct dane_selector_list
162 struct dane_selector_list *next;
164 } *dane_selector_list;
166 typedef struct dane_pkey_list
168 struct dane_pkey_list *next;
172 typedef struct dane_cert_list
174 struct dane_cert_list *next;
178 typedef struct ssl_dane
180 int (*verify)(X509_STORE_CTX *);
181 STACK_OF(X509) *roots;
182 STACK_OF(X509) *chain;
183 X509 *match; /* Matched cert */
184 const char *thost; /* TLSA base domain */
185 char *mhost; /* Matched peer name */
186 dane_pkey_list pkeys;
187 dane_cert_list certs;
188 dane_host_list hosts;
189 dane_selector_list selectors[DANESSL_USAGE_LAST + 1];
191 int mdpth; /* Depth of matched cert */
192 int multi; /* Multi-label wildcards? */
193 int count; /* Number of TLSA records */
196 #ifndef X509_V_ERR_HOSTNAME_MISMATCH
197 # define X509_V_ERR_HOSTNAME_MISMATCH X509_V_ERR_APPLICATION_VERIFICATION
203 match(dane_selector_list slist, X509 *cert, int depth)
208 * Note, set_trust_anchor() needs to know whether the match was for a
209 * pkey digest or a certificate digest. We return MATCHED_PKEY or
210 * MATCHED_CERT accordingly.
212 #define MATCHED_CERT (DANESSL_SELECTOR_CERT + 1)
213 #define MATCHED_PKEY (DANESSL_SELECTOR_SPKI + 1)
216 * Loop over each selector, mtype, and associated data element looking
219 for (matched = 0; !matched && slist; slist = slist->next)
222 unsigned char mdbuf[EVP_MAX_MD_SIZE];
223 unsigned char *buf = NULL;
225 unsigned int len = 0;
228 * Extract ASN.1 DER form of certificate or public key.
230 switch(slist->value->selector)
232 case DANESSL_SELECTOR_CERT:
233 len = i2d_X509(cert, NULL);
234 buf2 = buf = (unsigned char *) OPENSSL_malloc(len);
235 if(buf) i2d_X509(cert, &buf2);
237 case DANESSL_SELECTOR_SPKI:
238 len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), NULL);
239 buf2 = buf = (unsigned char *) OPENSSL_malloc(len);
240 if(buf) i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &buf2);
246 DANEerr(DANESSL_F_MATCH, ERR_R_MALLOC_FAILURE);
249 OPENSSL_assert(buf2 - buf == len);
252 * Loop over each mtype and data element
254 for (m = slist->value->mtype; !matched && m; m = m->next)
257 unsigned char *cmpbuf = buf;
258 unsigned int cmplen = len;
261 * If it is a digest, compute the corresponding digest of the
262 * DER data for comparison, otherwise, use the full object.
267 if (!EVP_Digest(buf, len, cmpbuf, &cmplen, m->value->md, 0))
270 for (d = m->value->data; !matched && d; d = d->next)
271 if ( cmplen == d->value->datalen
272 && memcmp(cmpbuf, d->value->data, cmplen) == 0)
273 matched = slist->value->selector + 1;
283 push_ext(X509 *cert, X509_EXTENSION *ext)
286 if (X509_add_ext(cert, ext, -1))
288 X509_EXTENSION_free(ext);
290 DANEerr(DANESSL_F_PUSH_EXT, ERR_R_MALLOC_FAILURE);
295 add_ext(X509 *issuer, X509 *subject, int ext_nid, char *ext_val)
299 X509V3_set_ctx(&v3ctx, issuer, subject, 0, 0, 0);
300 return push_ext(subject, X509V3_EXT_conf_nid(0, &v3ctx, ext_nid, ext_val));
304 set_serial(X509 *cert, AUTHORITY_KEYID *akid, X509 *subject)
309 if (akid && akid->serial)
310 return (X509_set_serialNumber(cert, akid->serial));
313 * Add one to subject's serial to avoid collisions between TA serial and
314 * serial of signing root.
316 if ( (bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(subject), 0)) != 0
317 && BN_add_word(bn, 1)
318 && BN_to_ASN1_INTEGER(bn, X509_get_serialNumber(cert)))
327 add_akid(X509 *cert, AUTHORITY_KEYID *akid)
329 int nid = NID_authority_key_identifier;
335 * 0 will never be our subject keyid from a SHA-1 hash, but it could be
336 * our subject keyid if forced from child's akid. If so, set our
337 * authority keyid to 1. This way we are never self-signed, and thus
338 * exempt from any potential (off by default for now in OpenSSL)
339 * self-signature checks!
341 id = (akid && akid->keyid) ? akid->keyid : 0;
342 if (id && ASN1_STRING_length(id) == 1 && *ASN1_STRING_data(id) == c)
345 if ( (akid = AUTHORITY_KEYID_new()) != 0
346 && (akid->keyid = ASN1_OCTET_STRING_new()) != 0
347 #ifdef EXIM_HAVE_ASN1_MACROS
348 && ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
350 && M_ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
352 && X509_add1_ext_i2d(cert, nid, akid, 0, X509V3_ADD_APPEND))
355 AUTHORITY_KEYID_free(akid);
360 add_skid(X509 *cert, AUTHORITY_KEYID *akid)
362 int nid = NID_subject_key_identifier;
364 if (!akid || !akid->keyid)
365 return add_ext(0, cert, nid, "hash");
366 return X509_add1_ext_i2d(cert, nid, akid->keyid, 0, X509V3_ADD_APPEND) > 0;
370 akid_issuer_name(AUTHORITY_KEYID *akid)
372 if (akid && akid->issuer)
375 GENERAL_NAMES *gens = akid->issuer;
377 for (i = 0; i < sk_GENERAL_NAME_num(gens); ++i)
379 GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
381 if (gn->type == GEN_DIRNAME)
389 set_issuer_name(X509 *cert, AUTHORITY_KEYID *akid)
391 X509_NAME *name = akid_issuer_name(akid);
394 * If subject's akid specifies an authority key identifer issuer name, we
397 return X509_set_issuer_name(cert,
398 name ? name : X509_get_subject_name(cert));
402 grow_chain(ssl_dane *dane, int trusted, X509 *cert)
404 STACK_OF(X509) **xs = trusted ? &dane->roots : &dane->chain;
405 static ASN1_OBJECT *serverAuth = 0;
410 if ( trusted && !serverAuth
411 && !(serverAuth = OBJ_nid2obj(NID_server_auth)))
413 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
416 if (!*xs && !(*xs = sk_X509_new_null()))
418 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
424 if (trusted && !X509_add1_trust_object(cert, serverAuth))
426 #ifdef EXIM_OPAQUE_X509
429 CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509);
431 if (!sk_X509_push(*xs, cert))
434 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
442 wrap_issuer(ssl_dane *dane, EVP_PKEY *key, X509 *subject, int depth, int top)
446 AUTHORITY_KEYID *akid;
447 X509_NAME *name = X509_get_issuer_name(subject);
448 EVP_PKEY *newkey = key ? key : X509_get_pubkey(subject);
450 #define WRAP_MID 0 /* Ensure intermediate. */
451 #define WRAP_TOP 1 /* Ensure self-signed. */
453 if (!name || !newkey || !(cert = X509_new()))
457 * Record the depth of the trust-anchor certificate.
460 dane->depth = depth + 1;
463 * XXX: Uncaught error condition:
465 * The return value is NULL both when the extension is missing, and when
466 * OpenSSL rans out of memory while parsing the extension.
469 akid = X509_get_ext_d2i(subject, NID_authority_key_identifier, 0, 0);
470 /* XXX: Should we peek at the error stack here??? */
473 * If top is true generate a self-issued root CA, otherwise an
474 * intermediate CA and possibly its self-signed issuer.
476 * CA cert valid for +/- 30 days
478 if ( !X509_set_version(cert, 2)
479 || !set_serial(cert, akid, subject)
480 || !X509_set_subject_name(cert, name)
481 || !set_issuer_name(cert, akid)
482 || !X509_gmtime_adj(X509_get_notBefore(cert), -30 * 86400L)
483 || !X509_gmtime_adj(X509_get_notAfter(cert), 30 * 86400L)
484 || !X509_set_pubkey(cert, newkey)
485 || !add_ext(0, cert, NID_basic_constraints, "CA:TRUE")
486 || (!top && !add_akid(cert, akid))
487 || !add_skid(cert, akid)
488 || ( !top && wrap_to_root
489 && !wrap_issuer(dane, newkey, cert, depth, WRAP_TOP)))
493 AUTHORITY_KEYID_free(akid);
495 EVP_PKEY_free(newkey);
497 ret = grow_chain(dane, !top && wrap_to_root ? UNTRUSTED : TRUSTED, cert);
504 wrap_cert(ssl_dane *dane, X509 *tacert, int depth)
507 dane->depth = depth + 1;
510 * If the TA certificate is self-issued, or need not be, use it directly.
511 * Otherwise, synthesize requisuite ancestors.
514 || X509_check_issued(tacert, tacert) == X509_V_OK)
515 return grow_chain(dane, TRUSTED, tacert);
517 if (wrap_issuer(dane, 0, tacert, depth, WRAP_MID))
518 return grow_chain(dane, UNTRUSTED, tacert);
523 ta_signed(ssl_dane *dane, X509 *cert, int depth)
531 * First check whether issued and signed by a TA cert, this is cheaper
532 * than the bare-public key checks below, since we can determine whether
533 * the candidate TA certificate issued the certificate to be checked
534 * first (name comparisons), before we bother with signature checks
535 * (public key operations).
537 for (x = dane->certs; !done && x; x = x->next)
539 if (X509_check_issued(x->value, cert) == X509_V_OK)
541 if (!(pk = X509_get_pubkey(x->value)))
544 * The cert originally contained a valid pkey, which does
545 * not just vanish, so this is most likely a memory error.
550 /* Check signature, since some other TA may work if not this. */
551 if (X509_verify(cert, pk) > 0)
552 done = wrap_cert(dane, x->value, depth) ? 1 : -1;
558 * With bare TA public keys, we can't check whether the trust chain is
559 * issued by the key, but we can determine whether it is signed by the
560 * key, so we go with that.
562 * Ideally, the corresponding certificate was presented in the chain, and we
563 * matched it by its public key digest one level up. This code is here
564 * to handle adverse conditions imposed by sloppy administrators of
565 * receiving systems with poorly constructed chains.
567 * We'd like to optimize out keys that should not match when the cert's
568 * authority key id does not match the key id of this key computed via
569 * the RFC keyid algorithm (SHA-1 digest of public key bit-string sans
570 * ASN1 tag and length thus also excluding the unused bits field that is
571 * logically part of the length). However, some CAs have a non-standard
572 * authority keyid, so we lose. Too bad.
574 * This may push errors onto the stack when the certificate signature is
575 * not of the right type or length, throw these away,
577 for (k = dane->pkeys; !done && k; k = k->next)
578 if (X509_verify(cert, k->value) > 0)
579 done = wrap_issuer(dane, k->value, cert, depth, WRAP_MID) ? 1 : -1;
587 set_trust_anchor(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
595 STACK_OF(X509) *in = ctx->untrusted; /* XXX: Accessor? */
597 if (!grow_chain(dane, UNTRUSTED, 0))
601 * Accept a degenerate case: depth 0 self-signed trust-anchor.
603 if (X509_check_issued(cert, cert) == X509_V_OK)
606 matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], cert, 0);
607 if (matched > 0 && !grow_chain(dane, TRUSTED, cert))
612 /* Make a shallow copy of the input untrusted chain. */
613 if (!(in = sk_X509_dup(in)))
615 DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
620 * At each iteration we consume the issuer of the current cert. This
621 * reduces the length of the "in" chain by one. If no issuer is found,
622 * we are done. We also stop when a certificate matches a TA in the
625 * Caller ensures that the initial certificate is not self-signed.
627 for (n = sk_X509_num(in); n > 0; --n, ++depth)
629 for (i = 0; i < n; ++i)
630 if (X509_check_issued(sk_X509_value(in, i), cert) == X509_V_OK)
634 * Final untrusted element with no issuer in the peer's chain, it may
635 * however be signed by a pkey or cert obtained via a TLSA RR.
640 /* Peer's chain contains an issuer ca. */
641 ca = sk_X509_delete(in, i);
643 /* If not a trust anchor, record untrusted ca and continue. */
644 if ((matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], ca,
647 if (grow_chain(dane, UNTRUSTED, ca))
649 if (!X509_check_issued(ca, ca) == X509_V_OK)
651 /* Restart with issuer as subject */
655 /* Final self-signed element, skip ta_signed() check. */
661 else if(matched == MATCHED_CERT)
663 if(!wrap_cert(dane, ca, depth))
666 else if(matched == MATCHED_PKEY)
668 if ( !(takey = X509_get_pubkey(ca))
669 || !wrap_issuer(dane, takey, cert, depth, WRAP_MID))
672 EVP_PKEY_free(takey);
674 DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
681 /* Shallow free the duplicated input untrusted chain. */
685 * When the loop exits, if "cert" is set, it is not self-signed and has
686 * no issuer in the chain, we check for a possible signature via a DNS
687 * obtained TA cert or public key.
689 if (matched == 0 && cert)
690 matched = ta_signed(dane, cert, depth);
696 check_end_entity(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
700 matched = match(dane->selectors[DANESSL_USAGE_DANE_EE], cert, 0);
708 if ( (ctx->chain = sk_X509_new_null()) != 0
709 && sk_X509_push(ctx->chain, cert))
713 DANEerr(DANESSL_F_CHECK_END_ENTITY, ERR_R_MALLOC_FAILURE);
722 match_name(const char *certid, ssl_dane *dane)
724 int multi = dane->multi;
725 dane_host_list hosts;
727 for (hosts = dane->hosts; hosts; hosts = hosts->next)
729 int match_subdomain = 0;
730 const char *domain = hosts->value;
735 if (*domain == '.' && domain[1] != '\0')
742 * Sub-domain match: certid is any sub-domain of hostname.
746 if ( (idlen = strlen(certid)) > (domlen = strlen(domain)) + 1
747 && certid[idlen - domlen - 1] == '.'
748 && !strcasecmp(certid + (idlen - domlen), domain))
755 * Exact match and initial "*" match. The initial "*" in a certid
756 * matches one (if multi is false) or more hostname components under
757 * the condition that the certid contains multiple hostname components.
759 if ( !strcasecmp(certid, domain)
760 || ( certid[0] == '*' && certid[1] == '.' && certid[2] != 0
761 && (parent = strchr(domain, '.')) != 0
762 && (idlen = strlen(certid + 1)) <= (domlen = strlen(parent))
763 && strcasecmp(multi ? parent + domlen - idlen : parent, certid+1) == 0))
770 check_name(char *name, int len)
772 char *cp = name + len;
774 while (len > 0 && !*--cp)
775 --len; /* Ignore trailing NULs */
778 for (cp = name; *cp; cp++)
781 if (!((c >= 'a' && c <= 'z') ||
782 (c >= '0' && c <= '9') ||
783 (c >= 'A' && c <= 'Z') ||
784 (c == '.' || c == '-') ||
786 return 0; /* Only LDH, '.' and '*' */
788 if (cp - name != len) /* Guard against internal NULs */
794 parse_dns_name(const GENERAL_NAME *gn)
796 if (gn->type != GEN_DNS)
798 if (ASN1_STRING_type(gn->d.ia5) != V_ASN1_IA5STRING)
800 return check_name((char *) ASN1_STRING_data(gn->d.ia5),
801 ASN1_STRING_length(gn->d.ia5));
805 parse_subject_name(X509 *cert)
807 X509_NAME *name = X509_get_subject_name(cert);
808 X509_NAME_ENTRY *entry;
809 ASN1_STRING *entry_str;
810 unsigned char *namebuf;
811 int nid = NID_commonName;
815 if (!name || (i = X509_NAME_get_index_by_NID(name, nid, -1)) < 0)
817 if (!(entry = X509_NAME_get_entry(name, i)))
819 if (!(entry_str = X509_NAME_ENTRY_get_data(entry)))
822 if ((len = ASN1_STRING_to_UTF8(&namebuf, entry_str)) < 0)
824 if (len <= 0 || check_name((char *) namebuf, len) == 0)
826 OPENSSL_free(namebuf);
829 return (char *) namebuf;
833 name_check(ssl_dane *dane, X509 *cert)
836 BOOL got_altname = FALSE;
839 gens = X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0);
842 int n = sk_GENERAL_NAME_num(gens);
845 for (i = 0; i < n; ++i)
847 const GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
850 if (gn->type != GEN_DNS)
853 certid = parse_dns_name(gn);
854 if (certid && *certid)
856 if ((matched = match_name(certid, dane)) == 0)
858 if (!(dane->mhost = OPENSSL_strdup(certid)))
860 DEBUG(D_tls) debug_printf("Dane name_check: matched SAN %s\n", certid);
864 GENERAL_NAMES_free(gens);
868 * XXX: Should the subjectName be skipped when *any* altnames are present,
869 * or only when DNS altnames are present?
873 char *certid = parse_subject_name(cert);
874 if (certid != 0 && *certid && (matched = match_name(certid, dane)) != 0)
876 DEBUG(D_tls) debug_printf("Dane name_check: matched SN %s\n", certid);
877 dane->mhost = OPENSSL_strdup(certid);
880 OPENSSL_free(certid);
886 verify_chain(X509_STORE_CTX *ctx)
888 dane_selector_list issuer_rrs;
889 dane_selector_list leaf_rrs;
890 int (*cb)(int, X509_STORE_CTX *) = ctx->verify_cb;
891 int ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
892 SSL *ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
893 ssl_dane *dane = SSL_get_ex_data(ssl, dane_idx);
894 X509 *cert = ctx->cert; /* XXX: accessor? */
896 int chain_length = sk_X509_num(ctx->chain);
898 DEBUG(D_tls) debug_printf("Dane verify_chain\n");
900 issuer_rrs = dane->selectors[DANESSL_USAGE_PKIX_TA];
901 leaf_rrs = dane->selectors[DANESSL_USAGE_PKIX_EE];
902 ctx->verify = dane->verify;
904 if ((matched = name_check(dane, cert)) < 0)
906 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
912 ctx->error_depth = 0;
913 ctx->current_cert = cert;
914 X509_STORE_CTX_set_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH);
921 * Satisfy at least one usage 0 or 1 constraint, unless we've already
922 * matched a usage 2 trust anchor.
924 * XXX: internal_verify() doesn't callback with top certs that are not
925 * self-issued. This should be fixed in a future OpenSSL.
927 if (dane->roots && sk_X509_num(dane->roots))
929 X509 *top = sk_X509_value(ctx->chain, dane->depth);
931 dane->mdpth = dane->depth;
935 #ifndef NO_CALLBACK_WORKAROUND
936 if (X509_check_issued(top, top) != X509_V_OK)
938 ctx->error_depth = dane->depth;
939 ctx->current_cert = top;
944 /* Pop synthetic trust-anchor ancestors off the chain! */
945 while (--chain_length > dane->depth)
946 X509_free(sk_X509_pop(ctx->chain));
954 * Check for an EE match, then a CA match at depths > 0, and
955 * finally, if the EE cert is self-issued, for a depth 0 CA match.
958 matched = match(leaf_rrs, xn, 0);
959 if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched EE\n");
961 if (!matched && issuer_rrs)
962 for (n = chain_length-1; !matched && n >= 0; --n)
964 xn = sk_X509_value(ctx->chain, n);
965 if (n > 0 || X509_check_issued(xn, xn) == X509_V_OK)
966 matched = match(issuer_rrs, xn, n);
968 if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched %s\n",
969 n>0 ? "CA" : "selfisssued EE");
973 ctx->current_cert = cert;
974 ctx->error_depth = 0;
975 X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_UNTRUSTED);
987 return ctx->verify(ctx);
991 dane_reset(ssl_dane *dane)
996 OPENSSL_free(dane->mhost);
1001 sk_X509_pop_free(dane->roots, X509_free);
1006 sk_X509_pop_free(dane->chain, X509_free);
1011 X509_free(dane->match);
1018 verify_cert(X509_STORE_CTX *ctx, void *unused_ctx)
1020 static int ssl_idx = -1;
1023 int (*cb)(int, X509_STORE_CTX *) = ctx->verify_cb;
1025 X509 *cert = ctx->cert; /* XXX: accessor? */
1027 DEBUG(D_tls) debug_printf("Dane verify_cert\n");
1030 ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1033 DANEerr(DANESSL_F_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
1037 ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
1038 if (!(dane = SSL_get_ex_data(ssl, dane_idx)) || !cert)
1039 return X509_verify_cert(ctx);
1041 /* Reset for verification of a new chain, perhaps a renegotiation. */
1044 if (dane->selectors[DANESSL_USAGE_DANE_EE])
1046 if ((matched = check_end_entity(ctx, dane, cert)) > 0)
1048 ctx->error_depth = 0;
1049 ctx->current_cert = cert;
1054 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1059 if (dane->selectors[DANESSL_USAGE_DANE_TA])
1061 if ((matched = set_trust_anchor(ctx, dane, cert)) < 0)
1063 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1069 * Check that setting the untrusted chain updates the expected
1070 * structure member at the expected offset.
1072 X509_STORE_CTX_trusted_stack(ctx, dane->roots);
1073 X509_STORE_CTX_set_chain(ctx, dane->chain);
1074 OPENSSL_assert(ctx->untrusted == dane->chain);
1079 * Name checks and usage 0/1 constraint enforcement are delayed until
1080 * X509_verify_cert() builds the full chain and calls our verify_chain()
1083 dane->verify = ctx->verify;
1084 ctx->verify = verify_chain;
1086 if (X509_verify_cert(ctx))
1090 * If the chain is invalid, clear any matching cert or hostname, to
1091 * protect callers that might erroneously rely on these alone without
1092 * checking the validation status.
1096 X509_free(dane->match);
1101 OPENSSL_free(dane->mhost);
1108 list_alloc(size_t vsize)
1110 void *value = (void *) OPENSSL_malloc(vsize);
1115 DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1118 if (!(l = (dane_list) OPENSSL_malloc(sizeof(*l))))
1120 OPENSSL_free(value);
1121 DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1130 list_free(void *list, void (*f)(void *))
1135 for (head = (dane_list) list; head; head = next)
1138 if (f && head->value)
1145 dane_mtype_free(void *p)
1147 list_free(((dane_mtype) p)->data, CRYPTO_free);
1152 dane_selector_free(void *p)
1154 list_free(((dane_selector) p)->mtype, dane_mtype_free);
1162 Tidy up once the connection is finished with.
1165 ssl The ssl connection handle
1167 => Before calling SSL_free()
1168 tls_close() and tls_getc() [the error path] are the obvious places.
1169 Could we do it earlier - right after verification? In tls_client_start()
1170 right after SSL_connect() returns, in that case.
1175 DANESSL_cleanup(SSL *ssl)
1180 DEBUG(D_tls) debug_printf("Dane lib-cleanup\n");
1182 if (dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1184 (void) SSL_set_ex_data(ssl, dane_idx, 0);
1188 list_free(dane->hosts, CRYPTO_free);
1189 for (u = 0; u <= DANESSL_USAGE_LAST; ++u)
1190 if (dane->selectors[u])
1191 list_free(dane->selectors[u], dane_selector_free);
1193 list_free(dane->pkeys, pkey_free);
1195 list_free(dane->certs, cert_free);
1199 static dane_host_list
1200 host_list_init(const char **src)
1202 dane_host_list head = NULL;
1206 dane_host_list elem = (dane_host_list) OPENSSL_malloc(sizeof(*elem));
1209 list_free(head, CRYPTO_free);
1212 elem->value = OPENSSL_strdup(*src++);
1213 LINSERT(head, elem);
1220 DANESSL_get_match_cert(SSL *ssl, X509 **match, const char **mhost, int *depth)
1224 if (dane_idx < 0 || (dane = SSL_get_ex_data(ssl, dane_idx)) == 0)
1226 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1233 *match = dane->match;
1235 *mhost = dane->mhost;
1237 *depth = dane->mdpth;
1240 return (dane->match != 0);
1246 DANESSL_verify_chain(SSL *ssl, STACK_OF(X509) *chain)
1250 X509_STORE_CTX store_ctx;
1251 SSL_CTX *ssl_ctx = SSL_get_SSL_CTX(ssl);
1252 X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx);
1253 int store_ctx_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1255 cert = sk_X509_value(chain, 0);
1256 if (!X509_STORE_CTX_init(&store_ctx, store, cert, chain))
1258 X509_STORE_CTX_set_ex_data(&store_ctx, store_ctx_idx, ssl);
1260 X509_STORE_CTX_set_default(&store_ctx,
1261 SSL_is_server(ssl) ? "ssl_client" : "ssl_server");
1262 X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&store_ctx),
1263 SSL_get0_param(ssl));
1265 if (SSL_get_verify_callback(ssl))
1266 X509_STORE_CTX_set_verify_cb(&store_ctx, SSL_get_verify_callback(ssl));
1268 ret = verify_cert(&store_ctx, NULL);
1270 SSL_set_verify_result(ssl, X509_STORE_CTX_get_error(&store_ctx));
1271 X509_STORE_CTX_cleanup(&store_ctx);
1282 Call this for each TLSA record found for the target, after the
1283 DANE setup has been done on the ssl connection handle.
1286 ssl Connection handle
1287 usage TLSA record field
1288 selector TLSA record field
1289 mdname ??? message digest name?
1290 data ??? TLSA record megalump?
1300 DANESSL_add_tlsa(SSL *ssl, uint8_t usage, uint8_t selector, const char *mdname,
1301 unsigned const char *data, size_t dlen)
1304 dane_selector_list s = 0;
1305 dane_mtype_list m = 0;
1306 dane_data_list d = 0;
1307 dane_cert_list xlist = 0;
1308 dane_pkey_list klist = 0;
1309 const EVP_MD *md = 0;
1311 DEBUG(D_tls) debug_printf("Dane add-tlsa: usage %u sel %u mdname \"%s\"\n",
1312 usage, selector, mdname);
1314 if(dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1316 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1320 if (usage > DANESSL_USAGE_LAST)
1322 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_USAGE);
1325 if (selector > DANESSL_SELECTOR_LAST)
1327 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_SELECTOR);
1331 /* Support built-in standard one-digit mtypes */
1332 if (mdname && *mdname && mdname[1] == '\0')
1333 switch (*mdname - '0')
1335 case DANESSL_MATCHING_FULL: mdname = 0; break;
1336 case DANESSL_MATCHING_2256: mdname = "sha256"; break;
1337 case DANESSL_MATCHING_2512: mdname = "sha512"; break;
1339 if (mdname && *mdname && (md = EVP_get_digestbyname(mdname)) == 0)
1341 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DIGEST);
1344 if (mdname && *mdname && dlen != EVP_MD_size(md))
1346 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DATA_LENGTH);
1351 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_NULL_DATA);
1356 * Full Certificate or Public Key when NULL or empty digest name
1358 if (!mdname || !*mdname)
1362 const unsigned char *p = data;
1364 #define xklistinit(lvar, ltype, var, freeFunc) do { \
1365 (lvar) = (ltype) OPENSSL_malloc(sizeof(*(lvar))); \
1366 if ((lvar) == 0) { \
1367 DANEerr(DANESSL_F_ADD_TLSA, ERR_R_MALLOC_FAILURE); \
1372 lvar->value = var; \
1374 #define xkfreeret(ret) do { \
1375 if (xlist) list_free(xlist, cert_free); \
1376 if (klist) list_free(klist, pkey_free); \
1382 case DANESSL_SELECTOR_CERT:
1383 if (!d2i_X509(&x, &p, dlen) || dlen != p - data)
1387 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT);
1390 k = X509_get_pubkey(x);
1395 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT_PKEY);
1398 if (usage == DANESSL_USAGE_DANE_TA)
1399 xklistinit(xlist, dane_cert_list, x, X509_free);
1402 case DANESSL_SELECTOR_SPKI:
1403 if (!d2i_PUBKEY(&k, &p, dlen) || dlen != p - data)
1407 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_PKEY);
1410 if (usage == DANESSL_USAGE_DANE_TA)
1411 xklistinit(klist, dane_pkey_list, k, EVP_PKEY_free);
1416 /* Find insertion point and don't add duplicate elements. */
1417 for (s = dane->selectors[usage]; s; s = s->next)
1418 if (s->value->selector == selector)
1420 for (m = s->value->mtype; m; m = m->next)
1421 if (m->value->md == md)
1423 for (d = m->value->data; d; d = d->next)
1424 if ( d->value->datalen == dlen
1425 && memcmp(d->value->data, data, dlen) == 0)
1432 if ((d = (dane_data_list) list_alloc(sizeof(*d->value) + dlen)) == 0)
1434 d->value->datalen = dlen;
1435 memcpy(d->value->data, data, dlen);
1438 if ((m = (dane_mtype_list) list_alloc(sizeof(*m->value))) == 0)
1440 list_free(d, CRYPTO_free);
1444 if ((m->value->md = md) != 0)
1445 m->value->mdlen = dlen;
1448 if ((s = (dane_selector_list) list_alloc(sizeof(*s->value))) == 0)
1450 list_free(m, dane_mtype_free);
1453 s->value->mtype = 0;
1454 s->value->selector = selector;
1455 LINSERT(dane->selectors[usage], s);
1457 LINSERT(s->value->mtype, m);
1459 LINSERT(m->value->data, d);
1462 LINSERT(dane->certs, xlist);
1464 LINSERT(dane->pkeys, klist);
1473 Call this once we have an ssl connection handle but before
1474 making the TLS connection.
1476 => In tls_client_start() after the call to SSL_new()
1477 and before the call to SSL_connect(). Exactly where
1478 probably does not matter.
1479 We probably want to keep our existing SNI handling;
1480 call this with NULL.
1483 ssl Connection handle
1484 sni_domain Optional peer server name
1485 hostnames list of names to chack against peer cert
1494 DANESSL_init(SSL *ssl, const char *sni_domain, const char **hostnames)
1499 DEBUG(D_tls) debug_printf("Dane ssl_init\n");
1502 DANEerr(DANESSL_F_INIT, DANESSL_R_LIBRARY_INIT);
1506 if (sni_domain && !SSL_set_tlsext_host_name(ssl, sni_domain))
1509 if ((dane = (ssl_dane *) OPENSSL_malloc(sizeof(ssl_dane))) == 0)
1511 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1514 if (!SSL_set_ex_data(ssl, dane_idx, dane))
1516 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1530 dane->mhost = 0; /* Future SSL control interface */
1531 dane->mdpth = 0; /* Future SSL control interface */
1532 dane->multi = 0; /* Future SSL control interface */
1536 for (i = 0; i <= DANESSL_USAGE_LAST; ++i)
1537 dane->selectors[i] = 0;
1539 if (hostnames && (dane->hosts = host_list_init(hostnames)) == 0)
1541 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1542 DANESSL_cleanup(ssl);
1552 Call this once we have a context to work with, but
1553 before DANESSL_init()
1555 => in tls_client_start(), after tls_init() call gives us the ctx,
1556 if we decide we want to (policy) and can (TLSA records available)
1557 replacing (? what about fallback) everything from testing tls_verify_hosts
1558 down to just before calling SSL_new() for the conn handle.
1569 DANESSL_CTX_init(SSL_CTX *ctx)
1571 DEBUG(D_tls) debug_printf("Dane ctx-init\n");
1574 SSL_CTX_set_cert_verify_callback(ctx, verify_cert, 0);
1577 DANEerr(DANESSL_F_CTX_INIT, DANESSL_R_LIBRARY_INIT);
1582 init_once(volatile int *value, int (*init)(void), void (*postinit)(void))
1586 CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
1589 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1590 CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
1600 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
1602 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1610 * Store library id in zeroth function slot, used to locate the library
1611 * name. This must be done before we load the error strings.
1613 #ifndef OPENSSL_NO_ERR
1614 dane_str_functs[0].error |= ERR_PACK(err_lib_dane, 0, 0);
1615 ERR_load_strings(err_lib_dane, dane_str_functs);
1616 ERR_load_strings(err_lib_dane, dane_str_reasons);
1620 * Register SHA-2 digests, if implemented and not already registered.
1622 #if defined(LN_sha256) && defined(NID_sha256) && !defined(OPENSSL_NO_SHA256)
1623 if (!EVP_get_digestbyname(LN_sha224)) EVP_add_digest(EVP_sha224());
1624 if (!EVP_get_digestbyname(LN_sha256)) EVP_add_digest(EVP_sha256());
1626 #if defined(LN_sha512) && defined(NID_sha512) && !defined(OPENSSL_NO_SHA512)
1627 if (!EVP_get_digestbyname(LN_sha384)) EVP_add_digest(EVP_sha384());
1628 if (!EVP_get_digestbyname(LN_sha512)) EVP_add_digest(EVP_sha512());
1632 * Register an SSL index for the connection-specific ssl_dane structure.
1633 * Using a separate index makes it possible to add DANE support to
1634 * existing OpenSSL releases that don't have a suitable pointer in the
1637 dane_idx = SSL_get_ex_new_index(0, 0, 0, 0, 0);
1644 Call this once. Probably early in startup will do; may need
1645 to be after SSL library init.
1647 => put after call to tls_init() for now
1655 DANESSL_library_init(void)
1657 DEBUG(D_tls) debug_printf("Dane lib-init\n");
1658 if (err_lib_dane < 0)
1659 init_once(&err_lib_dane, ERR_get_next_error_library, dane_init);
1661 #if defined(LN_sha256)
1662 /* No DANE without SHA256 support */
1663 if (dane_idx >= 0 && EVP_get_digestbyname(LN_sha256) != 0)
1666 DANEerr(DANESSL_F_LIBRARY_INIT, DANESSL_R_SUPPORT);
1671 #endif /* OPENSSL_VERSION_NUMBER */