DANE: fix type-2xx TLSA under older OpenSSL versions Bug 2198
[exim.git] / src / src / dane-openssl.c
... / ...
CommitLineData
1/*
2 * Author: Viktor Dukhovni
3 * License: THIS CODE IS IN THE PUBLIC DOMAIN.
4 *
5 * Copyright (c) The Exim Maintainers 2014 - 2017
6 */
7#include <stdio.h>
8#include <string.h>
9#include <stdint.h>
10
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>
20
21#if OPENSSL_VERSION_NUMBER < 0x1000000fL
22# error "OpenSSL 1.0.0 or higher required"
23#endif
24
25#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
26# define X509_up_ref(x) CRYPTO_add(&((x)->references), 1, CRYPTO_LOCK_X509)
27#endif
28#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
29# define EXIM_HAVE_ASN1_MACROS
30# define EXIM_OPAQUE_X509
31#else
32# define X509_STORE_CTX_get_verify(ctx) (ctx)->verify
33# define X509_STORE_CTX_get_verify_cb(ctx) (ctx)->verify_cb
34# define X509_STORE_CTX_get0_cert(ctx) (ctx)->cert
35# define X509_STORE_CTX_get0_chain(ctx) (ctx)->chain
36# define X509_STORE_CTX_get0_untrusted(ctx) (ctx)->untrusted
37
38# define X509_STORE_CTX_set_verify(ctx, verify_chain) (ctx)->verify = (verify_chain)
39# define X509_STORE_CTX_set0_verified_chain(ctx, sk) (ctx)->chain = (sk)
40# define X509_STORE_CTX_set_error_depth(ctx, val) (ctx)->error_depth = (val)
41# define X509_STORE_CTX_set_current_cert(ctx, cert) (ctx)->current_cert = (cert)
42
43# define ASN1_STRING_get0_data ASN1_STRING_data
44# define X509_getm_notBefore X509_get_notBefore
45# define X509_getm_notAfter X509_get_notAfter
46
47# define CRYPTO_ONCE_STATIC_INIT 0
48# define CRYPTO_THREAD_run_once run_once
49typedef int CRYPTO_ONCE;
50#endif
51
52
53#include "danessl.h"
54
55#define DANESSL_F_ADD_SKID 100
56#define DANESSL_F_ADD_TLSA 101
57#define DANESSL_F_CHECK_END_ENTITY 102
58#define DANESSL_F_CTX_INIT 103
59#define DANESSL_F_GROW_CHAIN 104
60#define DANESSL_F_INIT 105
61#define DANESSL_F_LIBRARY_INIT 106
62#define DANESSL_F_LIST_ALLOC 107
63#define DANESSL_F_MATCH 108
64#define DANESSL_F_PUSH_EXT 109
65#define DANESSL_F_SET_TRUST_ANCHOR 110
66#define DANESSL_F_VERIFY_CERT 111
67#define DANESSL_F_WRAP_CERT 112
68#define DANESSL_F_DANESSL_VERIFY_CHAIN 113
69
70#define DANESSL_R_BAD_CERT 100
71#define DANESSL_R_BAD_CERT_PKEY 101
72#define DANESSL_R_BAD_DATA_LENGTH 102
73#define DANESSL_R_BAD_DIGEST 103
74#define DANESSL_R_BAD_NULL_DATA 104
75#define DANESSL_R_BAD_PKEY 105
76#define DANESSL_R_BAD_SELECTOR 106
77#define DANESSL_R_BAD_USAGE 107
78#define DANESSL_R_INIT 108
79#define DANESSL_R_LIBRARY_INIT 109
80#define DANESSL_R_NOSIGN_KEY 110
81#define DANESSL_R_SCTX_INIT 111
82#define DANESSL_R_SUPPORT 112
83
84#ifndef OPENSSL_NO_ERR
85#define DANESSL_F_PLACEHOLDER 0 /* FIRST! Value TBD */
86static ERR_STRING_DATA dane_str_functs[] = {
87 /* error string */
88 {DANESSL_F_PLACEHOLDER, "DANE library"}, /* FIRST!!! */
89 {DANESSL_F_ADD_SKID, "add_skid"},
90 {DANESSL_F_ADD_TLSA, "DANESSL_add_tlsa"},
91 {DANESSL_F_CHECK_END_ENTITY, "check_end_entity"},
92 {DANESSL_F_CTX_INIT, "DANESSL_CTX_init"},
93 {DANESSL_F_GROW_CHAIN, "grow_chain"},
94 {DANESSL_F_INIT, "DANESSL_init"},
95 {DANESSL_F_LIBRARY_INIT, "DANESSL_library_init"},
96 {DANESSL_F_LIST_ALLOC, "list_alloc"},
97 {DANESSL_F_MATCH, "match"},
98 {DANESSL_F_PUSH_EXT, "push_ext"},
99 {DANESSL_F_SET_TRUST_ANCHOR, "set_trust_anchor"},
100 {DANESSL_F_VERIFY_CERT, "verify_cert"},
101 {DANESSL_F_WRAP_CERT, "wrap_cert"},
102 {0, NULL}
103};
104static ERR_STRING_DATA dane_str_reasons[] = {
105 /* error string */
106 {DANESSL_R_BAD_CERT, "Bad TLSA record certificate"},
107 {DANESSL_R_BAD_CERT_PKEY, "Bad TLSA record certificate public key"},
108 {DANESSL_R_BAD_DATA_LENGTH, "Bad TLSA record digest length"},
109 {DANESSL_R_BAD_DIGEST, "Bad TLSA record digest"},
110 {DANESSL_R_BAD_NULL_DATA, "Bad TLSA record null data"},
111 {DANESSL_R_BAD_PKEY, "Bad TLSA record public key"},
112 {DANESSL_R_BAD_SELECTOR, "Bad TLSA record selector"},
113 {DANESSL_R_BAD_USAGE, "Bad TLSA record usage"},
114 {DANESSL_R_INIT, "DANESSL_init() required"},
115 {DANESSL_R_LIBRARY_INIT, "DANESSL_library_init() required"},
116 {DANESSL_R_NOSIGN_KEY, "Certificate usage 2 requires EC support"},
117 {DANESSL_R_SCTX_INIT, "DANESSL_CTX_init() required"},
118 {DANESSL_R_SUPPORT, "DANE library features not supported"},
119 {0, NULL}
120};
121#endif
122
123#define DANEerr(f, r) ERR_PUT_error(err_lib_dane, (f), (r), __FILE__, __LINE__)
124
125static int err_lib_dane = -1;
126static int dane_idx = -1;
127
128#ifdef X509_V_FLAG_PARTIAL_CHAIN /* OpenSSL >= 1.0.2 */
129static int wrap_to_root = 0;
130#else
131static int wrap_to_root = 1;
132#endif
133
134static void (*cert_free)(void *) = (void (*)(void *)) X509_free;
135static void (*pkey_free)(void *) = (void (*)(void *)) EVP_PKEY_free;
136
137typedef struct dane_list
138{
139 struct dane_list *next;
140 void *value;
141} *dane_list;
142
143#define LINSERT(h, e) do { (e)->next = (h); (h) = (e); } while (0)
144
145typedef struct dane_host_list
146{
147 struct dane_host_list *next;
148 char *value;
149} *dane_host_list;
150
151typedef struct dane_data
152{
153 size_t datalen;
154 unsigned char data[0];
155} *dane_data;
156
157typedef struct dane_data_list
158{
159 struct dane_data_list *next;
160 dane_data value;
161} *dane_data_list;
162
163typedef struct dane_mtype
164{
165 int mdlen;
166 const EVP_MD *md;
167 dane_data_list data;
168} *dane_mtype;
169
170typedef struct dane_mtype_list
171{
172 struct dane_mtype_list *next;
173 dane_mtype value;
174} *dane_mtype_list;
175
176typedef struct dane_selector
177{
178 uint8_t selector;
179 dane_mtype_list mtype;
180} *dane_selector;
181
182typedef struct dane_selector_list
183{
184 struct dane_selector_list *next;
185 dane_selector value;
186} *dane_selector_list;
187
188typedef struct dane_pkey_list
189{
190 struct dane_pkey_list *next;
191 EVP_PKEY *value;
192} *dane_pkey_list;
193
194typedef struct dane_cert_list
195{
196 struct dane_cert_list *next;
197 X509 *value;
198} *dane_cert_list;
199
200typedef struct ssl_dane
201{
202 int (*verify)(X509_STORE_CTX *);
203 STACK_OF(X509) *roots;
204 STACK_OF(X509) *chain;
205 X509 *match; /* Matched cert */
206 const char *thost; /* TLSA base domain */
207 char *mhost; /* Matched peer name */
208 dane_pkey_list pkeys;
209 dane_cert_list certs;
210 dane_host_list hosts;
211 dane_selector_list selectors[DANESSL_USAGE_LAST + 1];
212 int depth;
213 int mdpth; /* Depth of matched cert */
214 int multi; /* Multi-label wildcards? */
215 int count; /* Number of TLSA records */
216} ssl_dane;
217
218#ifndef X509_V_ERR_HOSTNAME_MISMATCH
219# define X509_V_ERR_HOSTNAME_MISMATCH X509_V_ERR_APPLICATION_VERIFICATION
220#endif
221
222
223
224static int
225match(dane_selector_list slist, X509 *cert, int depth)
226{
227int matched;
228
229/*
230 * Note, set_trust_anchor() needs to know whether the match was for a
231 * pkey digest or a certificate digest. We return MATCHED_PKEY or
232 * MATCHED_CERT accordingly.
233 */
234#define MATCHED_CERT (DANESSL_SELECTOR_CERT + 1)
235#define MATCHED_PKEY (DANESSL_SELECTOR_SPKI + 1)
236
237/*
238 * Loop over each selector, mtype, and associated data element looking
239 * for a match.
240 */
241for (matched = 0; !matched && slist; slist = slist->next)
242 {
243 dane_mtype_list m;
244 unsigned char mdbuf[EVP_MAX_MD_SIZE];
245 unsigned char *buf = NULL;
246 unsigned char *buf2;
247 unsigned int len = 0;
248
249 /*
250 * Extract ASN.1 DER form of certificate or public key.
251 */
252 switch(slist->value->selector)
253 {
254 case DANESSL_SELECTOR_CERT:
255 len = i2d_X509(cert, NULL);
256 buf2 = buf = US OPENSSL_malloc(len);
257 if(buf) i2d_X509(cert, &buf2);
258 break;
259 case DANESSL_SELECTOR_SPKI:
260 len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), NULL);
261 buf2 = buf = US OPENSSL_malloc(len);
262 if(buf) i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &buf2);
263 break;
264 }
265
266 if (!buf)
267 {
268 DANEerr(DANESSL_F_MATCH, ERR_R_MALLOC_FAILURE);
269 return 0;
270 }
271 OPENSSL_assert(buf2 - buf == len);
272
273 /*
274 * Loop over each mtype and data element
275 */
276 for (m = slist->value->mtype; !matched && m; m = m->next)
277 {
278 dane_data_list d;
279 unsigned char *cmpbuf = buf;
280 unsigned int cmplen = len;
281
282 /*
283 * If it is a digest, compute the corresponding digest of the
284 * DER data for comparison, otherwise, use the full object.
285 */
286 if (m->value->md)
287 {
288 cmpbuf = mdbuf;
289 if (!EVP_Digest(buf, len, cmpbuf, &cmplen, m->value->md, 0))
290 matched = -1;
291 }
292 for (d = m->value->data; !matched && d; d = d->next)
293 if ( cmplen == d->value->datalen
294 && memcmp(cmpbuf, d->value->data, cmplen) == 0)
295 matched = slist->value->selector + 1;
296 }
297
298 OPENSSL_free(buf);
299 }
300
301return matched;
302}
303
304static int
305push_ext(X509 *cert, X509_EXTENSION *ext)
306{
307if (ext)
308 {
309 if (X509_add_ext(cert, ext, -1))
310 return 1;
311 X509_EXTENSION_free(ext);
312 }
313DANEerr(DANESSL_F_PUSH_EXT, ERR_R_MALLOC_FAILURE);
314return 0;
315}
316
317static int
318add_ext(X509 *issuer, X509 *subject, int ext_nid, char *ext_val)
319{
320X509V3_CTX v3ctx;
321
322X509V3_set_ctx(&v3ctx, issuer, subject, 0, 0, 0);
323return push_ext(subject, X509V3_EXT_conf_nid(0, &v3ctx, ext_nid, ext_val));
324}
325
326static int
327set_serial(X509 *cert, AUTHORITY_KEYID *akid, X509 *subject)
328{
329int ret = 0;
330BIGNUM *bn;
331
332if (akid && akid->serial)
333 return (X509_set_serialNumber(cert, akid->serial));
334
335/*
336 * Add one to subject's serial to avoid collisions between TA serial and
337 * serial of signing root.
338 */
339if ( (bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(subject), 0)) != 0
340 && BN_add_word(bn, 1)
341 && BN_to_ASN1_INTEGER(bn, X509_get_serialNumber(cert)))
342 ret = 1;
343
344if (bn)
345 BN_free(bn);
346return ret;
347}
348
349static int
350add_akid(X509 *cert, AUTHORITY_KEYID *akid)
351{
352int nid = NID_authority_key_identifier;
353ASN1_OCTET_STRING *id;
354unsigned char c = 0;
355int ret = 0;
356
357/*
358 * 0 will never be our subject keyid from a SHA-1 hash, but it could be
359 * our subject keyid if forced from child's akid. If so, set our
360 * authority keyid to 1. This way we are never self-signed, and thus
361 * exempt from any potential (off by default for now in OpenSSL)
362 * self-signature checks!
363 */
364id = akid && akid->keyid ? akid->keyid : 0;
365if (id && ASN1_STRING_length(id) == 1 && *ASN1_STRING_get0_data(id) == c)
366 c = 1;
367
368if ( (akid = AUTHORITY_KEYID_new()) != 0
369 && (akid->keyid = ASN1_OCTET_STRING_new()) != 0
370#ifdef EXIM_HAVE_ASN1_MACROS
371 && ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
372#else
373 && M_ASN1_OCTET_STRING_set(akid->keyid, (void *) &c, 1)
374#endif
375 && X509_add1_ext_i2d(cert, nid, akid, 0, X509V3_ADD_APPEND))
376 ret = 1;
377if (akid)
378 AUTHORITY_KEYID_free(akid);
379return ret;
380}
381
382static int
383add_skid(X509 *cert, AUTHORITY_KEYID *akid)
384{
385int nid = NID_subject_key_identifier;
386
387if (!akid || !akid->keyid)
388 return add_ext(0, cert, nid, "hash");
389return X509_add1_ext_i2d(cert, nid, akid->keyid, 0, X509V3_ADD_APPEND) > 0;
390}
391
392static X509_NAME *
393akid_issuer_name(AUTHORITY_KEYID *akid)
394{
395if (akid && akid->issuer)
396 {
397 int i;
398 GENERAL_NAMES *gens = akid->issuer;
399
400 for (i = 0; i < sk_GENERAL_NAME_num(gens); ++i)
401 {
402 GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
403
404 if (gn->type == GEN_DIRNAME)
405 return (gn->d.dirn);
406 }
407 }
408return 0;
409}
410
411static int
412set_issuer_name(X509 *cert, AUTHORITY_KEYID *akid, X509_NAME *subj)
413{
414X509_NAME *name = akid_issuer_name(akid);
415
416/*
417 * If subject's akid specifies an authority key identifer issuer name, we
418 * must use that.
419 */
420return X509_set_issuer_name(cert,
421 name ? name : subj);
422}
423
424static int
425grow_chain(ssl_dane *dane, int trusted, X509 *cert)
426{
427STACK_OF(X509) **xs = trusted ? &dane->roots : &dane->chain;
428static ASN1_OBJECT *serverAuth = 0;
429
430#define UNTRUSTED 0
431#define TRUSTED 1
432
433if ( trusted && !serverAuth
434 && !(serverAuth = OBJ_nid2obj(NID_server_auth)))
435 {
436 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
437 return 0;
438 }
439if (!*xs && !(*xs = sk_X509_new_null()))
440 {
441 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
442 return 0;
443 }
444
445if (cert)
446 {
447 if (trusted && !X509_add1_trust_object(cert, serverAuth))
448 return 0;
449#ifdef EXIM_OPAQUE_X509
450 X509_up_ref(cert);
451#else
452 CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509);
453#endif
454 if (!sk_X509_push(*xs, cert))
455 {
456 X509_free(cert);
457 DANEerr(DANESSL_F_GROW_CHAIN, ERR_R_MALLOC_FAILURE);
458 return 0;
459 }
460 }
461return 1;
462}
463
464static int
465wrap_issuer(ssl_dane *dane, EVP_PKEY *key, X509 *subject, int depth, int top)
466{
467int ret = 1;
468X509 *cert = 0;
469AUTHORITY_KEYID *akid;
470X509_NAME *name = X509_get_issuer_name(subject);
471EVP_PKEY *newkey = key ? key : X509_get_pubkey(subject);
472
473#define WRAP_MID 0 /* Ensure intermediate. */
474#define WRAP_TOP 1 /* Ensure self-signed. */
475
476if (!name || !newkey || !(cert = X509_new()))
477 return 0;
478
479/*
480 * Record the depth of the trust-anchor certificate.
481 */
482if (dane->depth < 0)
483 dane->depth = depth + 1;
484
485/*
486 * XXX: Uncaught error condition:
487 *
488 * The return value is NULL both when the extension is missing, and when
489 * OpenSSL rans out of memory while parsing the extension.
490 */
491ERR_clear_error();
492akid = X509_get_ext_d2i(subject, NID_authority_key_identifier, 0, 0);
493/* XXX: Should we peek at the error stack here??? */
494
495/*
496 * If top is true generate a self-issued root CA, otherwise an
497 * intermediate CA and possibly its self-signed issuer.
498 *
499 * CA cert valid for +/- 30 days
500 */
501if ( !X509_set_version(cert, 2)
502 || !set_serial(cert, akid, subject)
503 || !set_issuer_name(cert, akid, name)
504 || !X509_gmtime_adj(X509_getm_notBefore(cert), -30 * 86400L)
505 || !X509_gmtime_adj(X509_getm_notAfter(cert), 30 * 86400L)
506 || !X509_set_subject_name(cert, name)
507 || !X509_set_pubkey(cert, newkey)
508 || !add_ext(0, cert, NID_basic_constraints, "CA:TRUE")
509 || (!top && !add_akid(cert, akid))
510 || !add_skid(cert, akid)
511 || ( !top && wrap_to_root
512 && !wrap_issuer(dane, newkey, cert, depth, WRAP_TOP)))
513 ret = 0;
514
515if (akid)
516 AUTHORITY_KEYID_free(akid);
517if (!key)
518 EVP_PKEY_free(newkey);
519if (ret)
520 ret = grow_chain(dane, !top && wrap_to_root ? UNTRUSTED : TRUSTED, cert);
521if (cert)
522 X509_free(cert);
523return ret;
524}
525
526static int
527wrap_cert(ssl_dane *dane, X509 *tacert, int depth)
528{
529if (dane->depth < 0)
530 dane->depth = depth + 1;
531
532/*
533 * If the TA certificate is self-issued, or need not be, use it directly.
534 * Otherwise, synthesize requisite ancestors.
535 */
536if ( !wrap_to_root
537 || X509_check_issued(tacert, tacert) == X509_V_OK)
538 return grow_chain(dane, TRUSTED, tacert);
539
540if (wrap_issuer(dane, 0, tacert, depth, WRAP_MID))
541 return grow_chain(dane, UNTRUSTED, tacert);
542return 0;
543}
544
545static int
546ta_signed(ssl_dane *dane, X509 *cert, int depth)
547{
548dane_cert_list x;
549dane_pkey_list k;
550EVP_PKEY *pk;
551int done = 0;
552
553/*
554 * First check whether issued and signed by a TA cert, this is cheaper
555 * than the bare-public key checks below, since we can determine whether
556 * the candidate TA certificate issued the certificate to be checked
557 * first (name comparisons), before we bother with signature checks
558 * (public key operations).
559 */
560for (x = dane->certs; !done && x; x = x->next)
561 {
562 if (X509_check_issued(x->value, cert) == X509_V_OK)
563 {
564 if (!(pk = X509_get_pubkey(x->value)))
565 {
566 /*
567 * The cert originally contained a valid pkey, which does
568 * not just vanish, so this is most likely a memory error.
569 */
570 done = -1;
571 break;
572 }
573 /* Check signature, since some other TA may work if not this. */
574 if (X509_verify(cert, pk) > 0)
575 done = wrap_cert(dane, x->value, depth) ? 1 : -1;
576 EVP_PKEY_free(pk);
577 }
578 }
579
580/*
581 * With bare TA public keys, we can't check whether the trust chain is
582 * issued by the key, but we can determine whether it is signed by the
583 * key, so we go with that.
584 *
585 * Ideally, the corresponding certificate was presented in the chain, and we
586 * matched it by its public key digest one level up. This code is here
587 * to handle adverse conditions imposed by sloppy administrators of
588 * receiving systems with poorly constructed chains.
589 *
590 * We'd like to optimize out keys that should not match when the cert's
591 * authority key id does not match the key id of this key computed via
592 * the RFC keyid algorithm (SHA-1 digest of public key bit-string sans
593 * ASN1 tag and length thus also excluding the unused bits field that is
594 * logically part of the length). However, some CAs have a non-standard
595 * authority keyid, so we lose. Too bad.
596 *
597 * This may push errors onto the stack when the certificate signature is
598 * not of the right type or length, throw these away,
599 */
600for (k = dane->pkeys; !done && k; k = k->next)
601 if (X509_verify(cert, k->value) > 0)
602 done = wrap_issuer(dane, k->value, cert, depth, WRAP_MID) ? 1 : -1;
603 else
604 ERR_clear_error();
605
606return done;
607}
608
609static int
610set_trust_anchor(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
611{
612int matched = 0;
613int n;
614int i;
615int depth = 0;
616EVP_PKEY *takey;
617X509 *ca;
618STACK_OF(X509) *in = X509_STORE_CTX_get0_untrusted(ctx);
619
620if (!grow_chain(dane, UNTRUSTED, 0))
621 return -1;
622
623/*
624 * Accept a degenerate case: depth 0 self-signed trust-anchor.
625 */
626if (X509_check_issued(cert, cert) == X509_V_OK)
627 {
628 dane->depth = 0;
629 matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], cert, 0);
630 if (matched > 0 && !grow_chain(dane, TRUSTED, cert))
631 matched = -1;
632 return matched;
633 }
634
635/* Make a shallow copy of the input untrusted chain. */
636if (!(in = sk_X509_dup(in)))
637 {
638 DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
639 return -1;
640 }
641
642/*
643 * At each iteration we consume the issuer of the current cert. This
644 * reduces the length of the "in" chain by one. If no issuer is found,
645 * we are done. We also stop when a certificate matches a TA in the
646 * peer's TLSA RRset.
647 *
648 * Caller ensures that the initial certificate is not self-signed.
649 */
650for (n = sk_X509_num(in); n > 0; --n, ++depth)
651 {
652 for (i = 0; i < n; ++i)
653 if (X509_check_issued(sk_X509_value(in, i), cert) == X509_V_OK)
654 break;
655
656 /*
657 * Final untrusted element with no issuer in the peer's chain, it may
658 * however be signed by a pkey or cert obtained via a TLSA RR.
659 */
660 if (i == n)
661 break;
662
663 /* Peer's chain contains an issuer ca. */
664 ca = sk_X509_delete(in, i);
665
666 /* If not a trust anchor, record untrusted ca and continue. */
667 if ((matched = match(dane->selectors[DANESSL_USAGE_DANE_TA], ca,
668 depth + 1)) == 0)
669 {
670 if (grow_chain(dane, UNTRUSTED, ca))
671 {
672 if (X509_check_issued(ca, ca) != X509_V_OK)
673 {
674 /* Restart with issuer as subject */
675 cert = ca;
676 continue;
677 }
678 /* Final self-signed element, skip ta_signed() check. */
679 cert = 0;
680 }
681 else
682 matched = -1;
683 }
684 else if(matched == MATCHED_CERT)
685 {
686 if(!wrap_cert(dane, ca, depth))
687 matched = -1;
688 }
689 else if(matched == MATCHED_PKEY)
690 {
691 if ( !(takey = X509_get_pubkey(ca))
692 || !wrap_issuer(dane, takey, cert, depth, WRAP_MID))
693 {
694 if (takey)
695 EVP_PKEY_free(takey);
696 else
697 DANEerr(DANESSL_F_SET_TRUST_ANCHOR, ERR_R_MALLOC_FAILURE);
698 matched = -1;
699 }
700 }
701 break;
702 }
703
704/* Shallow free the duplicated input untrusted chain. */
705sk_X509_free(in);
706
707/*
708 * When the loop exits, if "cert" is set, it is not self-signed and has
709 * no issuer in the chain, we check for a possible signature via a DNS
710 * obtained TA cert or public key.
711 */
712if (matched == 0 && cert)
713 matched = ta_signed(dane, cert, depth);
714
715return matched;
716}
717
718static int
719check_end_entity(X509_STORE_CTX *ctx, ssl_dane *dane, X509 *cert)
720{
721int matched;
722
723matched = match(dane->selectors[DANESSL_USAGE_DANE_EE], cert, 0);
724if (matched > 0)
725 {
726 dane->mdpth = 0;
727 dane->match = cert;
728 X509_up_ref(cert);
729 if(!X509_STORE_CTX_get0_chain(ctx))
730 {
731 STACK_OF(X509) * sk = sk_X509_new_null();
732 if (sk && sk_X509_push(sk, cert))
733 {
734 X509_up_ref(cert);
735 X509_STORE_CTX_set0_verified_chain(ctx, sk);
736 }
737 else
738 {
739 if (sk) sk_X509_free(sk);
740 DANEerr(DANESSL_F_CHECK_END_ENTITY, ERR_R_MALLOC_FAILURE);
741 return -1;
742 }
743 }
744 }
745return matched;
746}
747
748static int
749match_name(const char *certid, ssl_dane *dane)
750{
751int multi = dane->multi;
752dane_host_list hosts;
753
754for (hosts = dane->hosts; hosts; hosts = hosts->next)
755 {
756 int match_subdomain = 0;
757 const char *domain = hosts->value;
758 const char *parent;
759 int idlen;
760 int domlen;
761
762 if (*domain == '.' && domain[1] != '\0')
763 {
764 ++domain;
765 match_subdomain = 1;
766 }
767
768 /*
769 * Sub-domain match: certid is any sub-domain of hostname.
770 */
771 if(match_subdomain)
772 {
773 if ( (idlen = strlen(certid)) > (domlen = strlen(domain)) + 1
774 && certid[idlen - domlen - 1] == '.'
775 && !strcasecmp(certid + (idlen - domlen), domain))
776 return 1;
777 else
778 continue;
779 }
780
781 /*
782 * Exact match and initial "*" match. The initial "*" in a certid
783 * matches one (if multi is false) or more hostname components under
784 * the condition that the certid contains multiple hostname components.
785 */
786 if ( !strcasecmp(certid, domain)
787 || ( certid[0] == '*' && certid[1] == '.' && certid[2] != 0
788 && (parent = strchr(domain, '.')) != 0
789 && (idlen = strlen(certid + 1)) <= (domlen = strlen(parent))
790 && strcasecmp(multi ? parent + domlen - idlen : parent, certid+1) == 0))
791 return 1;
792 }
793return 0;
794}
795
796static const char *
797check_name(const char *name, int len)
798{
799const char *cp = name + len;
800
801while (len > 0 && !*--cp)
802 --len; /* Ignore trailing NULs */
803if (len <= 0)
804 return 0;
805for (cp = name; *cp; cp++)
806 {
807 char c = *cp;
808 if (!((c >= 'a' && c <= 'z') ||
809 (c >= '0' && c <= '9') ||
810 (c >= 'A' && c <= 'Z') ||
811 (c == '.' || c == '-') ||
812 (c == '*')))
813 return 0; /* Only LDH, '.' and '*' */
814 }
815if (cp - name != len) /* Guard against internal NULs */
816 return 0;
817return name;
818}
819
820static const char *
821parse_dns_name(const GENERAL_NAME *gn)
822{
823if (gn->type != GEN_DNS)
824 return 0;
825if (ASN1_STRING_type(gn->d.ia5) != V_ASN1_IA5STRING)
826 return 0;
827return check_name(CCS ASN1_STRING_get0_data(gn->d.ia5),
828 ASN1_STRING_length(gn->d.ia5));
829}
830
831static char *
832parse_subject_name(X509 *cert)
833{
834X509_NAME *name = X509_get_subject_name(cert);
835X509_NAME_ENTRY *entry;
836ASN1_STRING *entry_str;
837unsigned char *namebuf;
838int nid = NID_commonName;
839int len;
840int i;
841
842if (!name || (i = X509_NAME_get_index_by_NID(name, nid, -1)) < 0)
843 return 0;
844if (!(entry = X509_NAME_get_entry(name, i)))
845 return 0;
846if (!(entry_str = X509_NAME_ENTRY_get_data(entry)))
847 return 0;
848
849if ((len = ASN1_STRING_to_UTF8(&namebuf, entry_str)) < 0)
850 return 0;
851if (len <= 0 || check_name(CS namebuf, len) == 0)
852 {
853 OPENSSL_free(namebuf);
854 return 0;
855 }
856return CS namebuf;
857}
858
859static int
860name_check(ssl_dane *dane, X509 *cert)
861{
862int matched = 0;
863BOOL got_altname = FALSE;
864GENERAL_NAMES *gens;
865
866gens = X509_get_ext_d2i(cert, NID_subject_alt_name, 0, 0);
867if (gens)
868 {
869 int n = sk_GENERAL_NAME_num(gens);
870 int i;
871
872 for (i = 0; i < n; ++i)
873 {
874 const GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
875 const char *certid;
876
877 if (gn->type != GEN_DNS)
878 continue;
879 got_altname = TRUE;
880 certid = parse_dns_name(gn);
881 if (certid && *certid)
882 {
883 if ((matched = match_name(certid, dane)) == 0)
884 continue;
885 if (!(dane->mhost = OPENSSL_strdup(certid)))
886 matched = -1;
887 DEBUG(D_tls) debug_printf("Dane name_check: matched SAN %s\n", certid);
888 break;
889 }
890 }
891 GENERAL_NAMES_free(gens);
892 }
893
894/*
895 * XXX: Should the subjectName be skipped when *any* altnames are present,
896 * or only when DNS altnames are present?
897 */
898if (!got_altname)
899 {
900 char *certid = parse_subject_name(cert);
901 if (certid != 0 && *certid && (matched = match_name(certid, dane)) != 0)
902 {
903 DEBUG(D_tls) debug_printf("Dane name_check: matched SN %s\n", certid);
904 dane->mhost = OPENSSL_strdup(certid);
905 }
906 if (certid)
907 OPENSSL_free(certid);
908 }
909return matched;
910}
911
912static int
913verify_chain(X509_STORE_CTX *ctx)
914{
915int (*cb)(int, X509_STORE_CTX *) = X509_STORE_CTX_get_verify_cb(ctx);
916X509 *cert = X509_STORE_CTX_get0_cert(ctx);
917STACK_OF(X509) * chain = X509_STORE_CTX_get0_chain(ctx);
918int chain_length = sk_X509_num(chain);
919int ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
920SSL *ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
921ssl_dane *dane = SSL_get_ex_data(ssl, dane_idx);
922dane_selector_list issuer_rrs = dane->selectors[DANESSL_USAGE_PKIX_TA];
923dane_selector_list leaf_rrs = dane->selectors[DANESSL_USAGE_PKIX_EE];
924int matched = 0;
925
926DEBUG(D_tls) debug_printf("Dane verify_chain\n");
927
928/* Restore OpenSSL's internal_verify() as the signature check function */
929X509_STORE_CTX_set_verify(ctx, dane->verify);
930
931if ((matched = name_check(dane, cert)) < 0)
932 {
933 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
934 return 0;
935 }
936
937if (!matched)
938 {
939 X509_STORE_CTX_set_error_depth(ctx, 0);
940 X509_STORE_CTX_set_current_cert(ctx, cert);
941 X509_STORE_CTX_set_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH);
942 if (!cb(0, ctx))
943 return 0;
944 }
945matched = 0;
946
947/*
948 * Satisfy at least one usage 0 or 1 constraint, unless we've already
949 * matched a usage 2 trust anchor.
950 *
951 * XXX: internal_verify() doesn't callback with top certs that are not
952 * self-issued. This is fixed in OpenSSL 1.1.0.
953 */
954if (dane->roots && sk_X509_num(dane->roots))
955 {
956 X509 *top = sk_X509_value(chain, dane->depth);
957
958 dane->mdpth = dane->depth;
959 dane->match = top;
960 X509_up_ref(top);
961
962#if OPENSSL_VERSION_NUMBER < 0x10100000L
963 if (X509_check_issued(top, top) != X509_V_OK)
964 {
965 X509_STORE_CTX_set_error_depth(ctx, dane->depth);
966 X509_STORE_CTX_set_current_cert(ctx, top);
967 if (!cb(1, ctx))
968 return 0;
969 }
970#endif
971 /* Pop synthetic trust-anchor ancestors off the chain! */
972 while (--chain_length > dane->depth)
973 X509_free(sk_X509_pop(chain));
974 }
975else
976 {
977 int n = 0;
978 X509 *xn = cert;
979
980 /*
981 * Check for an EE match, then a CA match at depths > 0, and
982 * finally, if the EE cert is self-issued, for a depth 0 CA match.
983 */
984 if (leaf_rrs)
985 matched = match(leaf_rrs, xn, 0);
986 if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched EE\n");
987
988 if (!matched && issuer_rrs)
989 for (n = chain_length-1; !matched && n >= 0; --n)
990 {
991 xn = sk_X509_value(chain, n);
992 if (n > 0 || X509_check_issued(xn, xn) == X509_V_OK)
993 matched = match(issuer_rrs, xn, n);
994 }
995 if (matched) DEBUG(D_tls) debug_printf("Dane verify_chain: matched %s\n",
996 n>0 ? "CA" : "selfisssued EE");
997
998 if (!matched)
999 {
1000 X509_STORE_CTX_set_error_depth(ctx, 0);
1001 X509_STORE_CTX_set_current_cert(ctx, cert);
1002 X509_STORE_CTX_set_error(ctx, X509_V_ERR_CERT_UNTRUSTED);
1003 if (!cb(0, ctx))
1004 return 0;
1005 }
1006 else
1007 {
1008 dane->mdpth = n;
1009 dane->match = xn;
1010 X509_up_ref(xn);
1011 }
1012 }
1013
1014/* Tail recurse into OpenSSL's internal_verify */
1015return dane->verify(ctx);
1016}
1017
1018static void
1019dane_reset(ssl_dane *dane)
1020{
1021dane->depth = -1;
1022if (dane->mhost)
1023 {
1024 OPENSSL_free(dane->mhost);
1025 dane->mhost = 0;
1026 }
1027if (dane->roots)
1028 {
1029 sk_X509_pop_free(dane->roots, X509_free);
1030 dane->roots = 0;
1031 }
1032if (dane->chain)
1033 {
1034 sk_X509_pop_free(dane->chain, X509_free);
1035 dane->chain = 0;
1036 }
1037if (dane->match)
1038 {
1039 X509_free(dane->match);
1040 dane->match = 0;
1041 }
1042dane->mdpth = -1;
1043}
1044
1045static int
1046verify_cert(X509_STORE_CTX *ctx, void *unused_ctx)
1047{
1048static int ssl_idx = -1;
1049SSL *ssl;
1050ssl_dane *dane;
1051int (*cb)(int, X509_STORE_CTX *) = X509_STORE_CTX_get_verify_cb(ctx);
1052X509 *cert = X509_STORE_CTX_get0_cert(ctx);
1053int matched;
1054
1055DEBUG(D_tls) debug_printf("Dane verify_cert\n");
1056
1057if (ssl_idx < 0)
1058 ssl_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1059if (dane_idx < 0)
1060 {
1061 DANEerr(DANESSL_F_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
1062 return -1;
1063 }
1064
1065ssl = X509_STORE_CTX_get_ex_data(ctx, ssl_idx);
1066if (!(dane = SSL_get_ex_data(ssl, dane_idx)) || !cert)
1067 return X509_verify_cert(ctx);
1068
1069/* Reset for verification of a new chain, perhaps a renegotiation. */
1070dane_reset(dane);
1071
1072if (dane->selectors[DANESSL_USAGE_DANE_EE])
1073 {
1074 if ((matched = check_end_entity(ctx, dane, cert)) > 0)
1075 {
1076 X509_STORE_CTX_set_error_depth(ctx, 0);
1077 X509_STORE_CTX_set_current_cert(ctx, cert);
1078 return cb(1, ctx);
1079 }
1080 if (matched < 0)
1081 {
1082 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1083 return -1;
1084 }
1085 }
1086
1087 if (dane->selectors[DANESSL_USAGE_DANE_TA])
1088 {
1089 if ((matched = set_trust_anchor(ctx, dane, cert)) < 0)
1090 {
1091 X509_STORE_CTX_set_error(ctx, X509_V_ERR_OUT_OF_MEM);
1092 return -1;
1093 }
1094 if (matched)
1095 {
1096 /*
1097 * Check that setting the untrusted chain updates the expected
1098 * structure member at the expected offset.
1099 */
1100 X509_STORE_CTX_trusted_stack(ctx, dane->roots);
1101 X509_STORE_CTX_set_chain(ctx, dane->chain);
1102 OPENSSL_assert(dane->chain == X509_STORE_CTX_get0_untrusted(ctx));
1103 }
1104 }
1105
1106 /*
1107 * Name checks and usage 0/1 constraint enforcement are delayed until
1108 * X509_verify_cert() builds the full chain and calls our verify_chain()
1109 * wrapper.
1110 */
1111 dane->verify = X509_STORE_CTX_get_verify(ctx);
1112 X509_STORE_CTX_set_verify(ctx, verify_chain);
1113
1114 if (X509_verify_cert(ctx))
1115 return 1;
1116
1117 /*
1118 * If the chain is invalid, clear any matching cert or hostname, to
1119 * protect callers that might erroneously rely on these alone without
1120 * checking the validation status.
1121 */
1122 if (dane->match)
1123 {
1124 X509_free(dane->match);
1125 dane->match = 0;
1126 }
1127 if (dane->mhost)
1128 {
1129 OPENSSL_free(dane->mhost);
1130 dane->mhost = 0;
1131 }
1132 return 0;
1133}
1134
1135static dane_list
1136list_alloc(size_t vsize)
1137{
1138void *value = (void *) OPENSSL_malloc(vsize);
1139dane_list l;
1140
1141if (!value)
1142 {
1143 DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1144 return 0;
1145 }
1146if (!(l = (dane_list) OPENSSL_malloc(sizeof(*l))))
1147 {
1148 OPENSSL_free(value);
1149 DANEerr(DANESSL_F_LIST_ALLOC, ERR_R_MALLOC_FAILURE);
1150 return 0;
1151 }
1152l->next = 0;
1153l->value = value;
1154return l;
1155}
1156
1157static void
1158list_free(void *list, void (*f)(void *))
1159{
1160dane_list head;
1161dane_list next;
1162
1163for (head = (dane_list) list; head; head = next)
1164 {
1165 next = head->next;
1166 if (f && head->value)
1167 f(head->value);
1168 OPENSSL_free(head);
1169 }
1170}
1171
1172static void
1173ossl_free(void * p)
1174{
1175OPENSSL_free(p);
1176}
1177
1178static void
1179dane_mtype_free(void *p)
1180{
1181list_free(((dane_mtype) p)->data, ossl_free);
1182OPENSSL_free(p);
1183}
1184
1185static void
1186dane_selector_free(void *p)
1187{
1188list_free(((dane_selector) p)->mtype, dane_mtype_free);
1189OPENSSL_free(p);
1190}
1191
1192
1193
1194/*
1195
1196Tidy up once the connection is finished with.
1197
1198Arguments
1199 ssl The ssl connection handle
1200
1201=> Before calling SSL_free()
1202tls_close() and tls_getc() [the error path] are the obvious places.
1203Could we do it earlier - right after verification? In tls_client_start()
1204right after SSL_connect() returns, in that case.
1205
1206*/
1207
1208void
1209DANESSL_cleanup(SSL *ssl)
1210{
1211ssl_dane *dane;
1212int u;
1213
1214DEBUG(D_tls) debug_printf("Dane lib-cleanup\n");
1215
1216if (dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1217 return;
1218(void) SSL_set_ex_data(ssl, dane_idx, 0);
1219
1220dane_reset(dane);
1221if (dane->hosts)
1222 list_free(dane->hosts, ossl_free);
1223for (u = 0; u <= DANESSL_USAGE_LAST; ++u)
1224 if (dane->selectors[u])
1225 list_free(dane->selectors[u], dane_selector_free);
1226if (dane->pkeys)
1227 list_free(dane->pkeys, pkey_free);
1228if (dane->certs)
1229 list_free(dane->certs, cert_free);
1230OPENSSL_free(dane);
1231}
1232
1233static dane_host_list
1234host_list_init(const char **src)
1235{
1236dane_host_list head = NULL;
1237
1238while (*src)
1239 {
1240 dane_host_list elem = (dane_host_list) OPENSSL_malloc(sizeof(*elem));
1241 if (elem == 0)
1242 {
1243 list_free(head, ossl_free);
1244 return 0;
1245 }
1246 elem->value = OPENSSL_strdup(*src++);
1247 LINSERT(head, elem);
1248 }
1249return head;
1250}
1251
1252
1253int
1254DANESSL_get_match_cert(SSL *ssl, X509 **match, const char **mhost, int *depth)
1255{
1256ssl_dane *dane;
1257
1258if (dane_idx < 0 || (dane = SSL_get_ex_data(ssl, dane_idx)) == 0)
1259 {
1260 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1261 return -1;
1262 }
1263
1264if (dane->match)
1265 {
1266 if (match)
1267 *match = dane->match;
1268 if (mhost)
1269 *mhost = dane->mhost;
1270 if (depth)
1271 *depth = dane->mdpth;
1272 }
1273
1274 return (dane->match != 0);
1275}
1276
1277
1278#ifdef never_called
1279int
1280DANESSL_verify_chain(SSL *ssl, STACK_OF(X509) *chain)
1281{
1282int ret;
1283X509 *cert;
1284X509_STORE_CTX * store_ctx;
1285SSL_CTX *ssl_ctx = SSL_get_SSL_CTX(ssl);
1286X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx);
1287int store_ctx_idx = SSL_get_ex_data_X509_STORE_CTX_idx();
1288
1289cert = sk_X509_value(chain, 0);
1290if (!(store_ctx = X509_STORE_CTX_new()))
1291 {
1292 DANEerr(DANESSL_F_DANESSL_VERIFY_CHAIN, ERR_R_MALLOC_FAILURE);
1293 return 0;
1294 }
1295if (!X509_STORE_CTX_init(store_ctx, store, cert, chain))
1296 {
1297 X509_STORE_CTX_free(store_ctx);
1298 return 0;
1299 }
1300X509_STORE_CTX_set_ex_data(store_ctx, store_ctx_idx, ssl);
1301
1302X509_STORE_CTX_set_default(store_ctx,
1303 SSL_is_server(ssl) ? "ssl_client" : "ssl_server");
1304X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(store_ctx),
1305 SSL_get0_param(ssl));
1306
1307if (SSL_get_verify_callback(ssl))
1308 X509_STORE_CTX_set_verify_cb(store_ctx, SSL_get_verify_callback(ssl));
1309
1310ret = verify_cert(store_ctx, NULL);
1311
1312SSL_set_verify_result(ssl, X509_STORE_CTX_get_error(store_ctx));
1313X509_STORE_CTX_cleanup(store_ctx);
1314
1315return (ret);
1316}
1317#endif
1318
1319
1320
1321
1322/*
1323
1324Call this for each TLSA record found for the target, after the
1325DANE setup has been done on the ssl connection handle.
1326
1327Arguments:
1328 ssl Connection handle
1329 usage TLSA record field
1330 selector TLSA record field
1331 mdname ??? message digest name?
1332 data ??? TLSA record megalump?
1333 dlen length of data
1334
1335Return
1336 -1 on error
1337 0 action not taken
1338 1 record accepted
1339*/
1340
1341int
1342DANESSL_add_tlsa(SSL *ssl, uint8_t usage, uint8_t selector, const char *mdname,
1343 unsigned const char *data, size_t dlen)
1344{
1345ssl_dane *dane;
1346dane_selector_list s = 0;
1347dane_mtype_list m = 0;
1348dane_data_list d = 0;
1349dane_cert_list xlist = 0;
1350dane_pkey_list klist = 0;
1351const EVP_MD *md = 0;
1352
1353DEBUG(D_tls) debug_printf("Dane add-tlsa: usage %u sel %u mdname \"%s\"\n",
1354 usage, selector, mdname);
1355
1356if(dane_idx < 0 || !(dane = SSL_get_ex_data(ssl, dane_idx)))
1357 {
1358 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_INIT);
1359 return -1;
1360 }
1361
1362if (usage > DANESSL_USAGE_LAST)
1363 {
1364 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_USAGE);
1365 return 0;
1366 }
1367if (selector > DANESSL_SELECTOR_LAST)
1368 {
1369 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_SELECTOR);
1370 return 0;
1371 }
1372
1373/* Support built-in standard one-digit mtypes */
1374if (mdname && *mdname && mdname[1] == '\0')
1375 switch (*mdname - '0')
1376 {
1377 case DANESSL_MATCHING_FULL: mdname = 0; break;
1378 case DANESSL_MATCHING_2256: mdname = "sha256"; break;
1379 case DANESSL_MATCHING_2512: mdname = "sha512"; break;
1380 }
1381if (mdname && *mdname && !(md = EVP_get_digestbyname(mdname)))
1382 {
1383 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DIGEST);
1384 return 0;
1385 }
1386if (mdname && *mdname && dlen != EVP_MD_size(md))
1387 {
1388 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_DATA_LENGTH);
1389 return 0;
1390 }
1391if (!data)
1392 {
1393 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_NULL_DATA);
1394 return 0;
1395 }
1396
1397/*
1398 * Full Certificate or Public Key when NULL or empty digest name
1399 */
1400if (!mdname || !*mdname)
1401 {
1402 X509 *x = 0;
1403 EVP_PKEY *k = 0;
1404 const unsigned char *p = data;
1405
1406#define xklistinit(lvar, ltype, var, freeFunc) do { \
1407 (lvar) = (ltype) OPENSSL_malloc(sizeof(*(lvar))); \
1408 if ((lvar) == 0) { \
1409 DANEerr(DANESSL_F_ADD_TLSA, ERR_R_MALLOC_FAILURE); \
1410 freeFunc((var)); \
1411 return 0; \
1412 } \
1413 (lvar)->next = 0; \
1414 lvar->value = var; \
1415 } while (0)
1416#define xkfreeret(ret) do { \
1417 if (xlist) list_free(xlist, cert_free); \
1418 if (klist) list_free(klist, pkey_free); \
1419 return (ret); \
1420 } while (0)
1421
1422 switch (selector)
1423 {
1424 case DANESSL_SELECTOR_CERT:
1425 if (!d2i_X509(&x, &p, dlen) || dlen != p - data)
1426 {
1427 if (x)
1428 X509_free(x);
1429 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT);
1430 return 0;
1431 }
1432 k = X509_get_pubkey(x);
1433 EVP_PKEY_free(k);
1434 if (k == 0)
1435 {
1436 X509_free(x);
1437 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_CERT_PKEY);
1438 return 0;
1439 }
1440 if (usage == DANESSL_USAGE_DANE_TA)
1441 xklistinit(xlist, dane_cert_list, x, X509_free);
1442 break;
1443
1444 case DANESSL_SELECTOR_SPKI:
1445 if (!d2i_PUBKEY(&k, &p, dlen) || dlen != p - data)
1446 {
1447 if (k)
1448 EVP_PKEY_free(k);
1449 DANEerr(DANESSL_F_ADD_TLSA, DANESSL_R_BAD_PKEY);
1450 return 0;
1451 }
1452 if (usage == DANESSL_USAGE_DANE_TA)
1453 xklistinit(klist, dane_pkey_list, k, EVP_PKEY_free);
1454 break;
1455 }
1456 }
1457
1458/* Find insertion point and don't add duplicate elements. */
1459for (s = dane->selectors[usage]; s; s = s->next)
1460 if (s->value->selector == selector)
1461 {
1462 for (m = s->value->mtype; m; m = m->next)
1463 if (m->value->md == md)
1464 {
1465 for (d = m->value->data; d; d = d->next)
1466 if ( d->value->datalen == dlen
1467 && memcmp(d->value->data, data, dlen) == 0)
1468 xkfreeret(1);
1469 break;
1470 }
1471 break;
1472 }
1473
1474if ((d = (dane_data_list) list_alloc(sizeof(*d->value) + dlen)) == 0)
1475 xkfreeret(0);
1476d->value->datalen = dlen;
1477memcpy(d->value->data, data, dlen);
1478if (!m)
1479 {
1480 if ((m = (dane_mtype_list) list_alloc(sizeof(*m->value))) == 0)
1481 {
1482 list_free(d, ossl_free);
1483 xkfreeret(0);
1484 }
1485 m->value->data = 0;
1486 if ((m->value->md = md) != 0)
1487 m->value->mdlen = dlen;
1488 if (!s)
1489 {
1490 if ((s = (dane_selector_list) list_alloc(sizeof(*s->value))) == 0)
1491 {
1492 list_free(m, dane_mtype_free);
1493 xkfreeret(0);
1494 }
1495 s->value->mtype = 0;
1496 s->value->selector = selector;
1497 LINSERT(dane->selectors[usage], s);
1498 }
1499 LINSERT(s->value->mtype, m);
1500 }
1501LINSERT(m->value->data, d);
1502
1503if (xlist)
1504 LINSERT(dane->certs, xlist);
1505else if (klist)
1506 LINSERT(dane->pkeys, klist);
1507++dane->count;
1508return 1;
1509}
1510
1511
1512
1513
1514/*
1515Call this once we have an ssl connection handle but before
1516making the TLS connection.
1517
1518=> In tls_client_start() after the call to SSL_new()
1519and before the call to SSL_connect(). Exactly where
1520probably does not matter.
1521We probably want to keep our existing SNI handling;
1522call this with NULL.
1523
1524Arguments:
1525 ssl Connection handle
1526 sni_domain Optional peer server name
1527 hostnames list of names to chack against peer cert
1528
1529Return
1530 -1 on fatal error
1531 0 nonfatal error
1532 1 success
1533*/
1534
1535int
1536DANESSL_init(SSL *ssl, const char *sni_domain, const char **hostnames)
1537{
1538ssl_dane *dane;
1539int i;
1540
1541DEBUG(D_tls) debug_printf("Dane ssl_init\n");
1542if (dane_idx < 0)
1543 {
1544 DANEerr(DANESSL_F_INIT, DANESSL_R_LIBRARY_INIT);
1545 return -1;
1546 }
1547
1548if (sni_domain && !SSL_set_tlsext_host_name(ssl, sni_domain))
1549 return 0;
1550
1551if ((dane = (ssl_dane *) OPENSSL_malloc(sizeof(ssl_dane))) == 0)
1552 {
1553 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1554 return 0;
1555 }
1556if (!SSL_set_ex_data(ssl, dane_idx, dane))
1557 {
1558 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1559 OPENSSL_free(dane);
1560 return 0;
1561 }
1562
1563dane->verify = 0;
1564dane->hosts = 0;
1565dane->thost = 0;
1566dane->pkeys = 0;
1567dane->certs = 0;
1568dane->chain = 0;
1569dane->match = 0;
1570dane->roots = 0;
1571dane->depth = -1;
1572dane->mhost = 0; /* Future SSL control interface */
1573dane->mdpth = 0; /* Future SSL control interface */
1574dane->multi = 0; /* Future SSL control interface */
1575dane->count = 0;
1576dane->hosts = 0;
1577
1578for (i = 0; i <= DANESSL_USAGE_LAST; ++i)
1579 dane->selectors[i] = 0;
1580
1581if (hostnames && (dane->hosts = host_list_init(hostnames)) == 0)
1582 {
1583 DANEerr(DANESSL_F_INIT, ERR_R_MALLOC_FAILURE);
1584 DANESSL_cleanup(ssl);
1585 return 0;
1586 }
1587
1588return 1;
1589}
1590
1591
1592/*
1593
1594Call this once we have a context to work with, but
1595before DANESSL_init()
1596
1597=> in tls_client_start(), after tls_init() call gives us the ctx,
1598if we decide we want to (policy) and can (TLSA records available)
1599replacing (? what about fallback) everything from testing tls_verify_hosts
1600down to just before calling SSL_new() for the conn handle.
1601
1602Arguments
1603 ctx SSL context
1604
1605Return
1606 -1 Error
1607 1 Success
1608*/
1609
1610int
1611DANESSL_CTX_init(SSL_CTX *ctx)
1612{
1613DEBUG(D_tls) debug_printf("Dane ctx-init\n");
1614if (dane_idx >= 0)
1615 {
1616 SSL_CTX_set_cert_verify_callback(ctx, verify_cert, 0);
1617 return 1;
1618 }
1619DANEerr(DANESSL_F_CTX_INIT, DANESSL_R_LIBRARY_INIT);
1620return -1;
1621}
1622
1623static void
1624dane_init(void)
1625{
1626/*
1627 * Store library id in zeroth function slot, used to locate the library
1628 * name. This must be done before we load the error strings.
1629 */
1630err_lib_dane = ERR_get_next_error_library();
1631
1632#ifndef OPENSSL_NO_ERR
1633if (err_lib_dane > 0)
1634 {
1635 dane_str_functs[0].error |= ERR_PACK(err_lib_dane, 0, 0);
1636 ERR_load_strings(err_lib_dane, dane_str_functs);
1637 ERR_load_strings(err_lib_dane, dane_str_reasons);
1638 }
1639#endif
1640
1641/*
1642 * Register SHA-2 digests, if implemented and not already registered.
1643 */
1644#if defined(LN_sha256) && defined(NID_sha256) && !defined(OPENSSL_NO_SHA256)
1645if (!EVP_get_digestbyname(LN_sha224)) EVP_add_digest(EVP_sha224());
1646if (!EVP_get_digestbyname(LN_sha256)) EVP_add_digest(EVP_sha256());
1647#endif
1648#if defined(LN_sha512) && defined(NID_sha512) && !defined(OPENSSL_NO_SHA512)
1649if (!EVP_get_digestbyname(LN_sha384)) EVP_add_digest(EVP_sha384());
1650if (!EVP_get_digestbyname(LN_sha512)) EVP_add_digest(EVP_sha512());
1651#endif
1652
1653/*
1654 * Register an SSL index for the connection-specific ssl_dane structure.
1655 * Using a separate index makes it possible to add DANE support to
1656 * existing OpenSSL releases that don't have a suitable pointer in the
1657 * SSL structure.
1658 */
1659dane_idx = SSL_get_ex_new_index(0, 0, 0, 0, 0);
1660}
1661
1662
1663#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
1664static void
1665run_once(volatile int * once, void (*init)(void))
1666{
1667int wlock = 0;
1668
1669CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
1670if (!*once)
1671 {
1672 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1673 CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
1674 wlock = 1;
1675 if (!*once)
1676 {
1677 *once = 1;
1678 init();
1679 }
1680 }
1681if (wlock)
1682 CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
1683else
1684 CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
1685}
1686#endif
1687
1688
1689
1690/*
1691
1692Call this once. Probably early in startup will do; may need
1693to be after SSL library init.
1694
1695=> put after call to tls_init() for now
1696
1697Return
1698 1 Success
1699 0 Fail
1700*/
1701
1702int
1703DANESSL_library_init(void)
1704{
1705static CRYPTO_ONCE once = CRYPTO_ONCE_STATIC_INIT;
1706
1707DEBUG(D_tls) debug_printf("Dane lib-init\n");
1708(void) CRYPTO_THREAD_run_once(&once, dane_init);
1709
1710#if defined(LN_sha256)
1711/* No DANE without SHA256 support */
1712if (dane_idx >= 0 && EVP_get_digestbyname(LN_sha256) != 0)
1713 return 1;
1714#endif
1715DANEerr(DANESSL_F_LIBRARY_INIT, DANESSL_R_SUPPORT);
1716return 0;
1717}
1718
1719
1720/* vi: aw ai sw=2
1721*/