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