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