Merge branch '4.next'
[exim.git] / src / src / tls-openssl.c
1 /*************************************************
2 * Exim - an Internet mail transport agent *
3 *************************************************/
4
5 /* Copyright (c) University of Cambridge 1995 - 2017 */
6 /* See the file NOTICE for conditions of use and distribution. */
7
8 /* Portions Copyright (c) The OpenSSL Project 1999 */
9
10 /* This module provides the TLS (aka SSL) support for Exim using the OpenSSL
11 library. It is #included into the tls.c file when that library is used. The
12 code herein is based on a patch that was originally contributed by Steve
13 Haslam. It was adapted from stunnel, a GPL program by Michal Trojnara.
14
15 No cryptographic code is included in Exim. All this module does is to call
16 functions from the OpenSSL library. */
17
18
19 /* Heading stuff */
20
21 #include <openssl/lhash.h>
22 #include <openssl/ssl.h>
23 #include <openssl/err.h>
24 #include <openssl/rand.h>
25 #ifndef OPENSSL_NO_ECDH
26 # include <openssl/ec.h>
27 #endif
28 #ifndef DISABLE_OCSP
29 # include <openssl/ocsp.h>
30 #endif
31 #ifdef EXPERIMENTAL_DANE
32 # include "danessl.h"
33 #endif
34
35
36 #ifndef DISABLE_OCSP
37 # define EXIM_OCSP_SKEW_SECONDS (300L)
38 # define EXIM_OCSP_MAX_AGE (-1L)
39 #endif
40
41 #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT)
42 # define EXIM_HAVE_OPENSSL_TLSEXT
43 #endif
44 #if OPENSSL_VERSION_NUMBER >= 0x00908000L
45 # define EXIM_HAVE_RSA_GENKEY_EX
46 #endif
47 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
48 # define EXIM_HAVE_OCSP_RESP_COUNT
49 #else
50 # define EXIM_HAVE_EPHEM_RSA_KEX
51 # define EXIM_HAVE_RAND_PSEUDO
52 #endif
53 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
54 # define EXIM_HAVE_SHA256
55 #endif
56
57 /*
58 * X509_check_host provides sane certificate hostname checking, but was added
59 * to OpenSSL late, after other projects forked off the code-base. So in
60 * addition to guarding against the base version number, beware that LibreSSL
61 * does not (at this time) support this function.
62 *
63 * If LibreSSL gains a different API, perhaps via libtls, then we'll probably
64 * opt to disentangle and ask a LibreSSL user to provide glue for a third
65 * crypto provider for libtls instead of continuing to tie the OpenSSL glue
66 * into even twistier knots. If LibreSSL gains the same API, we can just
67 * change this guard and punt the issue for a while longer.
68 */
69 #ifndef LIBRESSL_VERSION_NUMBER
70 # if OPENSSL_VERSION_NUMBER >= 0x010100000L
71 # define EXIM_HAVE_OPENSSL_CHECKHOST
72 # define EXIM_HAVE_OPENSSL_DH_BITS
73 # endif
74 # if OPENSSL_VERSION_NUMBER >= 0x010000000L \
75 && (OPENSSL_VERSION_NUMBER & 0x0000ff000L) >= 0x000002000L
76 # define EXIM_HAVE_OPENSSL_CHECKHOST
77 # endif
78 #endif
79
80 #if !defined(LIBRESSL_VERSION_NUMBER) \
81 || LIBRESSL_VERSION_NUMBER >= 0x20010000L
82 # if !defined(OPENSSL_NO_ECDH)
83 # if OPENSSL_VERSION_NUMBER >= 0x0090800fL
84 # define EXIM_HAVE_ECDH
85 # endif
86 # if OPENSSL_VERSION_NUMBER >= 0x10002000L
87 # define EXIM_HAVE_OPENSSL_EC_NIST2NID
88 # endif
89 # endif
90 #endif
91
92 #if !defined(EXIM_HAVE_OPENSSL_TLSEXT) && !defined(DISABLE_OCSP)
93 # warning "OpenSSL library version too old; define DISABLE_OCSP in Makefile"
94 # define DISABLE_OCSP
95 #endif
96
97 #ifdef EXIM_HAVE_OPENSSL_CHECKHOST
98 # include <openssl/x509v3.h>
99 #endif
100
101 /* Structure for collecting random data for seeding. */
102
103 typedef struct randstuff {
104 struct timeval tv;
105 pid_t p;
106 } randstuff;
107
108 /* Local static variables */
109
110 static BOOL client_verify_callback_called = FALSE;
111 static BOOL server_verify_callback_called = FALSE;
112 static const uschar *sid_ctx = US"exim";
113
114 /* We have three different contexts to care about.
115
116 Simple case: client, `client_ctx`
117 As a client, we can be doing a callout or cut-through delivery while receiving
118 a message. So we have a client context, which should have options initialised
119 from the SMTP Transport.
120
121 Server:
122 There are two cases: with and without ServerNameIndication from the client.
123 Given TLS SNI, we can be using different keys, certs and various other
124 configuration settings, because they're re-expanded with $tls_sni set. This
125 allows vhosting with TLS. This SNI is sent in the handshake.
126 A client might not send SNI, so we need a fallback, and an initial setup too.
127 So as a server, we start out using `server_ctx`.
128 If SNI is sent by the client, then we as server, mid-negotiation, try to clone
129 `server_sni` from `server_ctx` and then initialise settings by re-expanding
130 configuration.
131 */
132
133 static SSL_CTX *client_ctx = NULL;
134 static SSL_CTX *server_ctx = NULL;
135 static SSL *client_ssl = NULL;
136 static SSL *server_ssl = NULL;
137
138 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
139 static SSL_CTX *server_sni = NULL;
140 #endif
141
142 static char ssl_errstring[256];
143
144 static int ssl_session_timeout = 200;
145 static BOOL client_verify_optional = FALSE;
146 static BOOL server_verify_optional = FALSE;
147
148 static BOOL reexpand_tls_files_for_sni = FALSE;
149
150
151 typedef struct tls_ext_ctx_cb {
152 uschar *certificate;
153 uschar *privatekey;
154 BOOL is_server;
155 #ifndef DISABLE_OCSP
156 STACK_OF(X509) *verify_stack; /* chain for verifying the proof */
157 union {
158 struct {
159 uschar *file;
160 uschar *file_expanded;
161 OCSP_RESPONSE *response;
162 } server;
163 struct {
164 X509_STORE *verify_store; /* non-null if status requested */
165 BOOL verify_required;
166 } client;
167 } u_ocsp;
168 #endif
169 uschar *dhparam;
170 /* these are cached from first expand */
171 uschar *server_cipher_list;
172 /* only passed down to tls_error: */
173 host_item *host;
174 const uschar * verify_cert_hostnames;
175 #ifndef DISABLE_EVENT
176 uschar * event_action;
177 #endif
178 } tls_ext_ctx_cb;
179
180 /* should figure out a cleanup of API to handle state preserved per
181 implementation, for various reasons, which can be void * in the APIs.
182 For now, we hack around it. */
183 tls_ext_ctx_cb *client_static_cbinfo = NULL;
184 tls_ext_ctx_cb *server_static_cbinfo = NULL;
185
186 static int
187 setup_certs(SSL_CTX *sctx, uschar *certs, uschar *crl, host_item *host, BOOL optional,
188 int (*cert_vfy_cb)(int, X509_STORE_CTX *), uschar ** errstr );
189
190 /* Callbacks */
191 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
192 static int tls_servername_cb(SSL *s, int *ad ARG_UNUSED, void *arg);
193 #endif
194 #ifndef DISABLE_OCSP
195 static int tls_server_stapling_cb(SSL *s, void *arg);
196 #endif
197
198
199 /*************************************************
200 * Handle TLS error *
201 *************************************************/
202
203 /* Called from lots of places when errors occur before actually starting to do
204 the TLS handshake, that is, while the session is still in clear. Always returns
205 DEFER for a server and FAIL for a client so that most calls can use "return
206 tls_error(...)" to do this processing and then give an appropriate return. A
207 single function is used for both server and client, because it is called from
208 some shared functions.
209
210 Argument:
211 prefix text to include in the logged error
212 host NULL if setting up a server;
213 the connected host if setting up a client
214 msg error message or NULL if we should ask OpenSSL
215 errstr pointer to output error message
216
217 Returns: OK/DEFER/FAIL
218 */
219
220 static int
221 tls_error(uschar * prefix, const host_item * host, uschar * msg, uschar ** errstr)
222 {
223 if (!msg)
224 {
225 ERR_error_string(ERR_get_error(), ssl_errstring);
226 msg = US ssl_errstring;
227 }
228
229 if (errstr) *errstr = string_sprintf("(%s): %s", prefix, msg);
230 return host ? FAIL : DEFER;
231 }
232
233
234
235 /*************************************************
236 * Callback to generate RSA key *
237 *************************************************/
238
239 /*
240 Arguments:
241 s SSL connection (not used)
242 export not used
243 keylength keylength
244
245 Returns: pointer to generated key
246 */
247
248 static RSA *
249 rsa_callback(SSL *s, int export, int keylength)
250 {
251 RSA *rsa_key;
252 #ifdef EXIM_HAVE_RSA_GENKEY_EX
253 BIGNUM *bn = BN_new();
254 #endif
255
256 export = export; /* Shut picky compilers up */
257 DEBUG(D_tls) debug_printf("Generating %d bit RSA key...\n", keylength);
258
259 #ifdef EXIM_HAVE_RSA_GENKEY_EX
260 if ( !BN_set_word(bn, (unsigned long)RSA_F4)
261 || !(rsa_key = RSA_new())
262 || !RSA_generate_key_ex(rsa_key, keylength, bn, NULL)
263 )
264 #else
265 if (!(rsa_key = RSA_generate_key(keylength, RSA_F4, NULL, NULL)))
266 #endif
267
268 {
269 ERR_error_string(ERR_get_error(), ssl_errstring);
270 log_write(0, LOG_MAIN|LOG_PANIC, "TLS error (RSA_generate_key): %s",
271 ssl_errstring);
272 return NULL;
273 }
274 return rsa_key;
275 }
276
277
278
279 /* Extreme debug
280 #ifndef DISABLE_OCSP
281 void
282 x509_store_dump_cert_s_names(X509_STORE * store)
283 {
284 STACK_OF(X509_OBJECT) * roots= store->objs;
285 int i;
286 static uschar name[256];
287
288 for(i= 0; i<sk_X509_OBJECT_num(roots); i++)
289 {
290 X509_OBJECT * tmp_obj= sk_X509_OBJECT_value(roots, i);
291 if(tmp_obj->type == X509_LU_X509)
292 {
293 X509 * current_cert= tmp_obj->data.x509;
294 X509_NAME_oneline(X509_get_subject_name(current_cert), CS name, sizeof(name));
295 name[sizeof(name)-1] = '\0';
296 debug_printf(" %s\n", name);
297 }
298 }
299 }
300 #endif
301 */
302
303
304 #ifndef DISABLE_EVENT
305 static int
306 verify_event(tls_support * tlsp, X509 * cert, int depth, const uschar * dn,
307 BOOL *calledp, const BOOL *optionalp, const uschar * what)
308 {
309 uschar * ev;
310 uschar * yield;
311 X509 * old_cert;
312
313 ev = tlsp == &tls_out ? client_static_cbinfo->event_action : event_action;
314 if (ev)
315 {
316 DEBUG(D_tls) debug_printf("verify_event: %s %d\n", what, depth);
317 old_cert = tlsp->peercert;
318 tlsp->peercert = X509_dup(cert);
319 /* NB we do not bother setting peerdn */
320 if ((yield = event_raise(ev, US"tls:cert", string_sprintf("%d", depth))))
321 {
322 log_write(0, LOG_MAIN, "[%s] %s verify denied by event-action: "
323 "depth=%d cert=%s: %s",
324 tlsp == &tls_out ? deliver_host_address : sender_host_address,
325 what, depth, dn, yield);
326 *calledp = TRUE;
327 if (!*optionalp)
328 {
329 if (old_cert) tlsp->peercert = old_cert; /* restore 1st failing cert */
330 return 1; /* reject (leaving peercert set) */
331 }
332 DEBUG(D_tls) debug_printf("Event-action verify failure overridden "
333 "(host in tls_try_verify_hosts)\n");
334 }
335 X509_free(tlsp->peercert);
336 tlsp->peercert = old_cert;
337 }
338 return 0;
339 }
340 #endif
341
342 /*************************************************
343 * Callback for verification *
344 *************************************************/
345
346 /* The SSL library does certificate verification if set up to do so. This
347 callback has the current yes/no state is in "state". If verification succeeded,
348 we set the certificate-verified flag. If verification failed, what happens
349 depends on whether the client is required to present a verifiable certificate
350 or not.
351
352 If verification is optional, we change the state to yes, but still log the
353 verification error. For some reason (it really would help to have proper
354 documentation of OpenSSL), this callback function then gets called again, this
355 time with state = 1. We must take care not to set the private verified flag on
356 the second time through.
357
358 Note: this function is not called if the client fails to present a certificate
359 when asked. We get here only if a certificate has been received. Handling of
360 optional verification for this case is done when requesting SSL to verify, by
361 setting SSL_VERIFY_FAIL_IF_NO_PEER_CERT in the non-optional case.
362
363 May be called multiple times for different issues with a certificate, even
364 for a given "depth" in the certificate chain.
365
366 Arguments:
367 preverify_ok current yes/no state as 1/0
368 x509ctx certificate information.
369 tlsp per-direction (client vs. server) support data
370 calledp has-been-called flag
371 optionalp verification-is-optional flag
372
373 Returns: 0 if verification should fail, otherwise 1
374 */
375
376 static int
377 verify_callback(int preverify_ok, X509_STORE_CTX *x509ctx,
378 tls_support *tlsp, BOOL *calledp, BOOL *optionalp)
379 {
380 X509 * cert = X509_STORE_CTX_get_current_cert(x509ctx);
381 int depth = X509_STORE_CTX_get_error_depth(x509ctx);
382 uschar dn[256];
383
384 X509_NAME_oneline(X509_get_subject_name(cert), CS dn, sizeof(dn));
385 dn[sizeof(dn)-1] = '\0';
386
387 if (preverify_ok == 0)
388 {
389 uschar * extra = verify_mode ? string_sprintf(" (during %c-verify for [%s])",
390 *verify_mode, sender_host_address)
391 : US"";
392 log_write(0, LOG_MAIN, "[%s] SSL verify error%s: depth=%d error=%s cert=%s",
393 tlsp == &tls_out ? deliver_host_address : sender_host_address,
394 extra, depth,
395 X509_verify_cert_error_string(X509_STORE_CTX_get_error(x509ctx)), dn);
396 *calledp = TRUE;
397 if (!*optionalp)
398 {
399 if (!tlsp->peercert)
400 tlsp->peercert = X509_dup(cert); /* record failing cert */
401 return 0; /* reject */
402 }
403 DEBUG(D_tls) debug_printf("SSL verify failure overridden (host in "
404 "tls_try_verify_hosts)\n");
405 }
406
407 else if (depth != 0)
408 {
409 DEBUG(D_tls) debug_printf("SSL verify ok: depth=%d SN=%s\n", depth, dn);
410 #ifndef DISABLE_OCSP
411 if (tlsp == &tls_out && client_static_cbinfo->u_ocsp.client.verify_store)
412 { /* client, wanting stapling */
413 /* Add the server cert's signing chain as the one
414 for the verification of the OCSP stapled information. */
415
416 if (!X509_STORE_add_cert(client_static_cbinfo->u_ocsp.client.verify_store,
417 cert))
418 ERR_clear_error();
419 sk_X509_push(client_static_cbinfo->verify_stack, cert);
420 }
421 #endif
422 #ifndef DISABLE_EVENT
423 if (verify_event(tlsp, cert, depth, dn, calledp, optionalp, US"SSL"))
424 return 0; /* reject, with peercert set */
425 #endif
426 }
427 else
428 {
429 const uschar * verify_cert_hostnames;
430
431 if ( tlsp == &tls_out
432 && ((verify_cert_hostnames = client_static_cbinfo->verify_cert_hostnames)))
433 /* client, wanting hostname check */
434 {
435
436 #ifdef EXIM_HAVE_OPENSSL_CHECKHOST
437 # ifndef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
438 # define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0
439 # endif
440 # ifndef X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
441 # define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0
442 # endif
443 int sep = 0;
444 const uschar * list = verify_cert_hostnames;
445 uschar * name;
446 int rc;
447 while ((name = string_nextinlist(&list, &sep, NULL, 0)))
448 if ((rc = X509_check_host(cert, CCS name, 0,
449 X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
450 | X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS,
451 NULL)))
452 {
453 if (rc < 0)
454 {
455 log_write(0, LOG_MAIN, "[%s] SSL verify error: internal error",
456 tlsp == &tls_out ? deliver_host_address : sender_host_address);
457 name = NULL;
458 }
459 break;
460 }
461 if (!name)
462 #else
463 if (!tls_is_name_for_cert(verify_cert_hostnames, cert))
464 #endif
465 {
466 uschar * extra = verify_mode
467 ? string_sprintf(" (during %c-verify for [%s])",
468 *verify_mode, sender_host_address)
469 : US"";
470 log_write(0, LOG_MAIN,
471 "[%s] SSL verify error%s: certificate name mismatch: DN=\"%s\" H=\"%s\"",
472 tlsp == &tls_out ? deliver_host_address : sender_host_address,
473 extra, dn, verify_cert_hostnames);
474 *calledp = TRUE;
475 if (!*optionalp)
476 {
477 if (!tlsp->peercert)
478 tlsp->peercert = X509_dup(cert); /* record failing cert */
479 return 0; /* reject */
480 }
481 DEBUG(D_tls) debug_printf("SSL verify failure overridden (host in "
482 "tls_try_verify_hosts)\n");
483 }
484 }
485
486 #ifndef DISABLE_EVENT
487 if (verify_event(tlsp, cert, depth, dn, calledp, optionalp, US"SSL"))
488 return 0; /* reject, with peercert set */
489 #endif
490
491 DEBUG(D_tls) debug_printf("SSL%s verify ok: depth=0 SN=%s\n",
492 *calledp ? "" : " authenticated", dn);
493 if (!*calledp) tlsp->certificate_verified = TRUE;
494 *calledp = TRUE;
495 }
496
497 return 1; /* accept, at least for this level */
498 }
499
500 static int
501 verify_callback_client(int preverify_ok, X509_STORE_CTX *x509ctx)
502 {
503 return verify_callback(preverify_ok, x509ctx, &tls_out,
504 &client_verify_callback_called, &client_verify_optional);
505 }
506
507 static int
508 verify_callback_server(int preverify_ok, X509_STORE_CTX *x509ctx)
509 {
510 return verify_callback(preverify_ok, x509ctx, &tls_in,
511 &server_verify_callback_called, &server_verify_optional);
512 }
513
514
515 #ifdef EXPERIMENTAL_DANE
516
517 /* This gets called *by* the dane library verify callback, which interposes
518 itself.
519 */
520 static int
521 verify_callback_client_dane(int preverify_ok, X509_STORE_CTX * x509ctx)
522 {
523 X509 * cert = X509_STORE_CTX_get_current_cert(x509ctx);
524 uschar dn[256];
525 int depth = X509_STORE_CTX_get_error_depth(x509ctx);
526 #ifndef DISABLE_EVENT
527 BOOL dummy_called, optional = FALSE;
528 #endif
529
530 X509_NAME_oneline(X509_get_subject_name(cert), CS dn, sizeof(dn));
531 dn[sizeof(dn)-1] = '\0';
532
533 DEBUG(D_tls) debug_printf("verify_callback_client_dane: %s depth %d %s\n",
534 preverify_ok ? "ok":"BAD", depth, dn);
535
536 #ifndef DISABLE_EVENT
537 if (verify_event(&tls_out, cert, depth, dn,
538 &dummy_called, &optional, US"DANE"))
539 return 0; /* reject, with peercert set */
540 #endif
541
542 if (preverify_ok == 1)
543 tls_out.dane_verified =
544 tls_out.certificate_verified = TRUE;
545 else
546 {
547 int err = X509_STORE_CTX_get_error(x509ctx);
548 DEBUG(D_tls)
549 debug_printf(" - err %d '%s'\n", err, X509_verify_cert_error_string(err));
550 if (err == X509_V_ERR_APPLICATION_VERIFICATION)
551 preverify_ok = 1;
552 }
553 return preverify_ok;
554 }
555
556 #endif /*EXPERIMENTAL_DANE*/
557
558
559 /*************************************************
560 * Information callback *
561 *************************************************/
562
563 /* The SSL library functions call this from time to time to indicate what they
564 are doing. We copy the string to the debugging output when TLS debugging has
565 been requested.
566
567 Arguments:
568 s the SSL connection
569 where
570 ret
571
572 Returns: nothing
573 */
574
575 static void
576 info_callback(SSL *s, int where, int ret)
577 {
578 where = where;
579 ret = ret;
580 DEBUG(D_tls) debug_printf("SSL info: %s\n", SSL_state_string_long(s));
581 }
582
583
584
585 /*************************************************
586 * Initialize for DH *
587 *************************************************/
588
589 /* If dhparam is set, expand it, and load up the parameters for DH encryption.
590
591 Arguments:
592 sctx The current SSL CTX (inbound or outbound)
593 dhparam DH parameter file or fixed parameter identity string
594 host connected host, if client; NULL if server
595 errstr error string pointer
596
597 Returns: TRUE if OK (nothing to set up, or setup worked)
598 */
599
600 static BOOL
601 init_dh(SSL_CTX *sctx, uschar *dhparam, const host_item *host, uschar ** errstr)
602 {
603 BIO *bio;
604 DH *dh;
605 uschar *dhexpanded;
606 const char *pem;
607 int dh_bitsize;
608
609 if (!expand_check(dhparam, US"tls_dhparam", &dhexpanded, errstr))
610 return FALSE;
611
612 if (!dhexpanded || !*dhexpanded)
613 bio = BIO_new_mem_buf(CS std_dh_prime_default(), -1);
614 else if (dhexpanded[0] == '/')
615 {
616 if (!(bio = BIO_new_file(CS dhexpanded, "r")))
617 {
618 tls_error(string_sprintf("could not read dhparams file %s", dhexpanded),
619 host, US strerror(errno), errstr);
620 return FALSE;
621 }
622 }
623 else
624 {
625 if (Ustrcmp(dhexpanded, "none") == 0)
626 {
627 DEBUG(D_tls) debug_printf("Requested no DH parameters.\n");
628 return TRUE;
629 }
630
631 if (!(pem = std_dh_prime_named(dhexpanded)))
632 {
633 tls_error(string_sprintf("Unknown standard DH prime \"%s\"", dhexpanded),
634 host, US strerror(errno), errstr);
635 return FALSE;
636 }
637 bio = BIO_new_mem_buf(CS pem, -1);
638 }
639
640 if (!(dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL)))
641 {
642 BIO_free(bio);
643 tls_error(string_sprintf("Could not read tls_dhparams \"%s\"", dhexpanded),
644 host, NULL, errstr);
645 return FALSE;
646 }
647
648 /* note: our default limit of 2236 is not a multiple of 8; the limit comes from
649 * an NSS limit, and the GnuTLS APIs handle bit-sizes fine, so we went with
650 * 2236. But older OpenSSL can only report in bytes (octets), not bits.
651 * If someone wants to dance at the edge, then they can raise the limit or use
652 * current libraries. */
653 #ifdef EXIM_HAVE_OPENSSL_DH_BITS
654 /* Added in commit 26c79d5641d; `git describe --contains` says OpenSSL_1_1_0-pre1~1022
655 * This predates OpenSSL_1_1_0 (before a, b, ...) so is in all 1.1.0 */
656 dh_bitsize = DH_bits(dh);
657 #else
658 dh_bitsize = 8 * DH_size(dh);
659 #endif
660
661 /* Even if it is larger, we silently return success rather than cause things
662 * to fail out, so that a too-large DH will not knock out all TLS; it's a
663 * debatable choice. */
664 if (dh_bitsize > tls_dh_max_bits)
665 {
666 DEBUG(D_tls)
667 debug_printf("dhparams file %d bits, is > tls_dh_max_bits limit of %d\n",
668 dh_bitsize, tls_dh_max_bits);
669 }
670 else
671 {
672 SSL_CTX_set_tmp_dh(sctx, dh);
673 DEBUG(D_tls)
674 debug_printf("Diffie-Hellman initialized from %s with %d-bit prime\n",
675 dhexpanded ? dhexpanded : US"default", dh_bitsize);
676 }
677
678 DH_free(dh);
679 BIO_free(bio);
680
681 return TRUE;
682 }
683
684
685
686
687 /*************************************************
688 * Initialize for ECDH *
689 *************************************************/
690
691 /* Load parameters for ECDH encryption.
692
693 For now, we stick to NIST P-256 because: it's simple and easy to configure;
694 it avoids any patent issues that might bite redistributors; despite events in
695 the news and concerns over curve choices, we're not cryptographers, we're not
696 pretending to be, and this is "good enough" to be better than no support,
697 protecting against most adversaries. Given another year or two, there might
698 be sufficient clarity about a "right" way forward to let us make an informed
699 decision, instead of a knee-jerk reaction.
700
701 Longer-term, we should look at supporting both various named curves and
702 external files generated with "openssl ecparam", much as we do for init_dh().
703 We should also support "none" as a value, to explicitly avoid initialisation.
704
705 Patches welcome.
706
707 Arguments:
708 sctx The current SSL CTX (inbound or outbound)
709 host connected host, if client; NULL if server
710 errstr error string pointer
711
712 Returns: TRUE if OK (nothing to set up, or setup worked)
713 */
714
715 static BOOL
716 init_ecdh(SSL_CTX * sctx, host_item * host, uschar ** errstr)
717 {
718 #ifdef OPENSSL_NO_ECDH
719 return TRUE;
720 #else
721
722 EC_KEY * ecdh;
723 uschar * exp_curve;
724 int nid;
725 BOOL rv;
726
727 if (host) /* No ECDH setup for clients, only for servers */
728 return TRUE;
729
730 # ifndef EXIM_HAVE_ECDH
731 DEBUG(D_tls)
732 debug_printf("No OpenSSL API to define ECDH parameters, skipping\n");
733 return TRUE;
734 # else
735
736 if (!expand_check(tls_eccurve, US"tls_eccurve", &exp_curve, errstr))
737 return FALSE;
738 if (!exp_curve || !*exp_curve)
739 return TRUE;
740
741 /* "auto" needs to be handled carefully.
742 * OpenSSL < 1.0.2: we do not select anything, but fallback to prime256v1
743 * OpenSSL < 1.1.0: we have to call SSL_CTX_set_ecdh_auto
744 * (openssl/ssl.h defines SSL_CTRL_SET_ECDH_AUTO)
745 * OpenSSL >= 1.1.0: we do not set anything, the libray does autoselection
746 * https://github.com/openssl/openssl/commit/fe6ef2472db933f01b59cad82aa925736935984b
747 */
748 if (Ustrcmp(exp_curve, "auto") == 0)
749 {
750 #if OPENSSL_VERSION_NUMBER < 0x10002000L
751 DEBUG(D_tls) debug_printf(
752 "ECDH OpenSSL < 1.0.2: temp key parameter settings: overriding \"auto\" with \"prime256v1\"\n");
753 exp_curve = US"prime256v1";
754 #else
755 # if defined SSL_CTRL_SET_ECDH_AUTO
756 DEBUG(D_tls) debug_printf(
757 "ECDH OpenSSL 1.0.2+ temp key parameter settings: autoselection\n");
758 SSL_CTX_set_ecdh_auto(sctx, 1);
759 return TRUE;
760 # else
761 DEBUG(D_tls) debug_printf(
762 "ECDH OpenSSL 1.1.0+ temp key parameter settings: default selection\n");
763 return TRUE;
764 # endif
765 #endif
766 }
767
768 DEBUG(D_tls) debug_printf("ECDH: curve '%s'\n", exp_curve);
769 if ( (nid = OBJ_sn2nid (CCS exp_curve)) == NID_undef
770 # ifdef EXIM_HAVE_OPENSSL_EC_NIST2NID
771 && (nid = EC_curve_nist2nid(CCS exp_curve)) == NID_undef
772 # endif
773 )
774 {
775 tls_error(string_sprintf("Unknown curve name tls_eccurve '%s'", exp_curve),
776 host, NULL, errstr);
777 return FALSE;
778 }
779
780 if (!(ecdh = EC_KEY_new_by_curve_name(nid)))
781 {
782 tls_error(US"Unable to create ec curve", host, NULL, errstr);
783 return FALSE;
784 }
785
786 /* The "tmp" in the name here refers to setting a temporary key
787 not to the stability of the interface. */
788
789 if ((rv = SSL_CTX_set_tmp_ecdh(sctx, ecdh) == 0))
790 tls_error(string_sprintf("Error enabling '%s' curve", exp_curve), host, NULL, errstr);
791 else
792 DEBUG(D_tls) debug_printf("ECDH: enabled '%s' curve\n", exp_curve);
793
794 EC_KEY_free(ecdh);
795 return !rv;
796
797 # endif /*EXIM_HAVE_ECDH*/
798 #endif /*OPENSSL_NO_ECDH*/
799 }
800
801
802
803
804 #ifndef DISABLE_OCSP
805 /*************************************************
806 * Load OCSP information into state *
807 *************************************************/
808 /* Called to load the server OCSP response from the given file into memory, once
809 caller has determined this is needed. Checks validity. Debugs a message
810 if invalid.
811
812 ASSUMES: single response, for single cert.
813
814 Arguments:
815 sctx the SSL_CTX* to update
816 cbinfo various parts of session state
817 expanded the filename putatively holding an OCSP response
818
819 */
820
821 static void
822 ocsp_load_response(SSL_CTX *sctx, tls_ext_ctx_cb *cbinfo, const uschar *expanded)
823 {
824 BIO * bio;
825 OCSP_RESPONSE * resp;
826 OCSP_BASICRESP * basic_response;
827 OCSP_SINGLERESP * single_response;
828 ASN1_GENERALIZEDTIME * rev, * thisupd, * nextupd;
829 STACK_OF(X509) * sk;
830 unsigned long verify_flags;
831 int status, reason, i;
832
833 cbinfo->u_ocsp.server.file_expanded = string_copy(expanded);
834 if (cbinfo->u_ocsp.server.response)
835 {
836 OCSP_RESPONSE_free(cbinfo->u_ocsp.server.response);
837 cbinfo->u_ocsp.server.response = NULL;
838 }
839
840 if (!(bio = BIO_new_file(CS cbinfo->u_ocsp.server.file_expanded, "rb")))
841 {
842 DEBUG(D_tls) debug_printf("Failed to open OCSP response file \"%s\"\n",
843 cbinfo->u_ocsp.server.file_expanded);
844 return;
845 }
846
847 resp = d2i_OCSP_RESPONSE_bio(bio, NULL);
848 BIO_free(bio);
849 if (!resp)
850 {
851 DEBUG(D_tls) debug_printf("Error reading OCSP response.\n");
852 return;
853 }
854
855 if ((status = OCSP_response_status(resp)) != OCSP_RESPONSE_STATUS_SUCCESSFUL)
856 {
857 DEBUG(D_tls) debug_printf("OCSP response not valid: %s (%d)\n",
858 OCSP_response_status_str(status), status);
859 goto bad;
860 }
861
862 if (!(basic_response = OCSP_response_get1_basic(resp)))
863 {
864 DEBUG(D_tls)
865 debug_printf("OCSP response parse error: unable to extract basic response.\n");
866 goto bad;
867 }
868
869 sk = cbinfo->verify_stack;
870 verify_flags = OCSP_NOVERIFY; /* check sigs, but not purpose */
871
872 /* May need to expose ability to adjust those flags?
873 OCSP_NOSIGS OCSP_NOVERIFY OCSP_NOCHAIN OCSP_NOCHECKS OCSP_NOEXPLICIT
874 OCSP_TRUSTOTHER OCSP_NOINTERN */
875
876 /* This does a full verify on the OCSP proof before we load it for serving
877 up; possibly overkill - just date-checks might be nice enough.
878
879 OCSP_basic_verify takes a "store" arg, but does not
880 use it for the chain verification, which is all we do
881 when OCSP_NOVERIFY is set. The content from the wire
882 "basic_response" and a cert-stack "sk" are all that is used.
883
884 We have a stack, loaded in setup_certs() if tls_verify_certificates
885 was a file (not a directory, or "system"). It is unfortunate we
886 cannot used the connection context store, as that would neatly
887 handle the "system" case too, but there seems to be no library
888 function for getting a stack from a store.
889 [ In OpenSSL 1.1 - ? X509_STORE_CTX_get0_chain(ctx) ? ]
890 We do not free the stack since it could be needed a second time for
891 SNI handling.
892
893 Separately we might try to replace using OCSP_basic_verify() - which seems to not
894 be a public interface into the OpenSSL library (there's no manual entry) -
895 But what with? We also use OCSP_basic_verify in the client stapling callback.
896 And there we NEED it; we must verify that status... unless the
897 library does it for us anyway? */
898
899 if ((i = OCSP_basic_verify(basic_response, sk, NULL, verify_flags)) < 0)
900 {
901 DEBUG(D_tls)
902 {
903 ERR_error_string(ERR_get_error(), ssl_errstring);
904 debug_printf("OCSP response verify failure: %s\n", US ssl_errstring);
905 }
906 goto bad;
907 }
908
909 /* Here's the simplifying assumption: there's only one response, for the
910 one certificate we use, and nothing for anything else in a chain. If this
911 proves false, we need to extract a cert id from our issued cert
912 (tls_certificate) and use that for OCSP_resp_find_status() (which finds the
913 right cert in the stack and then calls OCSP_single_get0_status()).
914
915 I'm hoping to avoid reworking a bunch more of how we handle state here. */
916
917 if (!(single_response = OCSP_resp_get0(basic_response, 0)))
918 {
919 DEBUG(D_tls)
920 debug_printf("Unable to get first response from OCSP basic response.\n");
921 goto bad;
922 }
923
924 status = OCSP_single_get0_status(single_response, &reason, &rev, &thisupd, &nextupd);
925 if (status != V_OCSP_CERTSTATUS_GOOD)
926 {
927 DEBUG(D_tls) debug_printf("OCSP response bad cert status: %s (%d) %s (%d)\n",
928 OCSP_cert_status_str(status), status,
929 OCSP_crl_reason_str(reason), reason);
930 goto bad;
931 }
932
933 if (!OCSP_check_validity(thisupd, nextupd, EXIM_OCSP_SKEW_SECONDS, EXIM_OCSP_MAX_AGE))
934 {
935 DEBUG(D_tls) debug_printf("OCSP status invalid times.\n");
936 goto bad;
937 }
938
939 supply_response:
940 cbinfo->u_ocsp.server.response = resp; /*XXX stack?*/
941 return;
942
943 bad:
944 if (running_in_test_harness)
945 {
946 extern char ** environ;
947 uschar ** p;
948 if (environ) for (p = USS environ; *p; p++)
949 if (Ustrncmp(*p, "EXIM_TESTHARNESS_DISABLE_OCSPVALIDITYCHECK", 42) == 0)
950 {
951 DEBUG(D_tls) debug_printf("Supplying known bad OCSP response\n");
952 goto supply_response;
953 }
954 }
955 return;
956 }
957 #endif /*!DISABLE_OCSP*/
958
959
960
961
962 /* Create and install a selfsigned certificate, for use in server mode */
963
964 static int
965 tls_install_selfsign(SSL_CTX * sctx, uschar ** errstr)
966 {
967 X509 * x509 = NULL;
968 EVP_PKEY * pkey;
969 RSA * rsa;
970 X509_NAME * name;
971 uschar * where;
972
973 where = US"allocating pkey";
974 if (!(pkey = EVP_PKEY_new()))
975 goto err;
976
977 where = US"allocating cert";
978 if (!(x509 = X509_new()))
979 goto err;
980
981 where = US"generating pkey";
982 if (!(rsa = rsa_callback(NULL, 0, 1024)))
983 goto err;
984
985 where = US"assigning pkey";
986 if (!EVP_PKEY_assign_RSA(pkey, rsa))
987 goto err;
988
989 X509_set_version(x509, 2); /* N+1 - version 3 */
990 ASN1_INTEGER_set(X509_get_serialNumber(x509), 0);
991 X509_gmtime_adj(X509_get_notBefore(x509), 0);
992 X509_gmtime_adj(X509_get_notAfter(x509), (long)60 * 60); /* 1 hour */
993 X509_set_pubkey(x509, pkey);
994
995 name = X509_get_subject_name(x509);
996 X509_NAME_add_entry_by_txt(name, "C",
997 MBSTRING_ASC, CUS "UK", -1, -1, 0);
998 X509_NAME_add_entry_by_txt(name, "O",
999 MBSTRING_ASC, CUS "Exim Developers", -1, -1, 0);
1000 X509_NAME_add_entry_by_txt(name, "CN",
1001 MBSTRING_ASC, CUS smtp_active_hostname, -1, -1, 0);
1002 X509_set_issuer_name(x509, name);
1003
1004 where = US"signing cert";
1005 if (!X509_sign(x509, pkey, EVP_md5()))
1006 goto err;
1007
1008 where = US"installing selfsign cert";
1009 if (!SSL_CTX_use_certificate(sctx, x509))
1010 goto err;
1011
1012 where = US"installing selfsign key";
1013 if (!SSL_CTX_use_PrivateKey(sctx, pkey))
1014 goto err;
1015
1016 return OK;
1017
1018 err:
1019 (void) tls_error(where, NULL, NULL, errstr);
1020 if (x509) X509_free(x509);
1021 if (pkey) EVP_PKEY_free(pkey);
1022 return DEFER;
1023 }
1024
1025
1026
1027
1028 static int
1029 tls_add_certfile(SSL_CTX * sctx, tls_ext_ctx_cb * cbinfo, uschar * file,
1030 uschar ** errstr)
1031 {
1032 DEBUG(D_tls) debug_printf("tls_certificate file %s\n", file);
1033 if (!SSL_CTX_use_certificate_chain_file(sctx, CS file))
1034 return tls_error(string_sprintf(
1035 "SSL_CTX_use_certificate_chain_file file=%s", file),
1036 cbinfo->host, NULL, errstr);
1037 return 0;
1038 }
1039
1040 static int
1041 tls_add_pkeyfile(SSL_CTX * sctx, tls_ext_ctx_cb * cbinfo, uschar * file,
1042 uschar ** errstr)
1043 {
1044 DEBUG(D_tls) debug_printf("tls_privatekey file %s\n", file);
1045 if (!SSL_CTX_use_PrivateKey_file(sctx, CS file, SSL_FILETYPE_PEM))
1046 return tls_error(string_sprintf(
1047 "SSL_CTX_use_PrivateKey_file file=%s", file), cbinfo->host, NULL, errstr);
1048 return 0;
1049 }
1050
1051
1052 /*************************************************
1053 * Expand key and cert file specs *
1054 *************************************************/
1055
1056 /* Called once during tls_init and possibly again during TLS setup, for a
1057 new context, if Server Name Indication was used and tls_sni was seen in
1058 the certificate string.
1059
1060 Arguments:
1061 sctx the SSL_CTX* to update
1062 cbinfo various parts of session state
1063 errstr error string pointer
1064
1065 Returns: OK/DEFER/FAIL
1066 */
1067
1068 static int
1069 tls_expand_session_files(SSL_CTX *sctx, tls_ext_ctx_cb *cbinfo,
1070 uschar ** errstr)
1071 {
1072 uschar *expanded;
1073
1074 if (!cbinfo->certificate)
1075 {
1076 if (!cbinfo->is_server) /* client */
1077 return OK;
1078 /* server */
1079 if (tls_install_selfsign(sctx, errstr) != OK)
1080 return DEFER;
1081 }
1082 else
1083 {
1084 int err;
1085
1086 if (Ustrstr(cbinfo->certificate, US"tls_sni") ||
1087 Ustrstr(cbinfo->certificate, US"tls_in_sni") ||
1088 Ustrstr(cbinfo->certificate, US"tls_out_sni")
1089 )
1090 reexpand_tls_files_for_sni = TRUE;
1091
1092 if (!expand_check(cbinfo->certificate, US"tls_certificate", &expanded, errstr))
1093 return DEFER;
1094
1095 if (expanded)
1096 if (cbinfo->is_server)
1097 {
1098 const uschar * file_list = expanded;
1099 int sep = 0;
1100 uschar * file;
1101
1102 while (file = string_nextinlist(&file_list, &sep, NULL, 0))
1103 if ((err = tls_add_certfile(sctx, cbinfo, file, errstr)))
1104 return err;
1105 }
1106 else /* would there ever be a need for multiple client certs? */
1107 if ((err = tls_add_certfile(sctx, cbinfo, expanded, errstr)))
1108 return err;
1109
1110 if (cbinfo->privatekey != NULL &&
1111 !expand_check(cbinfo->privatekey, US"tls_privatekey", &expanded, errstr))
1112 return DEFER;
1113
1114 /* If expansion was forced to fail, key_expanded will be NULL. If the result
1115 of the expansion is an empty string, ignore it also, and assume the private
1116 key is in the same file as the certificate. */
1117
1118 if (expanded && *expanded)
1119 if (cbinfo->is_server)
1120 {
1121 const uschar * file_list = expanded;
1122 int sep = 0;
1123 uschar * file;
1124
1125 while (file = string_nextinlist(&file_list, &sep, NULL, 0))
1126 if ((err = tls_add_pkeyfile(sctx, cbinfo, file, errstr)))
1127 return err;
1128 }
1129 else /* would there ever be a need for multiple client certs? */
1130 if ((err = tls_add_pkeyfile(sctx, cbinfo, expanded, errstr)))
1131 return err;
1132 }
1133
1134 #ifndef DISABLE_OCSP
1135 if (cbinfo->is_server && cbinfo->u_ocsp.server.file)
1136 {
1137 /*XXX stack*/
1138 if (!expand_check(cbinfo->u_ocsp.server.file, US"tls_ocsp_file", &expanded, errstr))
1139 return DEFER;
1140
1141 if (expanded && *expanded)
1142 {
1143 DEBUG(D_tls) debug_printf("tls_ocsp_file %s\n", expanded);
1144 if ( cbinfo->u_ocsp.server.file_expanded
1145 && (Ustrcmp(expanded, cbinfo->u_ocsp.server.file_expanded) == 0))
1146 {
1147 DEBUG(D_tls) debug_printf(" - value unchanged, using existing values\n");
1148 }
1149 else
1150 ocsp_load_response(sctx, cbinfo, expanded);
1151 }
1152 }
1153 #endif
1154
1155 return OK;
1156 }
1157
1158
1159
1160
1161 /*************************************************
1162 * Callback to handle SNI *
1163 *************************************************/
1164
1165 /* Called when acting as server during the TLS session setup if a Server Name
1166 Indication extension was sent by the client.
1167
1168 API documentation is OpenSSL s_server.c implementation.
1169
1170 Arguments:
1171 s SSL* of the current session
1172 ad unknown (part of OpenSSL API) (unused)
1173 arg Callback of "our" registered data
1174
1175 Returns: SSL_TLSEXT_ERR_{OK,ALERT_WARNING,ALERT_FATAL,NOACK}
1176 */
1177
1178 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
1179 static int
1180 tls_servername_cb(SSL *s, int *ad ARG_UNUSED, void *arg)
1181 {
1182 const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
1183 tls_ext_ctx_cb *cbinfo = (tls_ext_ctx_cb *) arg;
1184 int rc;
1185 int old_pool = store_pool;
1186 uschar * dummy_errstr;
1187
1188 if (!servername)
1189 return SSL_TLSEXT_ERR_OK;
1190
1191 DEBUG(D_tls) debug_printf("Received TLS SNI \"%s\"%s\n", servername,
1192 reexpand_tls_files_for_sni ? "" : " (unused for certificate selection)");
1193
1194 /* Make the extension value available for expansion */
1195 store_pool = POOL_PERM;
1196 tls_in.sni = string_copy(US servername);
1197 store_pool = old_pool;
1198
1199 if (!reexpand_tls_files_for_sni)
1200 return SSL_TLSEXT_ERR_OK;
1201
1202 /* Can't find an SSL_CTX_clone() or equivalent, so we do it manually;
1203 not confident that memcpy wouldn't break some internal reference counting.
1204 Especially since there's a references struct member, which would be off. */
1205
1206 if (!(server_sni = SSL_CTX_new(SSLv23_server_method())))
1207 {
1208 ERR_error_string(ERR_get_error(), ssl_errstring);
1209 DEBUG(D_tls) debug_printf("SSL_CTX_new() failed: %s\n", ssl_errstring);
1210 return SSL_TLSEXT_ERR_NOACK;
1211 }
1212
1213 /* Not sure how many of these are actually needed, since SSL object
1214 already exists. Might even need this selfsame callback, for reneg? */
1215
1216 SSL_CTX_set_info_callback(server_sni, SSL_CTX_get_info_callback(server_ctx));
1217 SSL_CTX_set_mode(server_sni, SSL_CTX_get_mode(server_ctx));
1218 SSL_CTX_set_options(server_sni, SSL_CTX_get_options(server_ctx));
1219 SSL_CTX_set_timeout(server_sni, SSL_CTX_get_timeout(server_ctx));
1220 SSL_CTX_set_tlsext_servername_callback(server_sni, tls_servername_cb);
1221 SSL_CTX_set_tlsext_servername_arg(server_sni, cbinfo);
1222
1223 if ( !init_dh(server_sni, cbinfo->dhparam, NULL, &dummy_errstr)
1224 || !init_ecdh(server_sni, NULL, &dummy_errstr)
1225 )
1226 return SSL_TLSEXT_ERR_NOACK;
1227
1228 if (cbinfo->server_cipher_list)
1229 SSL_CTX_set_cipher_list(server_sni, CS cbinfo->server_cipher_list);
1230 #ifndef DISABLE_OCSP
1231 if (cbinfo->u_ocsp.server.file)
1232 {
1233 SSL_CTX_set_tlsext_status_cb(server_sni, tls_server_stapling_cb);
1234 SSL_CTX_set_tlsext_status_arg(server_sni, cbinfo);
1235 }
1236 #endif
1237
1238 if ((rc = setup_certs(server_sni, tls_verify_certificates, tls_crl, NULL, FALSE,
1239 verify_callback_server, &dummy_errstr)) != OK)
1240 return SSL_TLSEXT_ERR_NOACK;
1241
1242 /* do this after setup_certs, because this can require the certs for verifying
1243 OCSP information. */
1244 if ((rc = tls_expand_session_files(server_sni, cbinfo, &dummy_errstr)) != OK)
1245 return SSL_TLSEXT_ERR_NOACK;
1246
1247 DEBUG(D_tls) debug_printf("Switching SSL context.\n");
1248 SSL_set_SSL_CTX(s, server_sni);
1249
1250 return SSL_TLSEXT_ERR_OK;
1251 }
1252 #endif /* EXIM_HAVE_OPENSSL_TLSEXT */
1253
1254
1255
1256
1257 #ifndef DISABLE_OCSP
1258
1259 /*************************************************
1260 * Callback to handle OCSP Stapling *
1261 *************************************************/
1262
1263 /* Called when acting as server during the TLS session setup if the client
1264 requests OCSP information with a Certificate Status Request.
1265
1266 Documentation via openssl s_server.c and the Apache patch from the OpenSSL
1267 project.
1268
1269 */
1270
1271 static int
1272 tls_server_stapling_cb(SSL *s, void *arg)
1273 {
1274 const tls_ext_ctx_cb *cbinfo = (tls_ext_ctx_cb *) arg;
1275 uschar *response_der; /*XXX blob */
1276 int response_der_len;
1277
1278 /*XXX stack: use SSL_get_certificate() to see which cert; from that work
1279 out which ocsp blob to send. Unfortunately, SSL_get_certificate is known
1280 buggy in current OpenSSL; it returns the last cert loaded always rather than
1281 the one actually presented. So we can't support a stack of OCSP proofs at
1282 this time. */
1283
1284 DEBUG(D_tls)
1285 debug_printf("Received TLS status request (OCSP stapling); %s response\n",
1286 cbinfo->u_ocsp.server.response ? "have" : "lack");
1287
1288 tls_in.ocsp = OCSP_NOT_RESP;
1289 if (!cbinfo->u_ocsp.server.response)
1290 return SSL_TLSEXT_ERR_NOACK;
1291
1292 response_der = NULL;
1293 response_der_len = i2d_OCSP_RESPONSE(cbinfo->u_ocsp.server.response, /*XXX stack*/
1294 &response_der);
1295 if (response_der_len <= 0)
1296 return SSL_TLSEXT_ERR_NOACK;
1297
1298 SSL_set_tlsext_status_ocsp_resp(server_ssl, response_der, response_der_len);
1299 tls_in.ocsp = OCSP_VFIED;
1300 return SSL_TLSEXT_ERR_OK;
1301 }
1302
1303
1304 static void
1305 time_print(BIO * bp, const char * str, ASN1_GENERALIZEDTIME * time)
1306 {
1307 BIO_printf(bp, "\t%s: ", str);
1308 ASN1_GENERALIZEDTIME_print(bp, time);
1309 BIO_puts(bp, "\n");
1310 }
1311
1312 static int
1313 tls_client_stapling_cb(SSL *s, void *arg)
1314 {
1315 tls_ext_ctx_cb * cbinfo = arg;
1316 const unsigned char * p;
1317 int len;
1318 OCSP_RESPONSE * rsp;
1319 OCSP_BASICRESP * bs;
1320 int i;
1321
1322 DEBUG(D_tls) debug_printf("Received TLS status response (OCSP stapling):");
1323 len = SSL_get_tlsext_status_ocsp_resp(s, &p);
1324 if(!p)
1325 {
1326 /* Expect this when we requested ocsp but got none */
1327 if (cbinfo->u_ocsp.client.verify_required && LOGGING(tls_cipher))
1328 log_write(0, LOG_MAIN, "Received TLS status callback, null content");
1329 else
1330 DEBUG(D_tls) debug_printf(" null\n");
1331 return cbinfo->u_ocsp.client.verify_required ? 0 : 1;
1332 }
1333
1334 if(!(rsp = d2i_OCSP_RESPONSE(NULL, &p, len)))
1335 {
1336 tls_out.ocsp = OCSP_FAILED;
1337 if (LOGGING(tls_cipher))
1338 log_write(0, LOG_MAIN, "Received TLS cert status response, parse error");
1339 else
1340 DEBUG(D_tls) debug_printf(" parse error\n");
1341 return 0;
1342 }
1343
1344 if(!(bs = OCSP_response_get1_basic(rsp)))
1345 {
1346 tls_out.ocsp = OCSP_FAILED;
1347 if (LOGGING(tls_cipher))
1348 log_write(0, LOG_MAIN, "Received TLS cert status response, error parsing response");
1349 else
1350 DEBUG(D_tls) debug_printf(" error parsing response\n");
1351 OCSP_RESPONSE_free(rsp);
1352 return 0;
1353 }
1354
1355 /* We'd check the nonce here if we'd put one in the request. */
1356 /* However that would defeat cacheability on the server so we don't. */
1357
1358 /* This section of code reworked from OpenSSL apps source;
1359 The OpenSSL Project retains copyright:
1360 Copyright (c) 1999 The OpenSSL Project. All rights reserved.
1361 */
1362 {
1363 BIO * bp = NULL;
1364 int status, reason;
1365 ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd;
1366
1367 DEBUG(D_tls) bp = BIO_new_fp(stderr, BIO_NOCLOSE);
1368
1369 /*OCSP_RESPONSE_print(bp, rsp, 0); extreme debug: stapling content */
1370
1371 /* Use the chain that verified the server cert to verify the stapled info */
1372 /* DEBUG(D_tls) x509_store_dump_cert_s_names(cbinfo->u_ocsp.client.verify_store); */
1373
1374 if ((i = OCSP_basic_verify(bs, cbinfo->verify_stack,
1375 cbinfo->u_ocsp.client.verify_store, 0)) <= 0)
1376 {
1377 tls_out.ocsp = OCSP_FAILED;
1378 if (LOGGING(tls_cipher))
1379 log_write(0, LOG_MAIN, "Received TLS cert status response, itself unverifiable");
1380 BIO_printf(bp, "OCSP response verify failure\n");
1381 ERR_print_errors(bp);
1382 goto failed;
1383 }
1384
1385 BIO_printf(bp, "OCSP response well-formed and signed OK\n");
1386
1387 /*XXX So we have a good stapled OCSP status. How do we know
1388 it is for the cert of interest? OpenSSL 1.1.0 has a routine
1389 OCSP_resp_find_status() which matches on a cert id, which presumably
1390 we should use. Making an id needs OCSP_cert_id_new(), which takes
1391 issuerName, issuerKey, serialNumber. Are they all in the cert?
1392
1393 For now, carry on blindly accepting the resp. */
1394
1395 {
1396 OCSP_SINGLERESP * single;
1397
1398 #ifdef EXIM_HAVE_OCSP_RESP_COUNT
1399 if (OCSP_resp_count(bs) != 1)
1400 #else
1401 STACK_OF(OCSP_SINGLERESP) * sresp = bs->tbsResponseData->responses;
1402 if (sk_OCSP_SINGLERESP_num(sresp) != 1)
1403 #endif
1404 {
1405 tls_out.ocsp = OCSP_FAILED;
1406 log_write(0, LOG_MAIN, "OCSP stapling "
1407 "with multiple responses not handled");
1408 goto failed;
1409 }
1410 single = OCSP_resp_get0(bs, 0);
1411 status = OCSP_single_get0_status(single, &reason, &rev,
1412 &thisupd, &nextupd);
1413 }
1414
1415 DEBUG(D_tls) time_print(bp, "This OCSP Update", thisupd);
1416 DEBUG(D_tls) if(nextupd) time_print(bp, "Next OCSP Update", nextupd);
1417 if (!OCSP_check_validity(thisupd, nextupd,
1418 EXIM_OCSP_SKEW_SECONDS, EXIM_OCSP_MAX_AGE))
1419 {
1420 tls_out.ocsp = OCSP_FAILED;
1421 DEBUG(D_tls) ERR_print_errors(bp);
1422 log_write(0, LOG_MAIN, "Server OSCP dates invalid");
1423 }
1424 else
1425 {
1426 DEBUG(D_tls) BIO_printf(bp, "Certificate status: %s\n",
1427 OCSP_cert_status_str(status));
1428 switch(status)
1429 {
1430 case V_OCSP_CERTSTATUS_GOOD:
1431 tls_out.ocsp = OCSP_VFIED;
1432 i = 1;
1433 goto good;
1434 case V_OCSP_CERTSTATUS_REVOKED:
1435 tls_out.ocsp = OCSP_FAILED;
1436 log_write(0, LOG_MAIN, "Server certificate revoked%s%s",
1437 reason != -1 ? "; reason: " : "",
1438 reason != -1 ? OCSP_crl_reason_str(reason) : "");
1439 DEBUG(D_tls) time_print(bp, "Revocation Time", rev);
1440 break;
1441 default:
1442 tls_out.ocsp = OCSP_FAILED;
1443 log_write(0, LOG_MAIN,
1444 "Server certificate status unknown, in OCSP stapling");
1445 break;
1446 }
1447 }
1448 failed:
1449 i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
1450 good:
1451 BIO_free(bp);
1452 }
1453
1454 OCSP_RESPONSE_free(rsp);
1455 return i;
1456 }
1457 #endif /*!DISABLE_OCSP*/
1458
1459
1460 /*************************************************
1461 * Initialize for TLS *
1462 *************************************************/
1463
1464 /* Called from both server and client code, to do preliminary initialization
1465 of the library. We allocate and return a context structure.
1466
1467 Arguments:
1468 ctxp returned SSL context
1469 host connected host, if client; NULL if server
1470 dhparam DH parameter file
1471 certificate certificate file
1472 privatekey private key
1473 ocsp_file file of stapling info (server); flag for require ocsp (client)
1474 addr address if client; NULL if server (for some randomness)
1475 cbp place to put allocated callback context
1476 errstr error string pointer
1477
1478 Returns: OK/DEFER/FAIL
1479 */
1480
1481 static int
1482 tls_init(SSL_CTX **ctxp, host_item *host, uschar *dhparam, uschar *certificate,
1483 uschar *privatekey,
1484 #ifndef DISABLE_OCSP
1485 uschar *ocsp_file, /*XXX stack, in server*/
1486 #endif
1487 address_item *addr, tls_ext_ctx_cb ** cbp, uschar ** errstr)
1488 {
1489 SSL_CTX * ctx;
1490 long init_options;
1491 int rc;
1492 tls_ext_ctx_cb * cbinfo;
1493
1494 cbinfo = store_malloc(sizeof(tls_ext_ctx_cb));
1495 cbinfo->certificate = certificate;
1496 cbinfo->privatekey = privatekey;
1497 cbinfo->is_server = host==NULL;
1498 #ifndef DISABLE_OCSP
1499 cbinfo->verify_stack = NULL;
1500 if (!host)
1501 {
1502 cbinfo->u_ocsp.server.file = ocsp_file;
1503 cbinfo->u_ocsp.server.file_expanded = NULL;
1504 cbinfo->u_ocsp.server.response = NULL;
1505 }
1506 else
1507 cbinfo->u_ocsp.client.verify_store = NULL;
1508 #endif
1509 cbinfo->dhparam = dhparam;
1510 cbinfo->server_cipher_list = NULL;
1511 cbinfo->host = host;
1512 #ifndef DISABLE_EVENT
1513 cbinfo->event_action = NULL;
1514 #endif
1515
1516 SSL_load_error_strings(); /* basic set up */
1517 OpenSSL_add_ssl_algorithms();
1518
1519 #ifdef EXIM_HAVE_SHA256
1520 /* SHA256 is becoming ever more popular. This makes sure it gets added to the
1521 list of available digests. */
1522 EVP_add_digest(EVP_sha256());
1523 #endif
1524
1525 /* Create a context.
1526 The OpenSSL docs in 1.0.1b have not been updated to clarify TLS variant
1527 negotiation in the different methods; as far as I can tell, the only
1528 *_{server,client}_method which allows negotiation is SSLv23, which exists even
1529 when OpenSSL is built without SSLv2 support.
1530 By disabling with openssl_options, we can let admins re-enable with the
1531 existing knob. */
1532
1533 if (!(ctx = SSL_CTX_new(host ? SSLv23_client_method() : SSLv23_server_method())))
1534 return tls_error(US"SSL_CTX_new", host, NULL, errstr);
1535
1536 /* It turns out that we need to seed the random number generator this early in
1537 order to get the full complement of ciphers to work. It took me roughly a day
1538 of work to discover this by experiment.
1539
1540 On systems that have /dev/urandom, SSL may automatically seed itself from
1541 there. Otherwise, we have to make something up as best we can. Double check
1542 afterwards. */
1543
1544 if (!RAND_status())
1545 {
1546 randstuff r;
1547 gettimeofday(&r.tv, NULL);
1548 r.p = getpid();
1549
1550 RAND_seed(US (&r), sizeof(r));
1551 RAND_seed(US big_buffer, big_buffer_size);
1552 if (addr != NULL) RAND_seed(US addr, sizeof(addr));
1553
1554 if (!RAND_status())
1555 return tls_error(US"RAND_status", host,
1556 US"unable to seed random number generator", errstr);
1557 }
1558
1559 /* Set up the information callback, which outputs if debugging is at a suitable
1560 level. */
1561
1562 DEBUG(D_tls) SSL_CTX_set_info_callback(ctx, (void (*)())info_callback);
1563
1564 /* Automatically re-try reads/writes after renegotiation. */
1565 (void) SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
1566
1567 /* Apply administrator-supplied work-arounds.
1568 Historically we applied just one requested option,
1569 SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS, but when bug 994 requested a second, we
1570 moved to an administrator-controlled list of options to specify and
1571 grandfathered in the first one as the default value for "openssl_options".
1572
1573 No OpenSSL version number checks: the options we accept depend upon the
1574 availability of the option value macros from OpenSSL. */
1575
1576 if (!tls_openssl_options_parse(openssl_options, &init_options))
1577 return tls_error(US"openssl_options parsing failed", host, NULL, errstr);
1578
1579 if (init_options)
1580 {
1581 DEBUG(D_tls) debug_printf("setting SSL CTX options: %#lx\n", init_options);
1582 if (!(SSL_CTX_set_options(ctx, init_options)))
1583 return tls_error(string_sprintf(
1584 "SSL_CTX_set_option(%#lx)", init_options), host, NULL, errstr);
1585 }
1586 else
1587 DEBUG(D_tls) debug_printf("no SSL CTX options to set\n");
1588
1589 /* Disable session cache unconditionally */
1590
1591 (void) SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
1592
1593 /* Initialize with DH parameters if supplied */
1594 /* Initialize ECDH temp key parameter selection */
1595
1596 if ( !init_dh(ctx, dhparam, host, errstr)
1597 || !init_ecdh(ctx, host, errstr)
1598 )
1599 return DEFER;
1600
1601 /* Set up certificate and key (and perhaps OCSP info) */
1602
1603 if ((rc = tls_expand_session_files(ctx, cbinfo, errstr)) != OK)
1604 return rc;
1605
1606 /* If we need to handle SNI or OCSP, do so */
1607
1608 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
1609 # ifndef DISABLE_OCSP
1610 if (!(cbinfo->verify_stack = sk_X509_new_null()))
1611 {
1612 DEBUG(D_tls) debug_printf("failed to create stack for stapling verify\n");
1613 return FAIL;
1614 }
1615 # endif
1616
1617 if (host == NULL) /* server */
1618 {
1619 # ifndef DISABLE_OCSP
1620 /* We check u_ocsp.server.file, not server.response, because we care about if
1621 the option exists, not what the current expansion might be, as SNI might
1622 change the certificate and OCSP file in use between now and the time the
1623 callback is invoked. */
1624 if (cbinfo->u_ocsp.server.file)
1625 {
1626 SSL_CTX_set_tlsext_status_cb(ctx, tls_server_stapling_cb);
1627 SSL_CTX_set_tlsext_status_arg(ctx, cbinfo);
1628 }
1629 # endif
1630 /* We always do this, so that $tls_sni is available even if not used in
1631 tls_certificate */
1632 SSL_CTX_set_tlsext_servername_callback(ctx, tls_servername_cb);
1633 SSL_CTX_set_tlsext_servername_arg(ctx, cbinfo);
1634 }
1635 # ifndef DISABLE_OCSP
1636 else /* client */
1637 if(ocsp_file) /* wanting stapling */
1638 {
1639 if (!(cbinfo->u_ocsp.client.verify_store = X509_STORE_new()))
1640 {
1641 DEBUG(D_tls) debug_printf("failed to create store for stapling verify\n");
1642 return FAIL;
1643 }
1644 SSL_CTX_set_tlsext_status_cb(ctx, tls_client_stapling_cb);
1645 SSL_CTX_set_tlsext_status_arg(ctx, cbinfo);
1646 }
1647 # endif
1648 #endif
1649
1650 cbinfo->verify_cert_hostnames = NULL;
1651
1652 #ifdef EXIM_HAVE_EPHEM_RSA_KEX
1653 /* Set up the RSA callback */
1654 SSL_CTX_set_tmp_rsa_callback(ctx, rsa_callback);
1655 #endif
1656
1657 /* Finally, set the timeout, and we are done */
1658
1659 SSL_CTX_set_timeout(ctx, ssl_session_timeout);
1660 DEBUG(D_tls) debug_printf("Initialized TLS\n");
1661
1662 *cbp = cbinfo;
1663 *ctxp = ctx;
1664
1665 return OK;
1666 }
1667
1668
1669
1670
1671 /*************************************************
1672 * Get name of cipher in use *
1673 *************************************************/
1674
1675 /*
1676 Argument: pointer to an SSL structure for the connection
1677 buffer to use for answer
1678 size of buffer
1679 pointer to number of bits for cipher
1680 Returns: nothing
1681 */
1682
1683 static void
1684 construct_cipher_name(SSL *ssl, uschar *cipherbuf, int bsize, int *bits)
1685 {
1686 /* With OpenSSL 1.0.0a, this needs to be const but the documentation doesn't
1687 yet reflect that. It should be a safe change anyway, even 0.9.8 versions have
1688 the accessor functions use const in the prototype. */
1689 const SSL_CIPHER *c;
1690 const uschar *ver;
1691
1692 ver = (const uschar *)SSL_get_version(ssl);
1693
1694 c = (const SSL_CIPHER *) SSL_get_current_cipher(ssl);
1695 SSL_CIPHER_get_bits(c, bits);
1696
1697 string_format(cipherbuf, bsize, "%s:%s:%u", ver,
1698 SSL_CIPHER_get_name(c), *bits);
1699
1700 DEBUG(D_tls) debug_printf("Cipher: %s\n", cipherbuf);
1701 }
1702
1703
1704 static void
1705 peer_cert(SSL * ssl, tls_support * tlsp, uschar * peerdn, unsigned bsize)
1706 {
1707 /*XXX we might consider a list-of-certs variable for the cert chain.
1708 SSL_get_peer_cert_chain(SSL*). We'd need a new variable type and support
1709 in list-handling functions, also consider the difference between the entire
1710 chain and the elements sent by the peer. */
1711
1712 /* Will have already noted peercert on a verify fail; possibly not the leaf */
1713 if (!tlsp->peercert)
1714 tlsp->peercert = SSL_get_peer_certificate(ssl);
1715 /* Beware anonymous ciphers which lead to server_cert being NULL */
1716 if (tlsp->peercert)
1717 {
1718 X509_NAME_oneline(X509_get_subject_name(tlsp->peercert), CS peerdn, bsize);
1719 peerdn[bsize-1] = '\0';
1720 tlsp->peerdn = peerdn; /*XXX a static buffer... */
1721 }
1722 else
1723 tlsp->peerdn = NULL;
1724 }
1725
1726
1727
1728
1729
1730 /*************************************************
1731 * Set up for verifying certificates *
1732 *************************************************/
1733
1734 /* Load certs from file, return TRUE on success */
1735
1736 static BOOL
1737 chain_from_pem_file(const uschar * file, STACK_OF(X509) * verify_stack)
1738 {
1739 BIO * bp;
1740 X509 * x;
1741
1742 if (!(bp = BIO_new_file(CS file, "r"))) return FALSE;
1743 while ((x = PEM_read_bio_X509(bp, NULL, 0, NULL)))
1744 sk_X509_push(verify_stack, x);
1745 BIO_free(bp);
1746 return TRUE;
1747 }
1748
1749
1750
1751 /* Called by both client and server startup
1752
1753 Arguments:
1754 sctx SSL_CTX* to initialise
1755 certs certs file or NULL
1756 crl CRL file or NULL
1757 host NULL in a server; the remote host in a client
1758 optional TRUE if called from a server for a host in tls_try_verify_hosts;
1759 otherwise passed as FALSE
1760 cert_vfy_cb Callback function for certificate verification
1761 errstr error string pointer
1762
1763 Returns: OK/DEFER/FAIL
1764 */
1765
1766 static int
1767 setup_certs(SSL_CTX *sctx, uschar *certs, uschar *crl, host_item *host, BOOL optional,
1768 int (*cert_vfy_cb)(int, X509_STORE_CTX *), uschar ** errstr)
1769 {
1770 uschar *expcerts, *expcrl;
1771
1772 if (!expand_check(certs, US"tls_verify_certificates", &expcerts, errstr))
1773 return DEFER;
1774 DEBUG(D_tls) debug_printf("tls_verify_certificates: %s\n", expcerts);
1775
1776 if (expcerts && *expcerts)
1777 {
1778 /* Tell the library to use its compiled-in location for the system default
1779 CA bundle. Then add the ones specified in the config, if any. */
1780
1781 if (!SSL_CTX_set_default_verify_paths(sctx))
1782 return tls_error(US"SSL_CTX_set_default_verify_paths", host, NULL, errstr);
1783
1784 if (Ustrcmp(expcerts, "system") != 0)
1785 {
1786 struct stat statbuf;
1787
1788 if (Ustat(expcerts, &statbuf) < 0)
1789 {
1790 log_write(0, LOG_MAIN|LOG_PANIC,
1791 "failed to stat %s for certificates", expcerts);
1792 return DEFER;
1793 }
1794 else
1795 {
1796 uschar *file, *dir;
1797 if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
1798 { file = NULL; dir = expcerts; }
1799 else
1800 {
1801 file = expcerts; dir = NULL;
1802 #ifndef DISABLE_OCSP
1803 /* In the server if we will be offering an OCSP proof, load chain from
1804 file for verifying the OCSP proof at load time. */
1805
1806 if ( !host
1807 && statbuf.st_size > 0
1808 && server_static_cbinfo->u_ocsp.server.file
1809 && !chain_from_pem_file(file, server_static_cbinfo->verify_stack)
1810 )
1811 {
1812 log_write(0, LOG_MAIN|LOG_PANIC,
1813 "failed to load cert hain from %s", file);
1814 return DEFER;
1815 }
1816 #endif
1817 }
1818
1819 /* If a certificate file is empty, the next function fails with an
1820 unhelpful error message. If we skip it, we get the correct behaviour (no
1821 certificates are recognized, but the error message is still misleading (it
1822 says no certificate was supplied). But this is better. */
1823
1824 if ( (!file || statbuf.st_size > 0)
1825 && !SSL_CTX_load_verify_locations(sctx, CS file, CS dir))
1826 return tls_error(US"SSL_CTX_load_verify_locations", host, NULL, errstr);
1827
1828 /* Load the list of CAs for which we will accept certs, for sending
1829 to the client. This is only for the one-file tls_verify_certificates
1830 variant.
1831 If a list isn't loaded into the server, but
1832 some verify locations are set, the server end appears to make
1833 a wildcard request for client certs.
1834 Meanwhile, the client library as default behaviour *ignores* the list
1835 we send over the wire - see man SSL_CTX_set_client_cert_cb.
1836 Because of this, and that the dir variant is likely only used for
1837 the public-CA bundle (not for a private CA), not worth fixing.
1838 */
1839 if (file)
1840 {
1841 STACK_OF(X509_NAME) * names = SSL_load_client_CA_file(CS file);
1842
1843 DEBUG(D_tls) debug_printf("Added %d certificate authorities.\n",
1844 sk_X509_NAME_num(names));
1845 SSL_CTX_set_client_CA_list(sctx, names);
1846 }
1847 }
1848 }
1849
1850 /* Handle a certificate revocation list. */
1851
1852 #if OPENSSL_VERSION_NUMBER > 0x00907000L
1853
1854 /* This bit of code is now the version supplied by Lars Mainka. (I have
1855 merely reformatted it into the Exim code style.)
1856
1857 "From here I changed the code to add support for multiple crl's
1858 in pem format in one file or to support hashed directory entries in
1859 pem format instead of a file. This method now uses the library function
1860 X509_STORE_load_locations to add the CRL location to the SSL context.
1861 OpenSSL will then handle the verify against CA certs and CRLs by
1862 itself in the verify callback." */
1863
1864 if (!expand_check(crl, US"tls_crl", &expcrl, errstr)) return DEFER;
1865 if (expcrl && *expcrl)
1866 {
1867 struct stat statbufcrl;
1868 if (Ustat(expcrl, &statbufcrl) < 0)
1869 {
1870 log_write(0, LOG_MAIN|LOG_PANIC,
1871 "failed to stat %s for certificates revocation lists", expcrl);
1872 return DEFER;
1873 }
1874 else
1875 {
1876 /* is it a file or directory? */
1877 uschar *file, *dir;
1878 X509_STORE *cvstore = SSL_CTX_get_cert_store(sctx);
1879 if ((statbufcrl.st_mode & S_IFMT) == S_IFDIR)
1880 {
1881 file = NULL;
1882 dir = expcrl;
1883 DEBUG(D_tls) debug_printf("SSL CRL value is a directory %s\n", dir);
1884 }
1885 else
1886 {
1887 file = expcrl;
1888 dir = NULL;
1889 DEBUG(D_tls) debug_printf("SSL CRL value is a file %s\n", file);
1890 }
1891 if (X509_STORE_load_locations(cvstore, CS file, CS dir) == 0)
1892 return tls_error(US"X509_STORE_load_locations", host, NULL, errstr);
1893
1894 /* setting the flags to check against the complete crl chain */
1895
1896 X509_STORE_set_flags(cvstore,
1897 X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
1898 }
1899 }
1900
1901 #endif /* OPENSSL_VERSION_NUMBER > 0x00907000L */
1902
1903 /* If verification is optional, don't fail if no certificate */
1904
1905 SSL_CTX_set_verify(sctx,
1906 SSL_VERIFY_PEER | (optional? 0 : SSL_VERIFY_FAIL_IF_NO_PEER_CERT),
1907 cert_vfy_cb);
1908 }
1909
1910 return OK;
1911 }
1912
1913
1914
1915 /*************************************************
1916 * Start a TLS session in a server *
1917 *************************************************/
1918
1919 /* This is called when Exim is running as a server, after having received
1920 the STARTTLS command. It must respond to that command, and then negotiate
1921 a TLS session.
1922
1923 Arguments:
1924 require_ciphers allowed ciphers
1925 errstr pointer to error message
1926
1927 Returns: OK on success
1928 DEFER for errors before the start of the negotiation
1929 FAIL for errors during the negotiation; the server can't
1930 continue running.
1931 */
1932
1933 int
1934 tls_server_start(const uschar * require_ciphers, uschar ** errstr)
1935 {
1936 int rc;
1937 uschar * expciphers;
1938 tls_ext_ctx_cb * cbinfo;
1939 static uschar peerdn[256];
1940 static uschar cipherbuf[256];
1941
1942 /* Check for previous activation */
1943
1944 if (tls_in.active >= 0)
1945 {
1946 tls_error(US"STARTTLS received after TLS started", NULL, US"", errstr);
1947 smtp_printf("554 Already in TLS\r\n", FALSE);
1948 return FAIL;
1949 }
1950
1951 /* Initialize the SSL library. If it fails, it will already have logged
1952 the error. */
1953
1954 rc = tls_init(&server_ctx, NULL, tls_dhparam, tls_certificate, tls_privatekey,
1955 #ifndef DISABLE_OCSP
1956 tls_ocsp_file, /*XXX stack*/
1957 #endif
1958 NULL, &server_static_cbinfo, errstr);
1959 if (rc != OK) return rc;
1960 cbinfo = server_static_cbinfo;
1961
1962 if (!expand_check(require_ciphers, US"tls_require_ciphers", &expciphers, errstr))
1963 return FAIL;
1964
1965 /* In OpenSSL, cipher components are separated by hyphens. In GnuTLS, they
1966 were historically separated by underscores. So that I can use either form in my
1967 tests, and also for general convenience, we turn underscores into hyphens here.
1968 */
1969
1970 if (expciphers)
1971 {
1972 uschar * s = expciphers;
1973 while (*s != 0) { if (*s == '_') *s = '-'; s++; }
1974 DEBUG(D_tls) debug_printf("required ciphers: %s\n", expciphers);
1975 if (!SSL_CTX_set_cipher_list(server_ctx, CS expciphers))
1976 return tls_error(US"SSL_CTX_set_cipher_list", NULL, NULL, errstr);
1977 cbinfo->server_cipher_list = expciphers;
1978 }
1979
1980 /* If this is a host for which certificate verification is mandatory or
1981 optional, set up appropriately. */
1982
1983 tls_in.certificate_verified = FALSE;
1984 #ifdef EXPERIMENTAL_DANE
1985 tls_in.dane_verified = FALSE;
1986 #endif
1987 server_verify_callback_called = FALSE;
1988
1989 if (verify_check_host(&tls_verify_hosts) == OK)
1990 {
1991 rc = setup_certs(server_ctx, tls_verify_certificates, tls_crl, NULL,
1992 FALSE, verify_callback_server, errstr);
1993 if (rc != OK) return rc;
1994 server_verify_optional = FALSE;
1995 }
1996 else if (verify_check_host(&tls_try_verify_hosts) == OK)
1997 {
1998 rc = setup_certs(server_ctx, tls_verify_certificates, tls_crl, NULL,
1999 TRUE, verify_callback_server, errstr);
2000 if (rc != OK) return rc;
2001 server_verify_optional = TRUE;
2002 }
2003
2004 /* Prepare for new connection */
2005
2006 if (!(server_ssl = SSL_new(server_ctx)))
2007 return tls_error(US"SSL_new", NULL, NULL, errstr);
2008
2009 /* Warning: we used to SSL_clear(ssl) here, it was removed.
2010 *
2011 * With the SSL_clear(), we get strange interoperability bugs with
2012 * OpenSSL 1.0.1b and TLS1.1/1.2. It looks as though this may be a bug in
2013 * OpenSSL itself, as a clear should not lead to inability to follow protocols.
2014 *
2015 * The SSL_clear() call is to let an existing SSL* be reused, typically after
2016 * session shutdown. In this case, we have a brand new object and there's no
2017 * obvious reason to immediately clear it. I'm guessing that this was
2018 * originally added because of incomplete initialisation which the clear fixed,
2019 * in some historic release.
2020 */
2021
2022 /* Set context and tell client to go ahead, except in the case of TLS startup
2023 on connection, where outputting anything now upsets the clients and tends to
2024 make them disconnect. We need to have an explicit fflush() here, to force out
2025 the response. Other smtp_printf() calls do not need it, because in non-TLS
2026 mode, the fflush() happens when smtp_getc() is called. */
2027
2028 SSL_set_session_id_context(server_ssl, sid_ctx, Ustrlen(sid_ctx));
2029 if (!tls_in.on_connect)
2030 {
2031 smtp_printf("220 TLS go ahead\r\n", FALSE);
2032 fflush(smtp_out);
2033 }
2034
2035 /* Now negotiate the TLS session. We put our own timer on it, since it seems
2036 that the OpenSSL library doesn't. */
2037
2038 SSL_set_wfd(server_ssl, fileno(smtp_out));
2039 SSL_set_rfd(server_ssl, fileno(smtp_in));
2040 SSL_set_accept_state(server_ssl);
2041
2042 DEBUG(D_tls) debug_printf("Calling SSL_accept\n");
2043
2044 sigalrm_seen = FALSE;
2045 if (smtp_receive_timeout > 0) alarm(smtp_receive_timeout);
2046 rc = SSL_accept(server_ssl);
2047 alarm(0);
2048
2049 if (rc <= 0)
2050 {
2051 (void) tls_error(US"SSL_accept", NULL, sigalrm_seen ? US"timed out" : NULL, errstr);
2052 return FAIL;
2053 }
2054
2055 DEBUG(D_tls) debug_printf("SSL_accept was successful\n");
2056
2057 /* TLS has been set up. Adjust the input functions to read via TLS,
2058 and initialize things. */
2059
2060 peer_cert(server_ssl, &tls_in, peerdn, sizeof(peerdn));
2061
2062 construct_cipher_name(server_ssl, cipherbuf, sizeof(cipherbuf), &tls_in.bits);
2063 tls_in.cipher = cipherbuf;
2064
2065 DEBUG(D_tls)
2066 {
2067 uschar buf[2048];
2068 if (SSL_get_shared_ciphers(server_ssl, CS buf, sizeof(buf)) != NULL)
2069 debug_printf("Shared ciphers: %s\n", buf);
2070 }
2071
2072 /* Record the certificate we presented */
2073 {
2074 X509 * crt = SSL_get_certificate(server_ssl);
2075 tls_in.ourcert = crt ? X509_dup(crt) : NULL;
2076 }
2077
2078 /* Only used by the server-side tls (tls_in), including tls_getc.
2079 Client-side (tls_out) reads (seem to?) go via
2080 smtp_read_response()/ip_recv().
2081 Hence no need to duplicate for _in and _out.
2082 */
2083 ssl_xfer_buffer = store_malloc(ssl_xfer_buffer_size);
2084 ssl_xfer_buffer_lwm = ssl_xfer_buffer_hwm = 0;
2085 ssl_xfer_eof = ssl_xfer_error = 0;
2086
2087 receive_getc = tls_getc;
2088 receive_getbuf = tls_getbuf;
2089 receive_get_cache = tls_get_cache;
2090 receive_ungetc = tls_ungetc;
2091 receive_feof = tls_feof;
2092 receive_ferror = tls_ferror;
2093 receive_smtp_buffered = tls_smtp_buffered;
2094
2095 tls_in.active = fileno(smtp_out);
2096 return OK;
2097 }
2098
2099
2100
2101
2102 static int
2103 tls_client_basic_ctx_init(SSL_CTX * ctx,
2104 host_item * host, smtp_transport_options_block * ob, tls_ext_ctx_cb * cbinfo,
2105 uschar ** errstr)
2106 {
2107 int rc;
2108 /* stick to the old behaviour for compatibility if tls_verify_certificates is
2109 set but both tls_verify_hosts and tls_try_verify_hosts is not set. Check only
2110 the specified host patterns if one of them is defined */
2111
2112 if ( ( !ob->tls_verify_hosts
2113 && (!ob->tls_try_verify_hosts || !*ob->tls_try_verify_hosts)
2114 )
2115 || (verify_check_given_host(&ob->tls_verify_hosts, host) == OK)
2116 )
2117 client_verify_optional = FALSE;
2118 else if (verify_check_given_host(&ob->tls_try_verify_hosts, host) == OK)
2119 client_verify_optional = TRUE;
2120 else
2121 return OK;
2122
2123 if ((rc = setup_certs(ctx, ob->tls_verify_certificates,
2124 ob->tls_crl, host, client_verify_optional, verify_callback_client,
2125 errstr)) != OK)
2126 return rc;
2127
2128 if (verify_check_given_host(&ob->tls_verify_cert_hostnames, host) == OK)
2129 {
2130 cbinfo->verify_cert_hostnames =
2131 #ifdef SUPPORT_I18N
2132 string_domain_utf8_to_alabel(host->name, NULL);
2133 #else
2134 host->name;
2135 #endif
2136 DEBUG(D_tls) debug_printf("Cert hostname to check: \"%s\"\n",
2137 cbinfo->verify_cert_hostnames);
2138 }
2139 return OK;
2140 }
2141
2142
2143 #ifdef EXPERIMENTAL_DANE
2144 static int
2145 dane_tlsa_load(SSL * ssl, host_item * host, dns_answer * dnsa, uschar ** errstr)
2146 {
2147 dns_record * rr;
2148 dns_scan dnss;
2149 const char * hostnames[2] = { CS host->name, NULL };
2150 int found = 0;
2151
2152 if (DANESSL_init(ssl, NULL, hostnames) != 1)
2153 return tls_error(US"hostnames load", host, NULL, errstr);
2154
2155 for (rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS);
2156 rr;
2157 rr = dns_next_rr(dnsa, &dnss, RESET_NEXT)
2158 ) if (rr->type == T_TLSA)
2159 {
2160 const uschar * p = rr->data;
2161 uint8_t usage, selector, mtype;
2162 const char * mdname;
2163
2164 usage = *p++;
2165
2166 /* Only DANE-TA(2) and DANE-EE(3) are supported */
2167 if (usage != 2 && usage != 3) continue;
2168
2169 selector = *p++;
2170 mtype = *p++;
2171
2172 switch (mtype)
2173 {
2174 default: continue; /* Only match-types 0, 1, 2 are supported */
2175 case 0: mdname = NULL; break;
2176 case 1: mdname = "sha256"; break;
2177 case 2: mdname = "sha512"; break;
2178 }
2179
2180 found++;
2181 switch (DANESSL_add_tlsa(ssl, usage, selector, mdname, p, rr->size - 3))
2182 {
2183 default:
2184 return tls_error(US"tlsa load", host, NULL, errstr);
2185 case 0: /* action not taken */
2186 case 1: break;
2187 }
2188
2189 tls_out.tlsa_usage |= 1<<usage;
2190 }
2191
2192 if (found)
2193 return OK;
2194
2195 log_write(0, LOG_MAIN, "DANE error: No usable TLSA records");
2196 return DEFER;
2197 }
2198 #endif /*EXPERIMENTAL_DANE*/
2199
2200
2201
2202 /*************************************************
2203 * Start a TLS session in a client *
2204 *************************************************/
2205
2206 /* Called from the smtp transport after STARTTLS has been accepted.
2207
2208 Argument:
2209 fd the fd of the connection
2210 host connected host (for messages)
2211 addr the first address
2212 tb transport (always smtp)
2213 tlsa_dnsa tlsa lookup, if DANE, else null
2214 errstr error string pointer
2215
2216 Returns: OK on success
2217 FAIL otherwise - note that tls_error() will not give DEFER
2218 because this is not a server
2219 */
2220
2221 int
2222 tls_client_start(int fd, host_item *host, address_item *addr,
2223 transport_instance * tb,
2224 #ifdef EXPERIMENTAL_DANE
2225 dns_answer * tlsa_dnsa,
2226 #endif
2227 uschar ** errstr)
2228 {
2229 smtp_transport_options_block * ob =
2230 (smtp_transport_options_block *)tb->options_block;
2231 static uschar peerdn[256];
2232 uschar * expciphers;
2233 int rc;
2234 static uschar cipherbuf[256];
2235
2236 #ifndef DISABLE_OCSP
2237 BOOL request_ocsp = FALSE;
2238 BOOL require_ocsp = FALSE;
2239 #endif
2240
2241 #ifdef EXPERIMENTAL_DANE
2242 tls_out.tlsa_usage = 0;
2243 #endif
2244
2245 #ifndef DISABLE_OCSP
2246 {
2247 # ifdef EXPERIMENTAL_DANE
2248 if ( tlsa_dnsa
2249 && ob->hosts_request_ocsp[0] == '*'
2250 && ob->hosts_request_ocsp[1] == '\0'
2251 )
2252 {
2253 /* Unchanged from default. Use a safer one under DANE */
2254 request_ocsp = TRUE;
2255 ob->hosts_request_ocsp = US"${if or { {= {0}{$tls_out_tlsa_usage}} "
2256 " {= {4}{$tls_out_tlsa_usage}} } "
2257 " {*}{}}";
2258 }
2259 # endif
2260
2261 if ((require_ocsp =
2262 verify_check_given_host(&ob->hosts_require_ocsp, host) == OK))
2263 request_ocsp = TRUE;
2264 else
2265 # ifdef EXPERIMENTAL_DANE
2266 if (!request_ocsp)
2267 # endif
2268 request_ocsp =
2269 verify_check_given_host(&ob->hosts_request_ocsp, host) == OK;
2270 }
2271 #endif
2272
2273 rc = tls_init(&client_ctx, host, NULL,
2274 ob->tls_certificate, ob->tls_privatekey,
2275 #ifndef DISABLE_OCSP
2276 (void *)(long)request_ocsp,
2277 #endif
2278 addr, &client_static_cbinfo, errstr);
2279 if (rc != OK) return rc;
2280
2281 tls_out.certificate_verified = FALSE;
2282 client_verify_callback_called = FALSE;
2283
2284 if (!expand_check(ob->tls_require_ciphers, US"tls_require_ciphers",
2285 &expciphers, errstr))
2286 return FAIL;
2287
2288 /* In OpenSSL, cipher components are separated by hyphens. In GnuTLS, they
2289 are separated by underscores. So that I can use either form in my tests, and
2290 also for general convenience, we turn underscores into hyphens here. */
2291
2292 if (expciphers)
2293 {
2294 uschar *s = expciphers;
2295 while (*s) { if (*s == '_') *s = '-'; s++; }
2296 DEBUG(D_tls) debug_printf("required ciphers: %s\n", expciphers);
2297 if (!SSL_CTX_set_cipher_list(client_ctx, CS expciphers))
2298 return tls_error(US"SSL_CTX_set_cipher_list", host, NULL, errstr);
2299 }
2300
2301 #ifdef EXPERIMENTAL_DANE
2302 if (tlsa_dnsa)
2303 {
2304 SSL_CTX_set_verify(client_ctx,
2305 SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
2306 verify_callback_client_dane);
2307
2308 if (!DANESSL_library_init())
2309 return tls_error(US"library init", host, NULL, errstr);
2310 if (DANESSL_CTX_init(client_ctx) <= 0)
2311 return tls_error(US"context init", host, NULL, errstr);
2312 }
2313 else
2314
2315 #endif
2316
2317 if ((rc = tls_client_basic_ctx_init(client_ctx, host, ob,
2318 client_static_cbinfo, errstr)) != OK)
2319 return rc;
2320
2321 if ((client_ssl = SSL_new(client_ctx)) == NULL)
2322 return tls_error(US"SSL_new", host, NULL, errstr);
2323 SSL_set_session_id_context(client_ssl, sid_ctx, Ustrlen(sid_ctx));
2324 SSL_set_fd(client_ssl, fd);
2325 SSL_set_connect_state(client_ssl);
2326
2327 if (ob->tls_sni)
2328 {
2329 if (!expand_check(ob->tls_sni, US"tls_sni", &tls_out.sni, errstr))
2330 return FAIL;
2331 if (!tls_out.sni)
2332 {
2333 DEBUG(D_tls) debug_printf("Setting TLS SNI forced to fail, not sending\n");
2334 }
2335 else if (!Ustrlen(tls_out.sni))
2336 tls_out.sni = NULL;
2337 else
2338 {
2339 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
2340 DEBUG(D_tls) debug_printf("Setting TLS SNI \"%s\"\n", tls_out.sni);
2341 SSL_set_tlsext_host_name(client_ssl, tls_out.sni);
2342 #else
2343 log_write(0, LOG_MAIN, "SNI unusable with this OpenSSL library version; ignoring \"%s\"\n",
2344 tls_out.sni);
2345 #endif
2346 }
2347 }
2348
2349 #ifdef EXPERIMENTAL_DANE
2350 if (tlsa_dnsa)
2351 if ((rc = dane_tlsa_load(client_ssl, host, tlsa_dnsa, errstr)) != OK)
2352 return rc;
2353 #endif
2354
2355 #ifndef DISABLE_OCSP
2356 /* Request certificate status at connection-time. If the server
2357 does OCSP stapling we will get the callback (set in tls_init()) */
2358 # ifdef EXPERIMENTAL_DANE
2359 if (request_ocsp)
2360 {
2361 const uschar * s;
2362 if ( ((s = ob->hosts_require_ocsp) && Ustrstr(s, US"tls_out_tlsa_usage"))
2363 || ((s = ob->hosts_request_ocsp) && Ustrstr(s, US"tls_out_tlsa_usage"))
2364 )
2365 { /* Re-eval now $tls_out_tlsa_usage is populated. If
2366 this means we avoid the OCSP request, we wasted the setup
2367 cost in tls_init(). */
2368 require_ocsp = verify_check_given_host(&ob->hosts_require_ocsp, host) == OK;
2369 request_ocsp = require_ocsp
2370 || verify_check_given_host(&ob->hosts_request_ocsp, host) == OK;
2371 }
2372 }
2373 # endif
2374
2375 if (request_ocsp)
2376 {
2377 SSL_set_tlsext_status_type(client_ssl, TLSEXT_STATUSTYPE_ocsp);
2378 client_static_cbinfo->u_ocsp.client.verify_required = require_ocsp;
2379 tls_out.ocsp = OCSP_NOT_RESP;
2380 }
2381 #endif
2382
2383 #ifndef DISABLE_EVENT
2384 client_static_cbinfo->event_action = tb->event_action;
2385 #endif
2386
2387 /* There doesn't seem to be a built-in timeout on connection. */
2388
2389 DEBUG(D_tls) debug_printf("Calling SSL_connect\n");
2390 sigalrm_seen = FALSE;
2391 alarm(ob->command_timeout);
2392 rc = SSL_connect(client_ssl);
2393 alarm(0);
2394
2395 #ifdef EXPERIMENTAL_DANE
2396 if (tlsa_dnsa)
2397 DANESSL_cleanup(client_ssl);
2398 #endif
2399
2400 if (rc <= 0)
2401 return tls_error(US"SSL_connect", host, sigalrm_seen ? US"timed out" : NULL,
2402 errstr);
2403
2404 DEBUG(D_tls) debug_printf("SSL_connect succeeded\n");
2405
2406 peer_cert(client_ssl, &tls_out, peerdn, sizeof(peerdn));
2407
2408 construct_cipher_name(client_ssl, cipherbuf, sizeof(cipherbuf), &tls_out.bits);
2409 tls_out.cipher = cipherbuf;
2410
2411 /* Record the certificate we presented */
2412 {
2413 X509 * crt = SSL_get_certificate(client_ssl);
2414 tls_out.ourcert = crt ? X509_dup(crt) : NULL;
2415 }
2416
2417 tls_out.active = fd;
2418 return OK;
2419 }
2420
2421
2422
2423
2424
2425 static BOOL
2426 tls_refill(unsigned lim)
2427 {
2428 int error;
2429 int inbytes;
2430
2431 DEBUG(D_tls) debug_printf("Calling SSL_read(%p, %p, %u)\n", server_ssl,
2432 ssl_xfer_buffer, ssl_xfer_buffer_size);
2433
2434 if (smtp_receive_timeout > 0) alarm(smtp_receive_timeout);
2435 inbytes = SSL_read(server_ssl, CS ssl_xfer_buffer,
2436 MIN(ssl_xfer_buffer_size, lim));
2437 error = SSL_get_error(server_ssl, inbytes);
2438 alarm(0);
2439
2440 /* SSL_ERROR_ZERO_RETURN appears to mean that the SSL session has been
2441 closed down, not that the socket itself has been closed down. Revert to
2442 non-SSL handling. */
2443
2444 if (error == SSL_ERROR_ZERO_RETURN)
2445 {
2446 DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
2447
2448 receive_getc = smtp_getc;
2449 receive_getbuf = smtp_getbuf;
2450 receive_get_cache = smtp_get_cache;
2451 receive_ungetc = smtp_ungetc;
2452 receive_feof = smtp_feof;
2453 receive_ferror = smtp_ferror;
2454 receive_smtp_buffered = smtp_buffered;
2455
2456 SSL_free(server_ssl);
2457 server_ssl = NULL;
2458 tls_in.active = -1;
2459 tls_in.bits = 0;
2460 tls_in.cipher = NULL;
2461 tls_in.peerdn = NULL;
2462 tls_in.sni = NULL;
2463
2464 return FALSE;
2465 }
2466
2467 /* Handle genuine errors */
2468
2469 else if (error == SSL_ERROR_SSL)
2470 {
2471 ERR_error_string(ERR_get_error(), ssl_errstring);
2472 log_write(0, LOG_MAIN, "TLS error (SSL_read): %s", ssl_errstring);
2473 ssl_xfer_error = 1;
2474 return FALSE;
2475 }
2476
2477 else if (error != SSL_ERROR_NONE)
2478 {
2479 DEBUG(D_tls) debug_printf("Got SSL error %d\n", error);
2480 ssl_xfer_error = 1;
2481 return FALSE;
2482 }
2483
2484 #ifndef DISABLE_DKIM
2485 dkim_exim_verify_feed(ssl_xfer_buffer, inbytes);
2486 #endif
2487 ssl_xfer_buffer_hwm = inbytes;
2488 ssl_xfer_buffer_lwm = 0;
2489 return TRUE;
2490 }
2491
2492
2493 /*************************************************
2494 * TLS version of getc *
2495 *************************************************/
2496
2497 /* This gets the next byte from the TLS input buffer. If the buffer is empty,
2498 it refills the buffer via the SSL reading function.
2499
2500 Arguments: lim Maximum amount to read/buffer
2501 Returns: the next character or EOF
2502
2503 Only used by the server-side TLS.
2504 */
2505
2506 int
2507 tls_getc(unsigned lim)
2508 {
2509 if (ssl_xfer_buffer_lwm >= ssl_xfer_buffer_hwm)
2510 if (!tls_refill(lim))
2511 return ssl_xfer_error ? EOF : smtp_getc(lim);
2512
2513 /* Something in the buffer; return next uschar */
2514
2515 return ssl_xfer_buffer[ssl_xfer_buffer_lwm++];
2516 }
2517
2518 uschar *
2519 tls_getbuf(unsigned * len)
2520 {
2521 unsigned size;
2522 uschar * buf;
2523
2524 if (ssl_xfer_buffer_lwm >= ssl_xfer_buffer_hwm)
2525 if (!tls_refill(*len))
2526 {
2527 if (!ssl_xfer_error) return smtp_getbuf(len);
2528 *len = 0;
2529 return NULL;
2530 }
2531
2532 if ((size = ssl_xfer_buffer_hwm - ssl_xfer_buffer_lwm) > *len)
2533 size = *len;
2534 buf = &ssl_xfer_buffer[ssl_xfer_buffer_lwm];
2535 ssl_xfer_buffer_lwm += size;
2536 *len = size;
2537 return buf;
2538 }
2539
2540
2541 void
2542 tls_get_cache()
2543 {
2544 #ifndef DISABLE_DKIM
2545 int n = ssl_xfer_buffer_hwm - ssl_xfer_buffer_lwm;
2546 if (n > 0)
2547 dkim_exim_verify_feed(ssl_xfer_buffer+ssl_xfer_buffer_lwm, n);
2548 #endif
2549 }
2550
2551
2552 BOOL
2553 tls_could_read(void)
2554 {
2555 return ssl_xfer_buffer_lwm < ssl_xfer_buffer_hwm || SSL_pending(server_ssl) > 0;
2556 }
2557
2558
2559 /*************************************************
2560 * Read bytes from TLS channel *
2561 *************************************************/
2562
2563 /*
2564 Arguments:
2565 buff buffer of data
2566 len size of buffer
2567
2568 Returns: the number of bytes read
2569 -1 after a failed read
2570
2571 Only used by the client-side TLS.
2572 */
2573
2574 int
2575 tls_read(BOOL is_server, uschar *buff, size_t len)
2576 {
2577 SSL *ssl = is_server ? server_ssl : client_ssl;
2578 int inbytes;
2579 int error;
2580
2581 DEBUG(D_tls) debug_printf("Calling SSL_read(%p, %p, %u)\n", ssl,
2582 buff, (unsigned int)len);
2583
2584 inbytes = SSL_read(ssl, CS buff, len);
2585 error = SSL_get_error(ssl, inbytes);
2586
2587 if (error == SSL_ERROR_ZERO_RETURN)
2588 {
2589 DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
2590 return -1;
2591 }
2592 else if (error != SSL_ERROR_NONE)
2593 return -1;
2594
2595 return inbytes;
2596 }
2597
2598
2599
2600
2601
2602 /*************************************************
2603 * Write bytes down TLS channel *
2604 *************************************************/
2605
2606 /*
2607 Arguments:
2608 is_server channel specifier
2609 buff buffer of data
2610 len number of bytes
2611 more further data expected soon
2612
2613 Returns: the number of bytes after a successful write,
2614 -1 after a failed write
2615
2616 Used by both server-side and client-side TLS.
2617 */
2618
2619 int
2620 tls_write(BOOL is_server, const uschar *buff, size_t len, BOOL more)
2621 {
2622 int outbytes, error, left;
2623 SSL *ssl = is_server ? server_ssl : client_ssl;
2624 static gstring * corked = NULL;
2625
2626 DEBUG(D_tls) debug_printf("%s(%p, %lu%s)\n", __FUNCTION__,
2627 buff, (unsigned long)len, more ? ", more" : "");
2628
2629 /* Lacking a CORK or MSG_MORE facility (such as GnuTLS has) we copy data when
2630 "more" is notified. This hack is only ok if small amounts are involved AND only
2631 one stream does it, in one context (i.e. no store reset). Currently it is used
2632 for the responses to the received SMTP MAIL , RCPT, DATA sequence, only. */
2633
2634 if (is_server && (more || corked))
2635 {
2636 corked = string_catn(corked, buff, len);
2637 if (more)
2638 return len;
2639 buff = CUS corked->s;
2640 len = corked->ptr;
2641 corked = NULL;
2642 }
2643
2644 for (left = len; left > 0;)
2645 {
2646 DEBUG(D_tls) debug_printf("SSL_write(SSL, %p, %d)\n", buff, left);
2647 outbytes = SSL_write(ssl, CS buff, left);
2648 error = SSL_get_error(ssl, outbytes);
2649 DEBUG(D_tls) debug_printf("outbytes=%d error=%d\n", outbytes, error);
2650 switch (error)
2651 {
2652 case SSL_ERROR_SSL:
2653 ERR_error_string(ERR_get_error(), ssl_errstring);
2654 log_write(0, LOG_MAIN, "TLS error (SSL_write): %s", ssl_errstring);
2655 return -1;
2656
2657 case SSL_ERROR_NONE:
2658 left -= outbytes;
2659 buff += outbytes;
2660 break;
2661
2662 case SSL_ERROR_ZERO_RETURN:
2663 log_write(0, LOG_MAIN, "SSL channel closed on write");
2664 return -1;
2665
2666 case SSL_ERROR_SYSCALL:
2667 log_write(0, LOG_MAIN, "SSL_write: (from %s) syscall: %s",
2668 sender_fullhost ? sender_fullhost : US"<unknown>",
2669 strerror(errno));
2670 return -1;
2671
2672 default:
2673 log_write(0, LOG_MAIN, "SSL_write error %d", error);
2674 return -1;
2675 }
2676 }
2677 return len;
2678 }
2679
2680
2681
2682 /*************************************************
2683 * Close down a TLS session *
2684 *************************************************/
2685
2686 /* This is also called from within a delivery subprocess forked from the
2687 daemon, to shut down the TLS library, without actually doing a shutdown (which
2688 would tamper with the SSL session in the parent process).
2689
2690 Arguments: TRUE if SSL_shutdown is to be called
2691 Returns: nothing
2692
2693 Used by both server-side and client-side TLS.
2694 */
2695
2696 void
2697 tls_close(BOOL is_server, BOOL shutdown)
2698 {
2699 SSL **sslp = is_server ? &server_ssl : &client_ssl;
2700 int *fdp = is_server ? &tls_in.active : &tls_out.active;
2701
2702 if (*fdp < 0) return; /* TLS was not active */
2703
2704 if (shutdown)
2705 {
2706 DEBUG(D_tls) debug_printf("tls_close(): shutting down SSL\n");
2707 SSL_shutdown(*sslp);
2708 }
2709
2710 SSL_free(*sslp);
2711 *sslp = NULL;
2712
2713 *fdp = -1;
2714 }
2715
2716
2717
2718
2719 /*************************************************
2720 * Let tls_require_ciphers be checked at startup *
2721 *************************************************/
2722
2723 /* The tls_require_ciphers option, if set, must be something which the
2724 library can parse.
2725
2726 Returns: NULL on success, or error message
2727 */
2728
2729 uschar *
2730 tls_validate_require_cipher(void)
2731 {
2732 SSL_CTX *ctx;
2733 uschar *s, *expciphers, *err;
2734
2735 /* this duplicates from tls_init(), we need a better "init just global
2736 state, for no specific purpose" singleton function of our own */
2737
2738 SSL_load_error_strings();
2739 OpenSSL_add_ssl_algorithms();
2740 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
2741 /* SHA256 is becoming ever more popular. This makes sure it gets added to the
2742 list of available digests. */
2743 EVP_add_digest(EVP_sha256());
2744 #endif
2745
2746 if (!(tls_require_ciphers && *tls_require_ciphers))
2747 return NULL;
2748
2749 if (!expand_check(tls_require_ciphers, US"tls_require_ciphers", &expciphers,
2750 &err))
2751 return US"failed to expand tls_require_ciphers";
2752
2753 if (!(expciphers && *expciphers))
2754 return NULL;
2755
2756 /* normalisation ripped from above */
2757 s = expciphers;
2758 while (*s != 0) { if (*s == '_') *s = '-'; s++; }
2759
2760 err = NULL;
2761
2762 ctx = SSL_CTX_new(SSLv23_server_method());
2763 if (!ctx)
2764 {
2765 ERR_error_string(ERR_get_error(), ssl_errstring);
2766 return string_sprintf("SSL_CTX_new() failed: %s", ssl_errstring);
2767 }
2768
2769 DEBUG(D_tls)
2770 debug_printf("tls_require_ciphers expands to \"%s\"\n", expciphers);
2771
2772 if (!SSL_CTX_set_cipher_list(ctx, CS expciphers))
2773 {
2774 ERR_error_string(ERR_get_error(), ssl_errstring);
2775 err = string_sprintf("SSL_CTX_set_cipher_list(%s) failed: %s",
2776 expciphers, ssl_errstring);
2777 }
2778
2779 SSL_CTX_free(ctx);
2780
2781 return err;
2782 }
2783
2784
2785
2786
2787 /*************************************************
2788 * Report the library versions. *
2789 *************************************************/
2790
2791 /* There have historically been some issues with binary compatibility in
2792 OpenSSL libraries; if Exim (like many other applications) is built against
2793 one version of OpenSSL but the run-time linker picks up another version,
2794 it can result in serious failures, including crashing with a SIGSEGV. So
2795 report the version found by the compiler and the run-time version.
2796
2797 Note: some OS vendors backport security fixes without changing the version
2798 number/string, and the version date remains unchanged. The _build_ date
2799 will change, so we can more usefully assist with version diagnosis by also
2800 reporting the build date.
2801
2802 Arguments: a FILE* to print the results to
2803 Returns: nothing
2804 */
2805
2806 void
2807 tls_version_report(FILE *f)
2808 {
2809 fprintf(f, "Library version: OpenSSL: Compile: %s\n"
2810 " Runtime: %s\n"
2811 " : %s\n",
2812 OPENSSL_VERSION_TEXT,
2813 SSLeay_version(SSLEAY_VERSION),
2814 SSLeay_version(SSLEAY_BUILT_ON));
2815 /* third line is 38 characters for the %s and the line is 73 chars long;
2816 the OpenSSL output includes a "built on: " prefix already. */
2817 }
2818
2819
2820
2821
2822 /*************************************************
2823 * Random number generation *
2824 *************************************************/
2825
2826 /* Pseudo-random number generation. The result is not expected to be
2827 cryptographically strong but not so weak that someone will shoot themselves
2828 in the foot using it as a nonce in input in some email header scheme or
2829 whatever weirdness they'll twist this into. The result should handle fork()
2830 and avoid repeating sequences. OpenSSL handles that for us.
2831
2832 Arguments:
2833 max range maximum
2834 Returns a random number in range [0, max-1]
2835 */
2836
2837 int
2838 vaguely_random_number(int max)
2839 {
2840 unsigned int r;
2841 int i, needed_len;
2842 static pid_t pidlast = 0;
2843 pid_t pidnow;
2844 uschar *p;
2845 uschar smallbuf[sizeof(r)];
2846
2847 if (max <= 1)
2848 return 0;
2849
2850 pidnow = getpid();
2851 if (pidnow != pidlast)
2852 {
2853 /* Although OpenSSL documents that "OpenSSL makes sure that the PRNG state
2854 is unique for each thread", this doesn't apparently apply across processes,
2855 so our own warning from vaguely_random_number_fallback() applies here too.
2856 Fix per PostgreSQL. */
2857 if (pidlast != 0)
2858 RAND_cleanup();
2859 pidlast = pidnow;
2860 }
2861
2862 /* OpenSSL auto-seeds from /dev/random, etc, but this a double-check. */
2863 if (!RAND_status())
2864 {
2865 randstuff r;
2866 gettimeofday(&r.tv, NULL);
2867 r.p = getpid();
2868
2869 RAND_seed(US (&r), sizeof(r));
2870 }
2871 /* We're after pseudo-random, not random; if we still don't have enough data
2872 in the internal PRNG then our options are limited. We could sleep and hope
2873 for entropy to come along (prayer technique) but if the system is so depleted
2874 in the first place then something is likely to just keep taking it. Instead,
2875 we'll just take whatever little bit of pseudo-random we can still manage to
2876 get. */
2877
2878 needed_len = sizeof(r);
2879 /* Don't take 8 times more entropy than needed if int is 8 octets and we were
2880 asked for a number less than 10. */
2881 for (r = max, i = 0; r; ++i)
2882 r >>= 1;
2883 i = (i + 7) / 8;
2884 if (i < needed_len)
2885 needed_len = i;
2886
2887 #ifdef EXIM_HAVE_RAND_PSEUDO
2888 /* We do not care if crypto-strong */
2889 i = RAND_pseudo_bytes(smallbuf, needed_len);
2890 #else
2891 i = RAND_bytes(smallbuf, needed_len);
2892 #endif
2893
2894 if (i < 0)
2895 {
2896 DEBUG(D_all)
2897 debug_printf("OpenSSL RAND_pseudo_bytes() not supported by RAND method, using fallback.\n");
2898 return vaguely_random_number_fallback(max);
2899 }
2900
2901 r = 0;
2902 for (p = smallbuf; needed_len; --needed_len, ++p)
2903 {
2904 r *= 256;
2905 r += *p;
2906 }
2907
2908 /* We don't particularly care about weighted results; if someone wants
2909 smooth distribution and cares enough then they should submit a patch then. */
2910 return r % max;
2911 }
2912
2913
2914
2915
2916 /*************************************************
2917 * OpenSSL option parse *
2918 *************************************************/
2919
2920 /* Parse one option for tls_openssl_options_parse below
2921
2922 Arguments:
2923 name one option name
2924 value place to store a value for it
2925 Returns success or failure in parsing
2926 */
2927
2928 struct exim_openssl_option {
2929 uschar *name;
2930 long value;
2931 };
2932 /* We could use a macro to expand, but we need the ifdef and not all the
2933 options document which version they were introduced in. Policylet: include
2934 all options unless explicitly for DTLS, let the administrator choose which
2935 to apply.
2936
2937 This list is current as of:
2938 ==> 1.0.1b <==
2939 Plus SSL_OP_SAFARI_ECDHE_ECDSA_BUG from 2013-June patch/discussion on openssl-dev
2940 */
2941 static struct exim_openssl_option exim_openssl_options[] = {
2942 /* KEEP SORTED ALPHABETICALLY! */
2943 #ifdef SSL_OP_ALL
2944 { US"all", SSL_OP_ALL },
2945 #endif
2946 #ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
2947 { US"allow_unsafe_legacy_renegotiation", SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION },
2948 #endif
2949 #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
2950 { US"cipher_server_preference", SSL_OP_CIPHER_SERVER_PREFERENCE },
2951 #endif
2952 #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
2953 { US"dont_insert_empty_fragments", SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS },
2954 #endif
2955 #ifdef SSL_OP_EPHEMERAL_RSA
2956 { US"ephemeral_rsa", SSL_OP_EPHEMERAL_RSA },
2957 #endif
2958 #ifdef SSL_OP_LEGACY_SERVER_CONNECT
2959 { US"legacy_server_connect", SSL_OP_LEGACY_SERVER_CONNECT },
2960 #endif
2961 #ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
2962 { US"microsoft_big_sslv3_buffer", SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER },
2963 #endif
2964 #ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
2965 { US"microsoft_sess_id_bug", SSL_OP_MICROSOFT_SESS_ID_BUG },
2966 #endif
2967 #ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
2968 { US"msie_sslv2_rsa_padding", SSL_OP_MSIE_SSLV2_RSA_PADDING },
2969 #endif
2970 #ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
2971 { US"netscape_challenge_bug", SSL_OP_NETSCAPE_CHALLENGE_BUG },
2972 #endif
2973 #ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
2974 { US"netscape_reuse_cipher_change_bug", SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG },
2975 #endif
2976 #ifdef SSL_OP_NO_COMPRESSION
2977 { US"no_compression", SSL_OP_NO_COMPRESSION },
2978 #endif
2979 #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
2980 { US"no_session_resumption_on_renegotiation", SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION },
2981 #endif
2982 #ifdef SSL_OP_NO_SSLv2
2983 { US"no_sslv2", SSL_OP_NO_SSLv2 },
2984 #endif
2985 #ifdef SSL_OP_NO_SSLv3
2986 { US"no_sslv3", SSL_OP_NO_SSLv3 },
2987 #endif
2988 #ifdef SSL_OP_NO_TICKET
2989 { US"no_ticket", SSL_OP_NO_TICKET },
2990 #endif
2991 #ifdef SSL_OP_NO_TLSv1
2992 { US"no_tlsv1", SSL_OP_NO_TLSv1 },
2993 #endif
2994 #ifdef SSL_OP_NO_TLSv1_1
2995 #if SSL_OP_NO_TLSv1_1 == 0x00000400L
2996 /* Error in chosen value in 1.0.1a; see first item in CHANGES for 1.0.1b */
2997 #warning OpenSSL 1.0.1a uses a bad value for SSL_OP_NO_TLSv1_1, ignoring
2998 #else
2999 { US"no_tlsv1_1", SSL_OP_NO_TLSv1_1 },
3000 #endif
3001 #endif
3002 #ifdef SSL_OP_NO_TLSv1_2
3003 { US"no_tlsv1_2", SSL_OP_NO_TLSv1_2 },
3004 #endif
3005 #ifdef SSL_OP_SAFARI_ECDHE_ECDSA_BUG
3006 { US"safari_ecdhe_ecdsa_bug", SSL_OP_SAFARI_ECDHE_ECDSA_BUG },
3007 #endif
3008 #ifdef SSL_OP_SINGLE_DH_USE
3009 { US"single_dh_use", SSL_OP_SINGLE_DH_USE },
3010 #endif
3011 #ifdef SSL_OP_SINGLE_ECDH_USE
3012 { US"single_ecdh_use", SSL_OP_SINGLE_ECDH_USE },
3013 #endif
3014 #ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
3015 { US"ssleay_080_client_dh_bug", SSL_OP_SSLEAY_080_CLIENT_DH_BUG },
3016 #endif
3017 #ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
3018 { US"sslref2_reuse_cert_type_bug", SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG },
3019 #endif
3020 #ifdef SSL_OP_TLS_BLOCK_PADDING_BUG
3021 { US"tls_block_padding_bug", SSL_OP_TLS_BLOCK_PADDING_BUG },
3022 #endif
3023 #ifdef SSL_OP_TLS_D5_BUG
3024 { US"tls_d5_bug", SSL_OP_TLS_D5_BUG },
3025 #endif
3026 #ifdef SSL_OP_TLS_ROLLBACK_BUG
3027 { US"tls_rollback_bug", SSL_OP_TLS_ROLLBACK_BUG },
3028 #endif
3029 };
3030 static int exim_openssl_options_size =
3031 sizeof(exim_openssl_options)/sizeof(struct exim_openssl_option);
3032
3033
3034 static BOOL
3035 tls_openssl_one_option_parse(uschar *name, long *value)
3036 {
3037 int first = 0;
3038 int last = exim_openssl_options_size;
3039 while (last > first)
3040 {
3041 int middle = (first + last)/2;
3042 int c = Ustrcmp(name, exim_openssl_options[middle].name);
3043 if (c == 0)
3044 {
3045 *value = exim_openssl_options[middle].value;
3046 return TRUE;
3047 }
3048 else if (c > 0)
3049 first = middle + 1;
3050 else
3051 last = middle;
3052 }
3053 return FALSE;
3054 }
3055
3056
3057
3058
3059 /*************************************************
3060 * OpenSSL option parsing logic *
3061 *************************************************/
3062
3063 /* OpenSSL has a number of compatibility options which an administrator might
3064 reasonably wish to set. Interpret a list similarly to decode_bits(), so that
3065 we look like log_selector.
3066
3067 Arguments:
3068 option_spec the administrator-supplied string of options
3069 results ptr to long storage for the options bitmap
3070 Returns success or failure
3071 */
3072
3073 BOOL
3074 tls_openssl_options_parse(uschar *option_spec, long *results)
3075 {
3076 long result, item;
3077 uschar *s, *end;
3078 uschar keep_c;
3079 BOOL adding, item_parsed;
3080
3081 result = SSL_OP_NO_TICKET;
3082 /* Prior to 4.80 we or'd in SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; removed
3083 * from default because it increases BEAST susceptibility. */
3084 #ifdef SSL_OP_NO_SSLv2
3085 result |= SSL_OP_NO_SSLv2;
3086 #endif
3087 #ifdef SSL_OP_SINGLE_DH_USE
3088 result |= SSL_OP_SINGLE_DH_USE;
3089 #endif
3090
3091 if (!option_spec)
3092 {
3093 *results = result;
3094 return TRUE;
3095 }
3096
3097 for (s=option_spec; *s != '\0'; /**/)
3098 {
3099 while (isspace(*s)) ++s;
3100 if (*s == '\0')
3101 break;
3102 if (*s != '+' && *s != '-')
3103 {
3104 DEBUG(D_tls) debug_printf("malformed openssl option setting: "
3105 "+ or - expected but found \"%s\"\n", s);
3106 return FALSE;
3107 }
3108 adding = *s++ == '+';
3109 for (end = s; (*end != '\0') && !isspace(*end); ++end) /**/ ;
3110 keep_c = *end;
3111 *end = '\0';
3112 item_parsed = tls_openssl_one_option_parse(s, &item);
3113 *end = keep_c;
3114 if (!item_parsed)
3115 {
3116 DEBUG(D_tls) debug_printf("openssl option setting unrecognised: \"%s\"\n", s);
3117 return FALSE;
3118 }
3119 DEBUG(D_tls) debug_printf("openssl option, %s from %lx: %lx (%s)\n",
3120 adding ? "adding" : "removing", result, item, s);
3121 if (adding)
3122 result |= item;
3123 else
3124 result &= ~item;
3125 s = end;
3126 }
3127
3128 *results = result;
3129 return TRUE;
3130 }
3131
3132 /* vi: aw ai sw=2
3133 */
3134 /* End of tls-openssl.c */