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