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