tidying
[exim.git] / src / src / tls-openssl.c
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) University of Cambridge 1995 - 2019 */
6 /* Copyright (c) The Exim Maintainers 2020 */
7 /* See the file NOTICE for conditions of use and distribution. */
8
9 /* Portions Copyright (c) The OpenSSL Project 1999 */
10
11 /* This module provides the TLS (aka SSL) support for Exim using the OpenSSL
12 library. It is #included into the tls.c file when that library is used. The
13 code herein is based on a patch that was originally contributed by Steve
14 Haslam. It was adapted from stunnel, a GPL program by Michal Trojnara.
15
16 No cryptographic code is included in Exim. All this module does is to call
17 functions from the OpenSSL library. */
18
19
20 /* Heading stuff */
21
22 #include <openssl/lhash.h>
23 #include <openssl/ssl.h>
24 #include <openssl/err.h>
25 #include <openssl/rand.h>
26 #ifndef OPENSSL_NO_ECDH
27 # include <openssl/ec.h>
28 #endif
29 #ifndef DISABLE_OCSP
30 # include <openssl/ocsp.h>
31 #endif
32 #ifdef SUPPORT_DANE
33 # include "danessl.h"
34 #endif
35
36
37 #ifndef DISABLE_OCSP
38 # define EXIM_OCSP_SKEW_SECONDS (300L)
39 # define EXIM_OCSP_MAX_AGE (-1L)
40 #endif
41
42 #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT)
43 # define EXIM_HAVE_OPENSSL_TLSEXT
44 #endif
45 #if OPENSSL_VERSION_NUMBER >= 0x00908000L
46 # define EXIM_HAVE_RSA_GENKEY_EX
47 #endif
48 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
49 # define EXIM_HAVE_OCSP_RESP_COUNT
50 # define OPENSSL_AUTO_SHA256
51 # define EXIM_HAVE_ALPN
52 #else
53 # define EXIM_HAVE_EPHEM_RSA_KEX
54 # define EXIM_HAVE_RAND_PSEUDO
55 #endif
56 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
57 # define EXIM_HAVE_SHA256
58 #endif
59
60 /* X509_check_host provides sane certificate hostname checking, but was added
61 to OpenSSL late, after other projects forked off the code-base.  So in
62 addition to guarding against the base version number, beware that LibreSSL
63 does not (at this time) support this function.
64
65 If LibreSSL gains a different API, perhaps via libtls, then we'll probably
66 opt to disentangle and ask a LibreSSL user to provide glue for a third
67 crypto provider for libtls instead of continuing to tie the OpenSSL glue
68 into even twistier knots.  If LibreSSL gains the same API, we can just
69 change this guard and punt the issue for a while longer. */
70
71 #ifndef LIBRESSL_VERSION_NUMBER
72 # if OPENSSL_VERSION_NUMBER >= 0x010100000L
73 #  define EXIM_HAVE_OPENSSL_CHECKHOST
74 #  define EXIM_HAVE_OPENSSL_DH_BITS
75 #  define EXIM_HAVE_OPENSSL_TLS_METHOD
76 #  define EXIM_HAVE_OPENSSL_KEYLOG
77 #  define EXIM_HAVE_OPENSSL_CIPHER_GET_ID
78 #  define EXIM_HAVE_SESSION_TICKET
79 #  define EXIM_HAVE_OPESSL_TRACE
80 #  define EXIM_HAVE_OPESSL_GET0_SERIAL
81 #  ifndef DISABLE_OCSP
82 #   define EXIM_HAVE_OCSP
83 #  endif
84 # else
85 #  define EXIM_NEED_OPENSSL_INIT
86 # endif
87 # if OPENSSL_VERSION_NUMBER >= 0x010000000L \
88     && (OPENSSL_VERSION_NUMBER & 0x0000ff000L) >= 0x000002000L
89 #  define EXIM_HAVE_OPENSSL_CHECKHOST
90 # endif
91 #endif
92
93 #if !defined(LIBRESSL_VERSION_NUMBER) \
94     || LIBRESSL_VERSION_NUMBER >= 0x20010000L
95 # if !defined(OPENSSL_NO_ECDH)
96 #  if OPENSSL_VERSION_NUMBER >= 0x0090800fL
97 #   define EXIM_HAVE_ECDH
98 #  endif
99 #  if OPENSSL_VERSION_NUMBER >= 0x10002000L
100 #   define EXIM_HAVE_OPENSSL_EC_NIST2NID
101 #  endif
102 # endif
103 #endif
104
105 #ifndef LIBRESSL_VERSION_NUMBER
106 # if OPENSSL_VERSION_NUMBER >= 0x010101000L
107 #  define OPENSSL_HAVE_KEYLOG_CB
108 #  define OPENSSL_HAVE_NUM_TICKETS
109 #  define EXIM_HAVE_OPENSSL_CIPHER_STD_NAME
110 # else
111 #  define OPENSSL_BAD_SRVR_OURCERT
112 # endif
113 #endif
114
115 #if !defined(EXIM_HAVE_OPENSSL_TLSEXT) && !defined(DISABLE_OCSP)
116 # warning "OpenSSL library version too old; define DISABLE_OCSP in Makefile"
117 # define DISABLE_OCSP
118 #endif
119
120 #ifndef DISABLE_TLS_RESUME
121 # if OPENSSL_VERSION_NUMBER < 0x0101010L
122 #  error OpenSSL version too old for session-resumption
123 # endif
124 #endif
125
126 #ifdef EXIM_HAVE_OPENSSL_CHECKHOST
127 # include <openssl/x509v3.h>
128 #endif
129
130 #ifndef EXIM_HAVE_OPENSSL_CIPHER_STD_NAME
131 # ifndef EXIM_HAVE_OPENSSL_CIPHER_GET_ID
132 #  define SSL_CIPHER_get_id(c) (c->id)
133 # endif
134 # ifndef MACRO_PREDEF
135 #  include "tls-cipher-stdname.c"
136 # endif
137 #endif
138
139 /*************************************************
140 *        OpenSSL option parse                    *
141 *************************************************/
142
143 typedef struct exim_openssl_option {
144   uschar *name;
145   long    value;
146 } exim_openssl_option;
147 /* We could use a macro to expand, but we need the ifdef and not all the
148 options document which version they were introduced in.  Policylet: include
149 all options unless explicitly for DTLS, let the administrator choose which
150 to apply.
151
152 This list is current as of:
153   ==>  1.1.1c  <==
154
155 XXX could we autobuild this list, as with predefined-macros?
156 Seems just parsing ssl.h for SSL_OP_.* would be enough (except to exclude DTLS).
157 Also allow a numeric literal?
158 */
159 static exim_openssl_option exim_openssl_options[] = {
160 /* KEEP SORTED ALPHABETICALLY! */
161 #ifdef SSL_OP_ALL
162   { US"all", (long) SSL_OP_ALL },
163 #endif
164 #ifdef SSL_OP_ALLOW_NO_DHE_KEX
165   { US"allow_no_dhe_kex", SSL_OP_ALLOW_NO_DHE_KEX },
166 #endif
167 #ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
168   { US"allow_unsafe_legacy_renegotiation", SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION },
169 #endif
170 #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
171   { US"cipher_server_preference", SSL_OP_CIPHER_SERVER_PREFERENCE },
172 #endif
173 #ifdef SSL_OP_CRYPTOPRO_TLSEXT_BUG
174   { US"cryptopro_tlsext_bug", SSL_OP_CRYPTOPRO_TLSEXT_BUG },
175 #endif
176 #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
177   { US"dont_insert_empty_fragments", SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS },
178 #endif
179 #ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT
180   { US"enable_middlebox_compat", SSL_OP_ENABLE_MIDDLEBOX_COMPAT },
181 #endif
182 #ifdef SSL_OP_EPHEMERAL_RSA
183   { US"ephemeral_rsa", SSL_OP_EPHEMERAL_RSA },
184 #endif
185 #ifdef SSL_OP_LEGACY_SERVER_CONNECT
186   { US"legacy_server_connect", SSL_OP_LEGACY_SERVER_CONNECT },
187 #endif
188 #ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
189   { US"microsoft_big_sslv3_buffer", SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER },
190 #endif
191 #ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
192   { US"microsoft_sess_id_bug", SSL_OP_MICROSOFT_SESS_ID_BUG },
193 #endif
194 #ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
195   { US"msie_sslv2_rsa_padding", SSL_OP_MSIE_SSLV2_RSA_PADDING },
196 #endif
197 #ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
198   { US"netscape_challenge_bug", SSL_OP_NETSCAPE_CHALLENGE_BUG },
199 #endif
200 #ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
201   { US"netscape_reuse_cipher_change_bug", SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG },
202 #endif
203 #ifdef SSL_OP_NO_ANTI_REPLAY
204   { US"no_anti_replay", SSL_OP_NO_ANTI_REPLAY },
205 #endif
206 #ifdef SSL_OP_NO_COMPRESSION
207   { US"no_compression", SSL_OP_NO_COMPRESSION },
208 #endif
209 #ifdef SSL_OP_NO_ENCRYPT_THEN_MAC
210   { US"no_encrypt_then_mac", SSL_OP_NO_ENCRYPT_THEN_MAC },
211 #endif
212 #ifdef SSL_OP_NO_RENEGOTIATION
213   { US"no_renegotiation", SSL_OP_NO_RENEGOTIATION },
214 #endif
215 #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
216   { US"no_session_resumption_on_renegotiation", SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION },
217 #endif
218 #ifdef SSL_OP_NO_SSLv2
219   { US"no_sslv2", SSL_OP_NO_SSLv2 },
220 #endif
221 #ifdef SSL_OP_NO_SSLv3
222   { US"no_sslv3", SSL_OP_NO_SSLv3 },
223 #endif
224 #ifdef SSL_OP_NO_TICKET
225   { US"no_ticket", SSL_OP_NO_TICKET },
226 #endif
227 #ifdef SSL_OP_NO_TLSv1
228   { US"no_tlsv1", SSL_OP_NO_TLSv1 },
229 #endif
230 #ifdef SSL_OP_NO_TLSv1_1
231 # if SSL_OP_NO_TLSv1_1 == 0x00000400L
232   /* Error in chosen value in 1.0.1a; see first item in CHANGES for 1.0.1b */
233 #  warning OpenSSL 1.0.1a uses a bad value for SSL_OP_NO_TLSv1_1, ignoring
234 # else
235   { US"no_tlsv1_1", SSL_OP_NO_TLSv1_1 },
236 # endif
237 #endif
238 #ifdef SSL_OP_NO_TLSv1_2
239   { US"no_tlsv1_2", SSL_OP_NO_TLSv1_2 },
240 #endif
241 #ifdef SSL_OP_NO_TLSv1_3
242   { US"no_tlsv1_3", SSL_OP_NO_TLSv1_3 },
243 #endif
244 #ifdef SSL_OP_PRIORITIZE_CHACHA
245   { US"prioritize_chacha", SSL_OP_PRIORITIZE_CHACHA },
246 #endif
247 #ifdef SSL_OP_SAFARI_ECDHE_ECDSA_BUG
248   { US"safari_ecdhe_ecdsa_bug", SSL_OP_SAFARI_ECDHE_ECDSA_BUG },
249 #endif
250 #ifdef SSL_OP_SINGLE_DH_USE
251   { US"single_dh_use", SSL_OP_SINGLE_DH_USE },
252 #endif
253 #ifdef SSL_OP_SINGLE_ECDH_USE
254   { US"single_ecdh_use", SSL_OP_SINGLE_ECDH_USE },
255 #endif
256 #ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
257   { US"ssleay_080_client_dh_bug", SSL_OP_SSLEAY_080_CLIENT_DH_BUG },
258 #endif
259 #ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
260   { US"sslref2_reuse_cert_type_bug", SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG },
261 #endif
262 #ifdef SSL_OP_TLS_BLOCK_PADDING_BUG
263   { US"tls_block_padding_bug", SSL_OP_TLS_BLOCK_PADDING_BUG },
264 #endif
265 #ifdef SSL_OP_TLS_D5_BUG
266   { US"tls_d5_bug", SSL_OP_TLS_D5_BUG },
267 #endif
268 #ifdef SSL_OP_TLS_ROLLBACK_BUG
269   { US"tls_rollback_bug", SSL_OP_TLS_ROLLBACK_BUG },
270 #endif
271 #ifdef SSL_OP_TLSEXT_PADDING
272   { US"tlsext_padding", SSL_OP_TLSEXT_PADDING },
273 #endif
274 };
275
276 #ifndef MACRO_PREDEF
277 static int exim_openssl_options_size = nelem(exim_openssl_options);
278 static long init_options = 0;
279 #endif
280
281 #ifdef MACRO_PREDEF
282 void
283 options_tls(void)
284 {
285 uschar buf[64];
286
287 for (struct exim_openssl_option * o = exim_openssl_options;
288      o < exim_openssl_options + nelem(exim_openssl_options); o++)
289   {
290   /* Trailing X is workaround for problem with _OPT_OPENSSL_NO_TLSV1
291   being a ".ifdef _OPT_OPENSSL_NO_TLSV1_3" match */
292
293   spf(buf, sizeof(buf), US"_OPT_OPENSSL_%T_X", o->name);
294   builtin_macro_create(buf);
295   }
296
297 # ifndef DISABLE_TLS_RESUME
298 builtin_macro_create_var(US"_RESUME_DECODE", RESUME_DECODE_STRING );
299 # endif
300 # ifdef SSL_OP_NO_TLSv1_3
301 builtin_macro_create(US"_HAVE_TLS1_3");
302 # endif
303 # ifdef OPENSSL_BAD_SRVR_OURCERT
304 builtin_macro_create(US"_TLS_BAD_MULTICERT_IN_OURCERT");
305 # endif
306 # ifdef EXIM_HAVE_OCSP
307 builtin_macro_create(US"_HAVE_TLS_OCSP");
308 builtin_macro_create(US"_HAVE_TLS_OCSP_LIST");
309 # endif
310 }
311 #else
312
313 /******************************************************************************/
314
315 /* Structure for collecting random data for seeding. */
316
317 typedef struct randstuff {
318   struct timeval tv;
319   pid_t          p;
320 } randstuff;
321
322 /* Local static variables */
323
324 static BOOL client_verify_callback_called = FALSE;
325 static BOOL server_verify_callback_called = FALSE;
326 static const uschar *sid_ctx = US"exim";
327
328 /* We have three different contexts to care about.
329
330 Simple case: client, `client_ctx`
331  As a client, we can be doing a callout or cut-through delivery while receiving
332  a message.  So we have a client context, which should have options initialised
333  from the SMTP Transport.  We may also concurrently want to make TLS connections
334  to utility daemons, so client-contexts are allocated and passed around in call
335  args rather than using a gobal.
336
337 Server:
338  There are two cases: with and without ServerNameIndication from the client.
339  Given TLS SNI, we can be using different keys, certs and various other
340  configuration settings, because they're re-expanded with $tls_sni set.  This
341  allows vhosting with TLS.  This SNI is sent in the handshake.
342  A client might not send SNI, so we need a fallback, and an initial setup too.
343  So as a server, we start out using `server_ctx`.
344  If SNI is sent by the client, then we as server, mid-negotiation, try to clone
345  `server_sni` from `server_ctx` and then initialise settings by re-expanding
346  configuration.
347 */
348
349 typedef struct {
350   SSL_CTX *     ctx;
351   SSL *         ssl;
352   gstring *     corked;
353 } exim_openssl_client_tls_ctx;
354
355
356 /* static SSL_CTX *server_ctx = NULL; */
357 /* static SSL     *server_ssl = NULL; */
358
359 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
360 static SSL_CTX *server_sni = NULL;
361 #endif
362
363 static char ssl_errstring[256];
364
365 static int  ssl_session_timeout = 7200;         /* Two hours */
366 static BOOL client_verify_optional = FALSE;
367 static BOOL server_verify_optional = FALSE;
368
369 static BOOL reexpand_tls_files_for_sni = FALSE;
370
371
372 typedef struct ocsp_resp {
373   struct ocsp_resp *    next;
374   OCSP_RESPONSE *       resp;
375 } ocsp_resplist;
376
377 typedef struct exim_openssl_state {
378   exim_tlslib_state     lib_state;
379 #define lib_ctx                 libdata0
380 #define lib_ssl                 libdata1
381
382   tls_support * tlsp;
383   uschar *      certificate;
384   uschar *      privatekey;
385   BOOL          is_server;
386 #ifndef DISABLE_OCSP
387   STACK_OF(X509) *verify_stack;         /* chain for verifying the proof */
388   union {
389     struct {
390       uschar        *file;
391       const uschar  *file_expanded;
392       ocsp_resplist *olist;
393     } server;
394     struct {
395       X509_STORE    *verify_store;      /* non-null if status requested */
396       BOOL          verify_required;
397     } client;
398   } u_ocsp;
399 #endif
400   uschar *      dhparam;
401   /* these are cached from first expand */
402   uschar *      server_cipher_list;
403   /* only passed down to tls_error: */
404   host_item *   host;
405   const uschar * verify_cert_hostnames;
406 #ifndef DISABLE_EVENT
407   uschar *      event_action;
408 #endif
409 } exim_openssl_state_st;
410
411 /* should figure out a cleanup of API to handle state preserved per
412 implementation, for various reasons, which can be void * in the APIs.
413 For now, we hack around it. */
414 exim_openssl_state_st *client_static_state = NULL;      /*XXX should not use static; multiple concurrent clients! */
415 exim_openssl_state_st state_server = {.is_server = TRUE};
416
417 static int
418 setup_certs(SSL_CTX *sctx, uschar *certs, uschar *crl, host_item *host,
419     uschar ** errstr );
420
421 /* Callbacks */
422 #ifndef DISABLE_OCSP
423 static int tls_server_stapling_cb(SSL *s, void *arg);
424 #endif
425
426
427
428 /* Daemon-called, before every connection, key create/rotate */
429 #ifndef DISABLE_TLS_RESUME
430 static void tk_init(void);
431 static int tls_exdata_idx = -1;
432 #endif
433
434 static void
435 tls_per_lib_daemon_tick(void)
436 {
437 #ifndef DISABLE_TLS_RESUME
438 tk_init();
439 #endif
440 }
441
442 /* Called once at daemon startup */
443
444 static void
445 tls_per_lib_daemon_init(void)
446 {
447 tls_daemon_creds_reload();
448 }
449
450
451 /*************************************************
452 *               Handle TLS error                 *
453 *************************************************/
454
455 /* Called from lots of places when errors occur before actually starting to do
456 the TLS handshake, that is, while the session is still in clear. Always returns
457 DEFER for a server and FAIL for a client so that most calls can use "return
458 tls_error(...)" to do this processing and then give an appropriate return. A
459 single function is used for both server and client, because it is called from
460 some shared functions.
461
462 Argument:
463   prefix    text to include in the logged error
464   host      NULL if setting up a server;
465             the connected host if setting up a client
466   msg       error message or NULL if we should ask OpenSSL
467   errstr    pointer to output error message
468
469 Returns:    OK/DEFER/FAIL
470 */
471
472 static int
473 tls_error(uschar * prefix, const host_item * host, uschar * msg, uschar ** errstr)
474 {
475 if (!msg)
476   {
477   ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
478   msg = US ssl_errstring;
479   }
480
481 msg = string_sprintf("(%s): %s", prefix, msg);
482 DEBUG(D_tls) debug_printf("TLS error '%s'\n", msg);
483 if (errstr) *errstr = msg;
484 return host ? FAIL : DEFER;
485 }
486
487
488
489 /**************************************************
490 * General library initalisation                   *
491 **************************************************/
492
493 static BOOL
494 lib_rand_init(void * addr)
495 {
496 randstuff r;
497 if (!RAND_status()) return TRUE;
498
499 gettimeofday(&r.tv, NULL);
500 r.p = getpid();
501 RAND_seed(US (&r), sizeof(r));
502 RAND_seed(US big_buffer, big_buffer_size);
503 if (addr) RAND_seed(US addr, sizeof(addr));
504
505 return RAND_status();
506 }
507
508
509 static void
510 tls_openssl_init(void)
511 {
512 static BOOL once = FALSE;
513 if (once) return;
514 once = TRUE;
515
516 #ifdef EXIM_NEED_OPENSSL_INIT
517 SSL_load_error_strings();          /* basic set up */
518 OpenSSL_add_ssl_algorithms();
519 #endif
520
521 #if defined(EXIM_HAVE_SHA256) && !defined(OPENSSL_AUTO_SHA256)
522 /* SHA256 is becoming ever more popular. This makes sure it gets added to the
523 list of available digests. */
524 EVP_add_digest(EVP_sha256());
525 #endif
526
527 (void) lib_rand_init(NULL);
528 (void) tls_openssl_options_parse(openssl_options, &init_options);
529 }
530
531
532
533 /*************************************************
534 *                Initialize for DH               *
535 *************************************************/
536
537 /* If dhparam is set, expand it, and load up the parameters for DH encryption.
538
539 Arguments:
540   sctx      The current SSL CTX (inbound or outbound)
541   dhparam   DH parameter file or fixed parameter identity string
542   host      connected host, if client; NULL if server
543   errstr    error string pointer
544
545 Returns:    TRUE if OK (nothing to set up, or setup worked)
546 */
547
548 static BOOL
549 init_dh(SSL_CTX *sctx, uschar *dhparam, const host_item *host, uschar ** errstr)
550 {
551 BIO *bio;
552 DH *dh;
553 uschar *dhexpanded;
554 const char *pem;
555 int dh_bitsize;
556
557 if (!expand_check(dhparam, US"tls_dhparam", &dhexpanded, errstr))
558   return FALSE;
559
560 if (!dhexpanded || !*dhexpanded)
561   bio = BIO_new_mem_buf(CS std_dh_prime_default(), -1);
562 else if (dhexpanded[0] == '/')
563   {
564   if (!(bio = BIO_new_file(CS dhexpanded, "r")))
565     {
566     tls_error(string_sprintf("could not read dhparams file %s", dhexpanded),
567           host, US strerror(errno), errstr);
568     return FALSE;
569     }
570   }
571 else
572   {
573   if (Ustrcmp(dhexpanded, "none") == 0)
574     {
575     DEBUG(D_tls) debug_printf("Requested no DH parameters.\n");
576     return TRUE;
577     }
578
579   if (!(pem = std_dh_prime_named(dhexpanded)))
580     {
581     tls_error(string_sprintf("Unknown standard DH prime \"%s\"", dhexpanded),
582         host, US strerror(errno), errstr);
583     return FALSE;
584     }
585   bio = BIO_new_mem_buf(CS pem, -1);
586   }
587
588 if (!(dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL)))
589   {
590   BIO_free(bio);
591   tls_error(string_sprintf("Could not read tls_dhparams \"%s\"", dhexpanded),
592       host, NULL, errstr);
593   return FALSE;
594   }
595
596 /* note: our default limit of 2236 is not a multiple of 8; the limit comes from
597  * an NSS limit, and the GnuTLS APIs handle bit-sizes fine, so we went with
598  * 2236.  But older OpenSSL can only report in bytes (octets), not bits.
599  * If someone wants to dance at the edge, then they can raise the limit or use
600  * current libraries. */
601 #ifdef EXIM_HAVE_OPENSSL_DH_BITS
602 /* Added in commit 26c79d5641d; `git describe --contains` says OpenSSL_1_1_0-pre1~1022
603  * This predates OpenSSL_1_1_0 (before a, b, ...) so is in all 1.1.0 */
604 dh_bitsize = DH_bits(dh);
605 #else
606 dh_bitsize = 8 * DH_size(dh);
607 #endif
608
609 /* Even if it is larger, we silently return success rather than cause things
610  * to fail out, so that a too-large DH will not knock out all TLS; it's a
611  * debatable choice. */
612 if (dh_bitsize > tls_dh_max_bits)
613   {
614   DEBUG(D_tls)
615     debug_printf("dhparams file %d bits, is > tls_dh_max_bits limit of %d\n",
616         dh_bitsize, tls_dh_max_bits);
617   }
618 else
619   {
620   SSL_CTX_set_tmp_dh(sctx, dh);
621   DEBUG(D_tls)
622     debug_printf("Diffie-Hellman initialized from %s with %d-bit prime\n",
623       dhexpanded ? dhexpanded : US"default", dh_bitsize);
624   }
625
626 DH_free(dh);
627 BIO_free(bio);
628
629 return TRUE;
630 }
631
632
633
634
635 /*************************************************
636 *               Initialize for ECDH              *
637 *************************************************/
638
639 /* Load parameters for ECDH encryption.
640
641 For now, we stick to NIST P-256 because: it's simple and easy to configure;
642 it avoids any patent issues that might bite redistributors; despite events in
643 the news and concerns over curve choices, we're not cryptographers, we're not
644 pretending to be, and this is "good enough" to be better than no support,
645 protecting against most adversaries.  Given another year or two, there might
646 be sufficient clarity about a "right" way forward to let us make an informed
647 decision, instead of a knee-jerk reaction.
648
649 Longer-term, we should look at supporting both various named curves and
650 external files generated with "openssl ecparam", much as we do for init_dh().
651 We should also support "none" as a value, to explicitly avoid initialisation.
652
653 Patches welcome.
654
655 Arguments:
656   sctx      The current SSL CTX (inbound or outbound)
657   host      connected host, if client; NULL if server
658   errstr    error string pointer
659
660 Returns:    TRUE if OK (nothing to set up, or setup worked)
661 */
662
663 static BOOL
664 init_ecdh(SSL_CTX * sctx, host_item * host, uschar ** errstr)
665 {
666 #ifdef OPENSSL_NO_ECDH
667 return TRUE;
668 #else
669
670 EC_KEY * ecdh;
671 uschar * exp_curve;
672 int nid;
673 BOOL rv;
674
675 if (host)       /* No ECDH setup for clients, only for servers */
676   return TRUE;
677
678 # ifndef EXIM_HAVE_ECDH
679 DEBUG(D_tls)
680   debug_printf("No OpenSSL API to define ECDH parameters, skipping\n");
681 return TRUE;
682 # else
683
684 if (!expand_check(tls_eccurve, US"tls_eccurve", &exp_curve, errstr))
685   return FALSE;
686 if (!exp_curve || !*exp_curve)
687   return TRUE;
688
689 /* "auto" needs to be handled carefully.
690  * OpenSSL <  1.0.2: we do not select anything, but fallback to prime256v1
691  * OpenSSL <  1.1.0: we have to call SSL_CTX_set_ecdh_auto
692  *                   (openssl/ssl.h defines SSL_CTRL_SET_ECDH_AUTO)
693  * OpenSSL >= 1.1.0: we do not set anything, the libray does autoselection
694  *                   https://github.com/openssl/openssl/commit/fe6ef2472db933f01b59cad82aa925736935984b
695  */
696 if (Ustrcmp(exp_curve, "auto") == 0)
697   {
698 #if OPENSSL_VERSION_NUMBER < 0x10002000L
699   DEBUG(D_tls) debug_printf(
700     "ECDH OpenSSL < 1.0.2: temp key parameter settings: overriding \"auto\" with \"prime256v1\"\n");
701   exp_curve = US"prime256v1";
702 #else
703 # if defined SSL_CTRL_SET_ECDH_AUTO
704   DEBUG(D_tls) debug_printf(
705     "ECDH OpenSSL 1.0.2+: temp key parameter settings: autoselection\n");
706   SSL_CTX_set_ecdh_auto(sctx, 1);
707   return TRUE;
708 # else
709   DEBUG(D_tls) debug_printf(
710     "ECDH OpenSSL 1.1.0+: temp key parameter settings: default selection\n");
711   return TRUE;
712 # endif
713 #endif
714   }
715
716 DEBUG(D_tls) debug_printf("ECDH: curve '%s'\n", exp_curve);
717 if (  (nid = OBJ_sn2nid       (CCS exp_curve)) == NID_undef
718 #   ifdef EXIM_HAVE_OPENSSL_EC_NIST2NID
719    && (nid = EC_curve_nist2nid(CCS exp_curve)) == NID_undef
720 #   endif
721    )
722   {
723   tls_error(string_sprintf("Unknown curve name tls_eccurve '%s'", exp_curve),
724     host, NULL, errstr);
725   return FALSE;
726   }
727
728 if (!(ecdh = EC_KEY_new_by_curve_name(nid)))
729   {
730   tls_error(US"Unable to create ec curve", host, NULL, errstr);
731   return FALSE;
732   }
733
734 /* The "tmp" in the name here refers to setting a temporary key
735 not to the stability of the interface. */
736
737 if ((rv = SSL_CTX_set_tmp_ecdh(sctx, ecdh) == 0))
738   tls_error(string_sprintf("Error enabling '%s' curve", exp_curve), host, NULL, errstr);
739 else
740   DEBUG(D_tls) debug_printf("ECDH: enabled '%s' curve\n", exp_curve);
741
742 EC_KEY_free(ecdh);
743 return !rv;
744
745 # endif /*EXIM_HAVE_ECDH*/
746 #endif /*OPENSSL_NO_ECDH*/
747 }
748
749
750
751 /*************************************************
752 *        Expand key and cert file specs          *
753 *************************************************/
754
755 /*
756 Arguments:
757   s          SSL connection (not used)
758   export     not used
759   keylength  keylength
760
761 Returns:     pointer to generated key
762 */
763
764 static RSA *
765 rsa_callback(SSL *s, int export, int keylength)
766 {
767 RSA *rsa_key;
768 #ifdef EXIM_HAVE_RSA_GENKEY_EX
769 BIGNUM *bn = BN_new();
770 #endif
771
772 DEBUG(D_tls) debug_printf("Generating %d bit RSA key...\n", keylength);
773
774 #ifdef EXIM_HAVE_RSA_GENKEY_EX
775 if (  !BN_set_word(bn, (unsigned long)RSA_F4)
776    || !(rsa_key = RSA_new())
777    || !RSA_generate_key_ex(rsa_key, keylength, bn, NULL)
778    )
779 #else
780 if (!(rsa_key = RSA_generate_key(keylength, RSA_F4, NULL, NULL)))
781 #endif
782
783   {
784   ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
785   log_write(0, LOG_MAIN|LOG_PANIC, "TLS error (RSA_generate_key): %s",
786     ssl_errstring);
787   return NULL;
788   }
789 return rsa_key;
790 }
791
792
793
794 /* Create and install a selfsigned certificate, for use in server mode */
795 /*XXX we could arrange to call this during prelo for a null tls_certificate option.
796 The normal cache inval + relo will suffice.
797 Just need a timer for inval. */
798
799 static int
800 tls_install_selfsign(SSL_CTX * sctx, uschar ** errstr)
801 {
802 X509 * x509 = NULL;
803 EVP_PKEY * pkey;
804 RSA * rsa;
805 X509_NAME * name;
806 uschar * where;
807
808 DEBUG(D_tls) debug_printf("TLS: generating selfsigned server cert\n");
809 where = US"allocating pkey";
810 if (!(pkey = EVP_PKEY_new()))
811   goto err;
812
813 where = US"allocating cert";
814 if (!(x509 = X509_new()))
815   goto err;
816
817 where = US"generating pkey";
818 if (!(rsa = rsa_callback(NULL, 0, 2048)))
819   goto err;
820
821 where = US"assigning pkey";
822 if (!EVP_PKEY_assign_RSA(pkey, rsa))
823   goto err;
824
825 X509_set_version(x509, 2);                              /* N+1 - version 3 */
826 ASN1_INTEGER_set(X509_get_serialNumber(x509), 1);
827 X509_gmtime_adj(X509_get_notBefore(x509), 0);
828 X509_gmtime_adj(X509_get_notAfter(x509), (long)2 * 60 * 60);    /* 2 hour */
829 X509_set_pubkey(x509, pkey);
830
831 name = X509_get_subject_name(x509);
832 X509_NAME_add_entry_by_txt(name, "C",
833                           MBSTRING_ASC, CUS "UK", -1, -1, 0);
834 X509_NAME_add_entry_by_txt(name, "O",
835                           MBSTRING_ASC, CUS "Exim Developers", -1, -1, 0);
836 X509_NAME_add_entry_by_txt(name, "CN",
837                           MBSTRING_ASC, CUS smtp_active_hostname, -1, -1, 0);
838 X509_set_issuer_name(x509, name);
839
840 where = US"signing cert";
841 if (!X509_sign(x509, pkey, EVP_md5()))
842   goto err;
843
844 where = US"installing selfsign cert";
845 if (!SSL_CTX_use_certificate(sctx, x509))
846   goto err;
847
848 where = US"installing selfsign key";
849 if (!SSL_CTX_use_PrivateKey(sctx, pkey))
850   goto err;
851
852 return OK;
853
854 err:
855   (void) tls_error(where, NULL, NULL, errstr);
856   if (x509) X509_free(x509);
857   if (pkey) EVP_PKEY_free(pkey);
858   return DEFER;
859 }
860
861
862
863
864
865
866
867 /*************************************************
868 *           Information callback                 *
869 *************************************************/
870
871 /* The SSL library functions call this from time to time to indicate what they
872 are doing. We copy the string to the debugging output when TLS debugging has
873 been requested.
874
875 Arguments:
876   s         the SSL connection
877   where
878   ret
879
880 Returns:    nothing
881 */
882
883 static void
884 info_callback(SSL *s, int where, int ret)
885 {
886 DEBUG(D_tls)
887   {
888   const uschar * str;
889
890   if (where & SSL_ST_CONNECT)
891      str = US"SSL_connect";
892   else if (where & SSL_ST_ACCEPT)
893      str = US"SSL_accept";
894   else
895      str = US"SSL info (undefined)";
896
897   if (where & SSL_CB_LOOP)
898      debug_printf("%s: %s\n", str, SSL_state_string_long(s));
899   else if (where & SSL_CB_ALERT)
900     debug_printf("SSL3 alert %s:%s:%s\n",
901           str = where & SSL_CB_READ ? US"read" : US"write",
902           SSL_alert_type_string_long(ret), SSL_alert_desc_string_long(ret));
903   else if (where & SSL_CB_EXIT)
904     {
905     if (ret == 0)
906       debug_printf("%s: failed in %s\n", str, SSL_state_string_long(s));
907     else if (ret < 0)
908       debug_printf("%s: error in %s\n", str, SSL_state_string_long(s));
909     }
910   else if (where & SSL_CB_HANDSHAKE_START)
911      debug_printf("%s: hshake start: %s\n", str, SSL_state_string_long(s));
912   else if (where & SSL_CB_HANDSHAKE_DONE)
913      debug_printf("%s: hshake done: %s\n", str, SSL_state_string_long(s));
914   }
915 }
916
917 #ifdef OPENSSL_HAVE_KEYLOG_CB
918 static void
919 keylog_callback(const SSL *ssl, const char *line)
920 {
921 char * filename;
922 FILE * fp;
923 DEBUG(D_tls) debug_printf("%.200s\n", line);
924 if (!(filename = getenv("SSLKEYLOGFILE"))) return;
925 if (!(fp = fopen(filename, "a"))) return;
926 fprintf(fp, "%s\n", line);
927 fclose(fp);
928 }
929 #endif
930
931
932
933
934
935 #ifndef DISABLE_EVENT
936 static int
937 verify_event(tls_support * tlsp, X509 * cert, int depth, const uschar * dn,
938   BOOL *calledp, const BOOL *optionalp, const uschar * what)
939 {
940 uschar * ev;
941 uschar * yield;
942 X509 * old_cert;
943
944 ev = tlsp == &tls_out ? client_static_state->event_action : event_action;
945 if (ev)
946   {
947   DEBUG(D_tls) debug_printf("verify_event: %s %d\n", what, depth);
948   old_cert = tlsp->peercert;
949   tlsp->peercert = X509_dup(cert);
950   /* NB we do not bother setting peerdn */
951   if ((yield = event_raise(ev, US"tls:cert", string_sprintf("%d", depth))))
952     {
953     log_write(0, LOG_MAIN, "[%s] %s verify denied by event-action: "
954                 "depth=%d cert=%s: %s",
955               tlsp == &tls_out ? deliver_host_address : sender_host_address,
956               what, depth, dn, yield);
957     *calledp = TRUE;
958     if (!*optionalp)
959       {
960       if (old_cert) tlsp->peercert = old_cert;  /* restore 1st failing cert */
961       return 1;                     /* reject (leaving peercert set) */
962       }
963     DEBUG(D_tls) debug_printf("Event-action verify failure overridden "
964       "(host in tls_try_verify_hosts)\n");
965     tlsp->verify_override = TRUE;
966     }
967   X509_free(tlsp->peercert);
968   tlsp->peercert = old_cert;
969   }
970 return 0;
971 }
972 #endif
973
974 /*************************************************
975 *        Callback for verification               *
976 *************************************************/
977
978 /* The SSL library does certificate verification if set up to do so. This
979 callback has the current yes/no state is in "state". If verification succeeded,
980 we set the certificate-verified flag. If verification failed, what happens
981 depends on whether the client is required to present a verifiable certificate
982 or not.
983
984 If verification is optional, we change the state to yes, but still log the
985 verification error. For some reason (it really would help to have proper
986 documentation of OpenSSL), this callback function then gets called again, this
987 time with state = 1.  We must take care not to set the private verified flag on
988 the second time through.
989
990 Note: this function is not called if the client fails to present a certificate
991 when asked. We get here only if a certificate has been received. Handling of
992 optional verification for this case is done when requesting SSL to verify, by
993 setting SSL_VERIFY_FAIL_IF_NO_PEER_CERT in the non-optional case.
994
995 May be called multiple times for different issues with a certificate, even
996 for a given "depth" in the certificate chain.
997
998 Arguments:
999   preverify_ok current yes/no state as 1/0
1000   x509ctx      certificate information.
1001   tlsp         per-direction (client vs. server) support data
1002   calledp      has-been-called flag
1003   optionalp    verification-is-optional flag
1004
1005 Returns:     0 if verification should fail, otherwise 1
1006 */
1007
1008 static int
1009 verify_callback(int preverify_ok, X509_STORE_CTX * x509ctx,
1010   tls_support * tlsp, BOOL * calledp, BOOL * optionalp)
1011 {
1012 X509 * cert = X509_STORE_CTX_get_current_cert(x509ctx);
1013 int depth = X509_STORE_CTX_get_error_depth(x509ctx);
1014 uschar dn[256];
1015
1016 if (!X509_NAME_oneline(X509_get_subject_name(cert), CS dn, sizeof(dn)))
1017   {
1018   DEBUG(D_tls) debug_printf("X509_NAME_oneline() error\n");
1019   log_write(0, LOG_MAIN, "[%s] SSL verify error: internal error",
1020     tlsp == &tls_out ? deliver_host_address : sender_host_address);
1021   return 0;
1022   }
1023 dn[sizeof(dn)-1] = '\0';
1024
1025 tlsp->verify_override = FALSE;
1026 if (preverify_ok == 0)
1027   {
1028   uschar * extra = verify_mode ? string_sprintf(" (during %c-verify for [%s])",
1029       *verify_mode, sender_host_address)
1030     : US"";
1031   log_write(0, LOG_MAIN, "[%s] SSL verify error%s: depth=%d error=%s cert=%s",
1032     tlsp == &tls_out ? deliver_host_address : sender_host_address,
1033     extra, depth,
1034     X509_verify_cert_error_string(X509_STORE_CTX_get_error(x509ctx)), dn);
1035   *calledp = TRUE;
1036   if (!*optionalp)
1037     {
1038     if (!tlsp->peercert)
1039       tlsp->peercert = X509_dup(cert);  /* record failing cert */
1040     return 0;                           /* reject */
1041     }
1042   DEBUG(D_tls) debug_printf("SSL verify failure overridden (host in "
1043     "tls_try_verify_hosts)\n");
1044   tlsp->verify_override = TRUE;
1045   }
1046
1047 else if (depth != 0)
1048   {
1049   DEBUG(D_tls) debug_printf("SSL verify ok: depth=%d SN=%s\n", depth, dn);
1050 #ifndef DISABLE_OCSP
1051   if (tlsp == &tls_out && client_static_state->u_ocsp.client.verify_store)
1052     {   /* client, wanting stapling  */
1053     /* Add the server cert's signing chain as the one
1054     for the verification of the OCSP stapled information. */
1055
1056     if (!X509_STORE_add_cert(client_static_state->u_ocsp.client.verify_store,
1057                              cert))
1058       ERR_clear_error();
1059     sk_X509_push(client_static_state->verify_stack, cert);
1060     }
1061 #endif
1062 #ifndef DISABLE_EVENT
1063     if (verify_event(tlsp, cert, depth, dn, calledp, optionalp, US"SSL"))
1064       return 0;                         /* reject, with peercert set */
1065 #endif
1066   }
1067 else
1068   {
1069   const uschar * verify_cert_hostnames;
1070
1071   if (  tlsp == &tls_out
1072      && ((verify_cert_hostnames = client_static_state->verify_cert_hostnames)))
1073         /* client, wanting hostname check */
1074     {
1075
1076 #ifdef EXIM_HAVE_OPENSSL_CHECKHOST
1077 # ifndef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
1078 #  define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0
1079 # endif
1080 # ifndef X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
1081 #  define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0
1082 # endif
1083     int sep = 0;
1084     const uschar * list = verify_cert_hostnames;
1085     uschar * name;
1086     int rc;
1087     while ((name = string_nextinlist(&list, &sep, NULL, 0)))
1088       if ((rc = X509_check_host(cert, CCS name, 0,
1089                   X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
1090                   | X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS,
1091                   NULL)))
1092         {
1093         if (rc < 0)
1094           {
1095           log_write(0, LOG_MAIN, "[%s] SSL verify error: internal error",
1096             tlsp == &tls_out ? deliver_host_address : sender_host_address);
1097           name = NULL;
1098           }
1099         break;
1100         }
1101     if (!name)
1102 #else
1103     if (!tls_is_name_for_cert(verify_cert_hostnames, cert))
1104 #endif
1105       {
1106       uschar * extra = verify_mode
1107         ? string_sprintf(" (during %c-verify for [%s])",
1108           *verify_mode, sender_host_address)
1109         : US"";
1110       log_write(0, LOG_MAIN,
1111         "[%s] SSL verify error%s: certificate name mismatch: DN=\"%s\" H=\"%s\"",
1112         tlsp == &tls_out ? deliver_host_address : sender_host_address,
1113         extra, dn, verify_cert_hostnames);
1114       *calledp = TRUE;
1115       if (!*optionalp)
1116         {
1117         if (!tlsp->peercert)
1118           tlsp->peercert = X509_dup(cert);      /* record failing cert */
1119         return 0;                               /* reject */
1120         }
1121       DEBUG(D_tls) debug_printf("SSL verify name failure overridden (host in "
1122         "tls_try_verify_hosts)\n");
1123       tlsp->verify_override = TRUE;
1124       }
1125     }
1126
1127 #ifndef DISABLE_EVENT
1128   if (verify_event(tlsp, cert, depth, dn, calledp, optionalp, US"SSL"))
1129     return 0;                           /* reject, with peercert set */
1130 #endif
1131
1132   DEBUG(D_tls) debug_printf("SSL%s verify ok: depth=0 SN=%s\n",
1133     *calledp ? "" : " authenticated", dn);
1134   *calledp = TRUE;
1135   }
1136
1137 return 1;   /* accept, at least for this level */
1138 }
1139
1140 static int
1141 verify_callback_client(int preverify_ok, X509_STORE_CTX *x509ctx)
1142 {
1143 return verify_callback(preverify_ok, x509ctx, &tls_out,
1144   &client_verify_callback_called, &client_verify_optional);
1145 }
1146
1147 static int
1148 verify_callback_server(int preverify_ok, X509_STORE_CTX *x509ctx)
1149 {
1150 return verify_callback(preverify_ok, x509ctx, &tls_in,
1151   &server_verify_callback_called, &server_verify_optional);
1152 }
1153
1154
1155 #ifdef SUPPORT_DANE
1156
1157 /* This gets called *by* the dane library verify callback, which interposes
1158 itself.
1159 */
1160 static int
1161 verify_callback_client_dane(int preverify_ok, X509_STORE_CTX * x509ctx)
1162 {
1163 X509 * cert = X509_STORE_CTX_get_current_cert(x509ctx);
1164 uschar dn[256];
1165 int depth = X509_STORE_CTX_get_error_depth(x509ctx);
1166 #ifndef DISABLE_EVENT
1167 BOOL dummy_called, optional = FALSE;
1168 #endif
1169
1170 if (!X509_NAME_oneline(X509_get_subject_name(cert), CS dn, sizeof(dn)))
1171   {
1172   DEBUG(D_tls) debug_printf("X509_NAME_oneline() error\n");
1173   log_write(0, LOG_MAIN, "[%s] SSL verify error: internal error",
1174     deliver_host_address);
1175   return 0;
1176   }
1177 dn[sizeof(dn)-1] = '\0';
1178
1179 DEBUG(D_tls) debug_printf("verify_callback_client_dane: %s depth %d %s\n",
1180   preverify_ok ? "ok":"BAD", depth, dn);
1181
1182 #ifndef DISABLE_EVENT
1183   if (verify_event(&tls_out, cert, depth, dn,
1184           &dummy_called, &optional, US"DANE"))
1185     return 0;                           /* reject, with peercert set */
1186 #endif
1187
1188 if (preverify_ok == 1)
1189   {
1190   tls_out.dane_verified = TRUE;
1191 #ifndef DISABLE_OCSP
1192   if (client_static_state->u_ocsp.client.verify_store)
1193     {   /* client, wanting stapling  */
1194     /* Add the server cert's signing chain as the one
1195     for the verification of the OCSP stapled information. */
1196
1197     if (!X509_STORE_add_cert(client_static_state->u_ocsp.client.verify_store,
1198                              cert))
1199       ERR_clear_error();
1200     sk_X509_push(client_static_state->verify_stack, cert);
1201     }
1202 #endif
1203   }
1204 else
1205   {
1206   int err = X509_STORE_CTX_get_error(x509ctx);
1207   DEBUG(D_tls)
1208     debug_printf(" - err %d '%s'\n", err, X509_verify_cert_error_string(err));
1209   if (err == X509_V_ERR_APPLICATION_VERIFICATION)
1210     preverify_ok = 1;
1211   }
1212 return preverify_ok;
1213 }
1214
1215 #endif  /*SUPPORT_DANE*/
1216
1217
1218 #ifndef DISABLE_OCSP
1219 /*************************************************
1220 *       Load OCSP information into state         *
1221 *************************************************/
1222 /* Called to load the server OCSP response from the given file into memory, once
1223 caller has determined this is needed.  Checks validity.  Debugs a message
1224 if invalid.
1225
1226 ASSUMES: single response, for single cert.
1227
1228 Arguments:
1229   state           various parts of session state
1230   filename        the filename putatively holding an OCSP response
1231   is_pem          file is PEM format; otherwise is DER
1232 */
1233
1234 static void
1235 ocsp_load_response(exim_openssl_state_st * state, const uschar * filename,
1236   BOOL is_pem)
1237 {
1238 BIO * bio;
1239 OCSP_RESPONSE * resp;
1240 OCSP_BASICRESP * basic_response;
1241 OCSP_SINGLERESP * single_response;
1242 ASN1_GENERALIZEDTIME * rev, * thisupd, * nextupd;
1243 STACK_OF(X509) * sk;
1244 unsigned long verify_flags;
1245 int status, reason, i;
1246
1247 DEBUG(D_tls)
1248   debug_printf("tls_ocsp_file (%s)  '%s'\n", is_pem ? "PEM" : "DER", filename);
1249
1250 if (!filename || !*filename) return;
1251
1252 ERR_clear_error();
1253 if (!(bio = BIO_new_file(CS filename, "rb")))
1254   {
1255   log_write(0, LOG_MAIN|LOG_PANIC,
1256     "Failed to open OCSP response file \"%s\": %.100s",
1257     filename, ERR_reason_error_string(ERR_get_error()));
1258   return;
1259   }
1260
1261 if (is_pem)
1262   {
1263   uschar * data, * freep;
1264   char * dummy;
1265   long len;
1266   if (!PEM_read_bio(bio, &dummy, &dummy, &data, &len))
1267     {
1268     log_write(0, LOG_MAIN|LOG_PANIC, "Failed to read PEM file \"%s\": %.100s",
1269       filename, ERR_reason_error_string(ERR_get_error()));
1270     return;
1271     }
1272   freep = data;
1273   resp = d2i_OCSP_RESPONSE(NULL, CUSS &data, len);
1274   OPENSSL_free(freep);
1275   }
1276 else
1277   resp = d2i_OCSP_RESPONSE_bio(bio, NULL);
1278 BIO_free(bio);
1279
1280 if (!resp)
1281   {
1282   log_write(0, LOG_MAIN|LOG_PANIC, "Error reading OCSP response from \"%s\": %s",
1283       filename, ERR_reason_error_string(ERR_get_error()));
1284   return;
1285   }
1286
1287 if ((status = OCSP_response_status(resp)) != OCSP_RESPONSE_STATUS_SUCCESSFUL)
1288   {
1289   DEBUG(D_tls) debug_printf("OCSP response not valid: %s (%d)\n",
1290       OCSP_response_status_str(status), status);
1291   goto bad;
1292   }
1293
1294 #ifdef notdef
1295   {
1296   BIO * bp = BIO_new_fp(debug_file, BIO_NOCLOSE);
1297   OCSP_RESPONSE_print(bp, resp, 0);  /* extreme debug: stapling content */
1298   BIO_free(bp);
1299   }
1300 #endif
1301
1302 if (!(basic_response = OCSP_response_get1_basic(resp)))
1303   {
1304   DEBUG(D_tls)
1305     debug_printf("OCSP response parse error: unable to extract basic response.\n");
1306   goto bad;
1307   }
1308
1309 sk = state->verify_stack;
1310 verify_flags = OCSP_NOVERIFY; /* check sigs, but not purpose */
1311
1312 /* May need to expose ability to adjust those flags?
1313 OCSP_NOSIGS OCSP_NOVERIFY OCSP_NOCHAIN OCSP_NOCHECKS OCSP_NOEXPLICIT
1314 OCSP_TRUSTOTHER OCSP_NOINTERN */
1315
1316 /* This does a full verify on the OCSP proof before we load it for serving
1317 up; possibly overkill - just date-checks might be nice enough.
1318
1319 OCSP_basic_verify takes a "store" arg, but does not
1320 use it for the chain verification, which is all we do
1321 when OCSP_NOVERIFY is set.  The content from the wire
1322 "basic_response" and a cert-stack "sk" are all that is used.
1323
1324 We have a stack, loaded in setup_certs() if tls_verify_certificates
1325 was a file (not a directory, or "system").  It is unfortunate we
1326 cannot used the connection context store, as that would neatly
1327 handle the "system" case too, but there seems to be no library
1328 function for getting a stack from a store.
1329 [ In OpenSSL 1.1 - ?  X509_STORE_CTX_get0_chain(ctx) ? ]
1330 We do not free the stack since it could be needed a second time for
1331 SNI handling.
1332
1333 Separately we might try to replace using OCSP_basic_verify() - which seems to not
1334 be a public interface into the OpenSSL library (there's no manual entry) -
1335 But what with?  We also use OCSP_basic_verify in the client stapling callback.
1336 And there we NEED it; we must verify that status... unless the
1337 library does it for us anyway?  */
1338
1339 if ((i = OCSP_basic_verify(basic_response, sk, NULL, verify_flags)) < 0)
1340   {
1341   DEBUG(D_tls)
1342     {
1343     ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
1344     debug_printf("OCSP response verify failure: %s\n", US ssl_errstring);
1345     }
1346   goto bad;
1347   }
1348
1349 /* Here's the simplifying assumption: there's only one response, for the
1350 one certificate we use, and nothing for anything else in a chain.  If this
1351 proves false, we need to extract a cert id from our issued cert
1352 (tls_certificate) and use that for OCSP_resp_find_status() (which finds the
1353 right cert in the stack and then calls OCSP_single_get0_status()).
1354
1355 I'm hoping to avoid reworking a bunch more of how we handle state here.
1356
1357 XXX that will change when we add support for (TLS1.3) whole-chain stapling
1358 */
1359
1360 if (!(single_response = OCSP_resp_get0(basic_response, 0)))
1361   {
1362   DEBUG(D_tls)
1363     debug_printf("Unable to get first response from OCSP basic response.\n");
1364   goto bad;
1365   }
1366
1367 status = OCSP_single_get0_status(single_response, &reason, &rev, &thisupd, &nextupd);
1368 if (status != V_OCSP_CERTSTATUS_GOOD)
1369   {
1370   DEBUG(D_tls) debug_printf("OCSP response bad cert status: %s (%d) %s (%d)\n",
1371       OCSP_cert_status_str(status), status,
1372       OCSP_crl_reason_str(reason), reason);
1373   goto bad;
1374   }
1375
1376 if (!OCSP_check_validity(thisupd, nextupd, EXIM_OCSP_SKEW_SECONDS, EXIM_OCSP_MAX_AGE))
1377   {
1378   DEBUG(D_tls) debug_printf("OCSP status invalid times.\n");
1379   goto bad;
1380   }
1381
1382 supply_response:
1383   /* Add the resp to the list used by tls_server_stapling_cb() */
1384   {
1385   ocsp_resplist ** op = &state->u_ocsp.server.olist, * oentry;
1386   while (oentry = *op)
1387     op = &oentry->next;
1388   *op = oentry = store_get(sizeof(ocsp_resplist), FALSE);
1389   oentry->next = NULL;
1390   oentry->resp = resp;
1391   }
1392 return;
1393
1394 bad:
1395   if (f.running_in_test_harness)
1396     {
1397     extern char ** environ;
1398     if (environ) for (uschar ** p = USS environ; *p; p++)
1399       if (Ustrncmp(*p, "EXIM_TESTHARNESS_DISABLE_OCSPVALIDITYCHECK", 42) == 0)
1400         {
1401         DEBUG(D_tls) debug_printf("Supplying known bad OCSP response\n");
1402         goto supply_response;
1403         }
1404     }
1405 return;
1406 }
1407
1408
1409 static void
1410 ocsp_free_response_list(exim_openssl_state_st * cbinfo)
1411 {
1412 for (ocsp_resplist * olist = cbinfo->u_ocsp.server.olist; olist;
1413      olist = olist->next)
1414   OCSP_RESPONSE_free(olist->resp);
1415 cbinfo->u_ocsp.server.olist = NULL;
1416 }
1417 #endif  /*!DISABLE_OCSP*/
1418
1419
1420
1421
1422
1423 static int
1424 tls_add_certfile(SSL_CTX * sctx, exim_openssl_state_st * cbinfo, uschar * file,
1425   uschar ** errstr)
1426 {
1427 DEBUG(D_tls) debug_printf("tls_certificate file '%s'\n", file);
1428 if (!SSL_CTX_use_certificate_chain_file(sctx, CS file))
1429   return tls_error(string_sprintf(
1430     "SSL_CTX_use_certificate_chain_file file=%s", file),
1431       cbinfo->host, NULL, errstr);
1432 return 0;
1433 }
1434
1435 static int
1436 tls_add_pkeyfile(SSL_CTX * sctx, exim_openssl_state_st * cbinfo, uschar * file,
1437   uschar ** errstr)
1438 {
1439 DEBUG(D_tls) debug_printf("tls_privatekey file  '%s'\n", file);
1440 if (!SSL_CTX_use_PrivateKey_file(sctx, CS file, SSL_FILETYPE_PEM))
1441   return tls_error(string_sprintf(
1442     "SSL_CTX_use_PrivateKey_file file=%s", file), cbinfo->host, NULL, errstr);
1443 return 0;
1444 }
1445
1446
1447
1448
1449 /* Called once during tls_init and possibly again during TLS setup, for a
1450 new context, if Server Name Indication was used and tls_sni was seen in
1451 the certificate string.
1452
1453 Arguments:
1454   sctx            the SSL_CTX* to update
1455   state           various parts of session state
1456   errstr          error string pointer
1457
1458 Returns:          OK/DEFER/FAIL
1459 */
1460
1461 static int
1462 tls_expand_session_files(SSL_CTX * sctx, exim_openssl_state_st * state,
1463   uschar ** errstr)
1464 {
1465 uschar * expanded;
1466
1467 if (!state->certificate)
1468   {
1469   if (!state->is_server)                /* client */
1470     return OK;
1471                                         /* server */
1472   if (tls_install_selfsign(sctx, errstr) != OK)
1473     return DEFER;
1474   }
1475 else
1476   {
1477   int err;
1478
1479   if ( !reexpand_tls_files_for_sni
1480      && (  Ustrstr(state->certificate, US"tls_sni")
1481         || Ustrstr(state->certificate, US"tls_in_sni")
1482         || Ustrstr(state->certificate, US"tls_out_sni")
1483      )  )
1484     reexpand_tls_files_for_sni = TRUE;
1485
1486   if (!expand_check(state->certificate, US"tls_certificate", &expanded, errstr))
1487     return DEFER;
1488
1489   if (expanded)
1490     if (state->is_server)
1491       {
1492       const uschar * file_list = expanded;
1493       int sep = 0;
1494       uschar * file;
1495 #ifndef DISABLE_OCSP
1496       const uschar * olist = state->u_ocsp.server.file;
1497       int osep = 0;
1498       uschar * ofile;
1499       BOOL fmt_pem = FALSE;
1500
1501       if (olist)
1502         if (!expand_check(olist, US"tls_ocsp_file", USS &olist, errstr))
1503           return DEFER;
1504       if (olist && !*olist)
1505         olist = NULL;
1506
1507       if (  state->u_ocsp.server.file_expanded && olist
1508          && (Ustrcmp(olist, state->u_ocsp.server.file_expanded) == 0))
1509         {
1510         DEBUG(D_tls) debug_printf(" - value unchanged, using existing values\n");
1511         olist = NULL;
1512         }
1513       else
1514         {
1515         ocsp_free_response_list(state);
1516         state->u_ocsp.server.file_expanded = olist;
1517         }
1518 #endif
1519
1520       while (file = string_nextinlist(&file_list, &sep, NULL, 0))
1521         {
1522         if ((err = tls_add_certfile(sctx, state, file, errstr)))
1523           return err;
1524
1525 #ifndef DISABLE_OCSP
1526         if (olist)
1527           if ((ofile = string_nextinlist(&olist, &osep, NULL, 0)))
1528             {
1529             if (Ustrncmp(ofile, US"PEM ", 4) == 0)
1530               {
1531               fmt_pem = TRUE;
1532               ofile += 4;
1533               }
1534             else if (Ustrncmp(ofile, US"DER ", 4) == 0)
1535               {
1536               fmt_pem = FALSE;
1537               ofile += 4;
1538               }
1539             ocsp_load_response(state, ofile, fmt_pem);
1540             }
1541           else
1542             DEBUG(D_tls) debug_printf("ran out of ocsp file list\n");
1543 #endif
1544         }
1545       }
1546     else        /* would there ever be a need for multiple client certs? */
1547       if ((err = tls_add_certfile(sctx, state, expanded, errstr)))
1548         return err;
1549
1550   if (  state->privatekey
1551      && !expand_check(state->privatekey, US"tls_privatekey", &expanded, errstr))
1552     return DEFER;
1553
1554   /* If expansion was forced to fail, key_expanded will be NULL. If the result
1555   of the expansion is an empty string, ignore it also, and assume the private
1556   key is in the same file as the certificate. */
1557
1558   if (expanded && *expanded)
1559     if (state->is_server)
1560       {
1561       const uschar * file_list = expanded;
1562       int sep = 0;
1563       uschar * file;
1564
1565       while (file = string_nextinlist(&file_list, &sep, NULL, 0))
1566         if ((err = tls_add_pkeyfile(sctx, state, file, errstr)))
1567           return err;
1568       }
1569     else        /* would there ever be a need for multiple client certs? */
1570       if ((err = tls_add_pkeyfile(sctx, state, expanded, errstr)))
1571         return err;
1572   }
1573
1574 return OK;
1575 }
1576
1577
1578
1579
1580 /**************************************************
1581 * One-time init credentials for server and client *
1582 **************************************************/
1583
1584 static int
1585 server_load_ciphers(SSL_CTX * ctx, exim_openssl_state_st * state,
1586   uschar * ciphers, uschar ** errstr)
1587 {
1588 for (uschar * s = ciphers; *s; s++ ) if (*s == '_') *s = '-';
1589 DEBUG(D_tls) debug_printf("required ciphers: %s\n", ciphers);
1590 if (!SSL_CTX_set_cipher_list(ctx, CS ciphers))
1591   return tls_error(US"SSL_CTX_set_cipher_list", NULL, NULL, errstr);
1592 state->server_cipher_list = ciphers;
1593 return OK;
1594 }
1595
1596
1597
1598 static int
1599 lib_ctx_new(SSL_CTX ** ctxp, host_item * host, uschar ** errstr)
1600 {
1601 SSL_CTX * ctx;
1602 #ifdef EXIM_HAVE_OPENSSL_TLS_METHOD
1603 if (!(ctx = SSL_CTX_new(host ? TLS_client_method() : TLS_server_method())))
1604 #else
1605 if (!(ctx = SSL_CTX_new(host ? SSLv23_client_method() : SSLv23_server_method())))
1606 #endif
1607   return tls_error(US"SSL_CTX_new", host, NULL, errstr);
1608
1609 /* Set up the information callback, which outputs if debugging is at a suitable
1610 level. */
1611
1612 DEBUG(D_tls)
1613   {
1614   SSL_CTX_set_info_callback(ctx, (void (*)())info_callback);
1615 #if defined(EXIM_HAVE_OPESSL_TRACE) && !defined(OPENSSL_NO_SSL_TRACE)
1616   /* this needs a debug build of OpenSSL */
1617   SSL_CTX_set_msg_callback(ctx, (void (*)())SSL_trace);
1618 #endif
1619 #ifdef OPENSSL_HAVE_KEYLOG_CB
1620   SSL_CTX_set_keylog_callback(ctx, (void (*)())keylog_callback);
1621 #endif
1622   }
1623
1624 /* Automatically re-try reads/writes after renegotiation. */
1625 (void) SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
1626 *ctxp = ctx;
1627 return OK;
1628 }
1629
1630
1631 static unsigned
1632 tls_server_creds_init(void)
1633 {
1634 SSL_CTX * ctx;
1635 uschar * dummy_errstr;
1636 unsigned lifetime = 0;
1637
1638 tls_openssl_init();
1639
1640 state_server.lib_state = null_tls_preload;
1641
1642 if (lib_ctx_new(&ctx, NULL, &dummy_errstr) != OK)
1643   return 0;
1644 state_server.lib_state.lib_ctx = ctx;
1645
1646 /* Preload DH params and EC curve */
1647
1648 if (opt_unset_or_noexpand(tls_dhparam))
1649   {
1650   DEBUG(D_tls) debug_printf("TLS: preloading DH params for server\n");
1651   if (init_dh(ctx, tls_dhparam, NULL, &dummy_errstr))
1652     state_server.lib_state.dh = TRUE;
1653   }
1654 if (opt_unset_or_noexpand(tls_eccurve))
1655   {
1656   DEBUG(D_tls) debug_printf("TLS: preloading ECDH curve for server\n");
1657   if (init_ecdh(ctx, NULL, &dummy_errstr))
1658     state_server.lib_state.ecdh = TRUE;
1659   }
1660
1661 #if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT)
1662 /* If we can, preload the server-side cert, key and ocsp */
1663
1664 if (  opt_set_and_noexpand(tls_certificate)
1665 # ifndef DISABLE_OCSP
1666    && opt_unset_or_noexpand(tls_ocsp_file)
1667 #endif
1668    && opt_unset_or_noexpand(tls_privatekey))
1669   {
1670   /* Set watches on the filenames.  The implementation does de-duplication
1671   so we can just blindly do them all.  */
1672
1673   if (  tls_set_watch(tls_certificate, TRUE)
1674 # ifndef DISABLE_OCSP
1675      && tls_set_watch(tls_ocsp_file, TRUE)
1676 #endif
1677      && tls_set_watch(tls_privatekey, TRUE))
1678     {
1679     state_server.certificate = tls_certificate;
1680     state_server.privatekey = tls_privatekey;
1681 #ifndef DISABLE_OCSP
1682     state_server.u_ocsp.server.file = tls_ocsp_file;
1683 #endif
1684
1685     DEBUG(D_tls) debug_printf("TLS: preloading server certs\n");
1686     if (tls_expand_session_files(ctx, &state_server, &dummy_errstr) == OK)
1687       state_server.lib_state.conn_certs = TRUE;
1688     }
1689   }
1690 else if (  !tls_certificate && !tls_privatekey
1691 # ifndef DISABLE_OCSP
1692         && !tls_ocsp_file
1693 #endif
1694    )
1695   {             /* Generate & preload a selfsigned cert. No files to watch. */
1696   if (tls_expand_session_files(ctx, &state_server, &dummy_errstr) == OK)
1697     {
1698     state_server.lib_state.conn_certs = TRUE;
1699     lifetime = f.running_in_test_harness ? 2 : 60 * 60;         /* 1 hour */
1700     }
1701   }
1702 else
1703   DEBUG(D_tls) debug_printf("TLS: not preloading server certs\n");
1704
1705
1706 /* If we can, preload the Authorities for checking client certs against.
1707 Actual choice to do verify is made (tls_{,try_}verify_hosts)
1708 at TLS conn startup */
1709
1710 if (  opt_set_and_noexpand(tls_verify_certificates)
1711    && opt_unset_or_noexpand(tls_crl))
1712   {
1713   /* Watch the default dir also as they are always included */
1714
1715   if (  tls_set_watch(CUS X509_get_default_cert_file(), FALSE)
1716      && tls_set_watch(tls_verify_certificates, FALSE)
1717      && tls_set_watch(tls_crl, FALSE))
1718     {
1719     DEBUG(D_tls) debug_printf("TLS: preloading CA bundle for server\n");
1720
1721     if (setup_certs(ctx, tls_verify_certificates, tls_crl, NULL, &dummy_errstr)
1722         == OK)
1723       state_server.lib_state.cabundle = TRUE;
1724     }
1725   }
1726 else
1727   DEBUG(D_tls) debug_printf("TLS: not preloading CA bundle for server\n");
1728 #endif  /* EXIM_HAVE_INOTIFY */
1729
1730
1731 /* If we can, preload the ciphers control string */
1732
1733 if (opt_set_and_noexpand(tls_require_ciphers))
1734   {
1735   DEBUG(D_tls) debug_printf("TLS: preloading cipher list for server\n");
1736   if (server_load_ciphers(ctx, &state_server, tls_require_ciphers,
1737                           &dummy_errstr) == OK)
1738     state_server.lib_state.pri_string = TRUE;
1739   }
1740 else
1741   DEBUG(D_tls) debug_printf("TLS: not preloading cipher list for server\n");
1742 return lifetime;
1743 }
1744
1745
1746
1747
1748 /* Preload whatever creds are static, onto a transport.  The client can then
1749 just copy the pointer as it starts up.
1750 Called from the daemon after a cache-invalidate with watch set; called from
1751 a queue-run startup with watch clear. */
1752
1753 static void
1754 tls_client_creds_init(transport_instance * t, BOOL watch)
1755 {
1756 smtp_transport_options_block * ob = t->options_block;
1757 exim_openssl_state_st tpt_dummy_state;
1758 host_item * dummy_host = (host_item *)1;
1759 uschar * dummy_errstr;
1760 SSL_CTX * ctx;
1761
1762 tls_openssl_init();
1763
1764 ob->tls_preload = null_tls_preload;
1765 if (lib_ctx_new(&ctx, dummy_host, &dummy_errstr) != OK)
1766   return;
1767 ob->tls_preload.lib_ctx = ctx;
1768
1769 tpt_dummy_state.lib_state = ob->tls_preload;
1770
1771 if (opt_unset_or_noexpand(tls_dhparam))
1772   {
1773   DEBUG(D_tls) debug_printf("TLS: preloading DH params for transport '%s'\n", t->name);
1774   if (init_dh(ctx, tls_dhparam, NULL, &dummy_errstr))
1775     ob->tls_preload.dh = TRUE;
1776   }
1777 if (opt_unset_or_noexpand(tls_eccurve))
1778   {
1779   DEBUG(D_tls) debug_printf("TLS: preloading ECDH curve for transport '%s'\n", t->name);
1780   if (init_ecdh(ctx, NULL, &dummy_errstr))
1781     ob->tls_preload.ecdh = TRUE;
1782   }
1783
1784 #if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT)
1785 if (  opt_set_and_noexpand(ob->tls_certificate)
1786    && opt_unset_or_noexpand(ob->tls_privatekey))
1787   {
1788   if (  !watch
1789      || (  tls_set_watch(ob->tls_certificate, FALSE)
1790         && tls_set_watch(ob->tls_privatekey, FALSE)
1791      )  )
1792     {
1793     uschar * pkey = ob->tls_privatekey;
1794
1795     DEBUG(D_tls)
1796       debug_printf("TLS: preloading client certs for transport '%s'\n",t->name);
1797
1798     if (  tls_add_certfile(ctx, &tpt_dummy_state, ob->tls_certificate,
1799                                     &dummy_errstr) == 0
1800        && tls_add_pkeyfile(ctx, &tpt_dummy_state,
1801                                     pkey ? pkey : ob->tls_certificate,
1802                                     &dummy_errstr) == 0
1803        )
1804       ob->tls_preload.conn_certs = TRUE;
1805     }
1806   }
1807 else
1808   DEBUG(D_tls)
1809     debug_printf("TLS: not preloading client certs, for transport '%s'\n", t->name);
1810
1811
1812 if (  opt_set_and_noexpand(ob->tls_verify_certificates)
1813    && opt_unset_or_noexpand(ob->tls_crl))
1814   {
1815   if (  !watch
1816      ||    tls_set_watch(CUS X509_get_default_cert_file(), FALSE)
1817         && tls_set_watch(ob->tls_verify_certificates, FALSE)
1818         && tls_set_watch(ob->tls_crl, FALSE)
1819      )
1820     {
1821     DEBUG(D_tls)
1822       debug_printf("TLS: preloading CA bundle for transport '%s'\n", t->name);
1823
1824     if (setup_certs(ctx, ob->tls_verify_certificates,
1825           ob->tls_crl, dummy_host, &dummy_errstr) == OK)
1826       ob->tls_preload.cabundle = TRUE;
1827     }
1828   }
1829 else
1830   DEBUG(D_tls)
1831       debug_printf("TLS: not preloading CA bundle, for transport '%s'\n", t->name);
1832
1833 #endif /*EXIM_HAVE_INOTIFY*/
1834 }
1835
1836
1837 #if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT)
1838 /* Invalidate the creds cached, by dropping the current ones.
1839 Call when we notice one of the source files has changed. */
1840  
1841 static void
1842 tls_server_creds_invalidate(void)
1843 {
1844 SSL_CTX_free(state_server.lib_state.lib_ctx);
1845 state_server.lib_state = null_tls_preload;
1846 }
1847
1848
1849 static void
1850 tls_client_creds_invalidate(transport_instance * t)
1851 {
1852 smtp_transport_options_block * ob = t->options_block;
1853 SSL_CTX_free(ob->tls_preload.lib_ctx);
1854 ob->tls_preload = null_tls_preload;
1855 }
1856
1857 #else
1858
1859 static void
1860 tls_server_creds_invalidate(void)
1861 { return; }
1862
1863 static void
1864 tls_client_creds_invalidate(transport_instance * t)
1865 { return; }
1866
1867 #endif  /*EXIM_HAVE_INOTIFY*/
1868
1869
1870 /* Extreme debug
1871 #ifndef DISABLE_OCSP
1872 void
1873 x509_store_dump_cert_s_names(X509_STORE * store)
1874 {
1875 STACK_OF(X509_OBJECT) * roots= store->objs;
1876 static uschar name[256];
1877
1878 for (int i= 0; i < sk_X509_OBJECT_num(roots); i++)
1879   {
1880   X509_OBJECT * tmp_obj= sk_X509_OBJECT_value(roots, i);
1881   if(tmp_obj->type == X509_LU_X509)
1882     {
1883     X509_NAME * sn = X509_get_subject_name(tmp_obj->data.x509);
1884     if (X509_NAME_oneline(sn, CS name, sizeof(name)))
1885       {
1886       name[sizeof(name)-1] = '\0';
1887       debug_printf(" %s\n", name);
1888       }
1889     }
1890   }
1891 }
1892 #endif
1893 */
1894
1895
1896 #ifndef DISABLE_TLS_RESUME
1897 /* Manage the keysets used for encrypting the session tickets, on the server. */
1898
1899 typedef struct {                        /* Session ticket encryption key */
1900   uschar        name[16];
1901
1902   const EVP_CIPHER *    aes_cipher;
1903   uschar                aes_key[32];    /* size needed depends on cipher. aes_128 implies 128/8 = 16? */
1904   const EVP_MD *        hmac_hash;
1905   uschar                hmac_key[16];
1906   time_t                renew;
1907   time_t                expire;
1908 } exim_stek;
1909
1910 static exim_stek exim_tk;       /* current key */
1911 static exim_stek exim_tk_old;   /* previous key */
1912
1913 static void
1914 tk_init(void)
1915 {
1916 time_t t = time(NULL);
1917
1918 if (exim_tk.name[0])
1919   {
1920   if (exim_tk.renew >= t) return;
1921   exim_tk_old = exim_tk;
1922   }
1923
1924 if (f.running_in_test_harness) ssl_session_timeout = 6;
1925
1926 DEBUG(D_tls) debug_printf("OpenSSL: %s STEK\n", exim_tk.name[0] ? "rotating" : "creating");
1927 if (RAND_bytes(exim_tk.aes_key, sizeof(exim_tk.aes_key)) <= 0) return;
1928 if (RAND_bytes(exim_tk.hmac_key, sizeof(exim_tk.hmac_key)) <= 0) return;
1929 if (RAND_bytes(exim_tk.name+1, sizeof(exim_tk.name)-1) <= 0) return;
1930
1931 exim_tk.name[0] = 'E';
1932 exim_tk.aes_cipher = EVP_aes_256_cbc();
1933 exim_tk.hmac_hash = EVP_sha256();
1934 exim_tk.expire = t + ssl_session_timeout;
1935 exim_tk.renew = t + ssl_session_timeout/2;
1936 }
1937
1938 static exim_stek *
1939 tk_current(void)
1940 {
1941 if (!exim_tk.name[0]) return NULL;
1942 return &exim_tk;
1943 }
1944
1945 static exim_stek *
1946 tk_find(const uschar * name)
1947 {
1948 return memcmp(name, exim_tk.name, sizeof(exim_tk.name)) == 0 ? &exim_tk
1949   : memcmp(name, exim_tk_old.name, sizeof(exim_tk_old.name)) == 0 ? &exim_tk_old
1950   : NULL;
1951 }
1952
1953 /* Callback for session tickets, on server */
1954 static int
1955 ticket_key_callback(SSL * ssl, uschar key_name[16],
1956   uschar * iv, EVP_CIPHER_CTX * c_ctx, HMAC_CTX * hctx, int enc)
1957 {
1958 tls_support * tlsp = state_server.tlsp;
1959 exim_stek * key;
1960
1961 if (enc)
1962   {
1963   DEBUG(D_tls) debug_printf("ticket_key_callback: create new session\n");
1964   tlsp->resumption |= RESUME_CLIENT_REQUESTED;
1965
1966   if (RAND_bytes(iv, EVP_MAX_IV_LENGTH) <= 0)
1967     return -1; /* insufficient random */
1968
1969   if (!(key = tk_current()))    /* current key doesn't exist or isn't valid */
1970      return 0;                  /* key couldn't be created */
1971   memcpy(key_name, key->name, 16);
1972   DEBUG(D_tls) debug_printf("STEK expire " TIME_T_FMT "\n", key->expire - time(NULL));
1973
1974   /*XXX will want these dependent on the ssl session strength */
1975   HMAC_Init_ex(hctx, key->hmac_key, sizeof(key->hmac_key),
1976                 key->hmac_hash, NULL);
1977   EVP_EncryptInit_ex(c_ctx, key->aes_cipher, NULL, key->aes_key, iv);
1978
1979   DEBUG(D_tls) debug_printf("ticket created\n");
1980   return 1;
1981   }
1982 else
1983   {
1984   time_t now = time(NULL);
1985
1986   DEBUG(D_tls) debug_printf("ticket_key_callback: retrieve session\n");
1987   tlsp->resumption |= RESUME_CLIENT_SUGGESTED;
1988
1989   if (!(key = tk_find(key_name)) || key->expire < now)
1990     {
1991     DEBUG(D_tls)
1992       {
1993       debug_printf("ticket not usable (%s)\n", key ? "expired" : "not found");
1994       if (key) debug_printf("STEK expire " TIME_T_FMT "\n", key->expire - now);
1995       }
1996     return 0;
1997     }
1998
1999   HMAC_Init_ex(hctx, key->hmac_key, sizeof(key->hmac_key),
2000                 key->hmac_hash, NULL);
2001   EVP_DecryptInit_ex(c_ctx, key->aes_cipher, NULL, key->aes_key, iv);
2002
2003   DEBUG(D_tls) debug_printf("ticket usable, STEK expire " TIME_T_FMT "\n", key->expire - now);
2004
2005   /* The ticket lifetime and renewal are the same as the STEK lifetime and
2006   renewal, which is overenthusiastic.  A factor of, say, 3x longer STEK would
2007   be better.  To do that we'd have to encode ticket lifetime in the name as
2008   we don't yet see the restored session.  Could check posthandshake for TLS1.3
2009   and trigger a new ticket then, but cannot do that for TLS1.2 */
2010   return key->renew < now ? 2 : 1;
2011   }
2012 }
2013 #endif
2014
2015
2016
2017 static void
2018 setup_cert_verify(SSL_CTX * ctx, BOOL optional,
2019     int (*cert_vfy_cb)(int, X509_STORE_CTX *))
2020 {
2021 /* If verification is optional, don't fail if no certificate */
2022
2023 SSL_CTX_set_verify(ctx,
2024     SSL_VERIFY_PEER | (optional ? 0 : SSL_VERIFY_FAIL_IF_NO_PEER_CERT),
2025     cert_vfy_cb);
2026 }
2027
2028
2029 /*************************************************
2030 *            Callback to handle SNI              *
2031 *************************************************/
2032
2033 /* Called when acting as server during the TLS session setup if a Server Name
2034 Indication extension was sent by the client.
2035
2036 API documentation is OpenSSL s_server.c implementation.
2037
2038 Arguments:
2039   s               SSL* of the current session
2040   ad              unknown (part of OpenSSL API) (unused)
2041   arg             Callback of "our" registered data
2042
2043 Returns:          SSL_TLSEXT_ERR_{OK,ALERT_WARNING,ALERT_FATAL,NOACK}
2044
2045 XXX might need to change to using ClientHello callback,
2046 per https://www.openssl.org/docs/manmaster/man3/SSL_client_hello_cb_fn.html
2047 */
2048
2049 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
2050 static int
2051 tls_servername_cb(SSL *s, int *ad ARG_UNUSED, void *arg)
2052 {
2053 const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
2054 exim_openssl_state_st *state = (exim_openssl_state_st *) arg;
2055 int rc;
2056 int old_pool = store_pool;
2057 uschar * dummy_errstr;
2058
2059 if (!servername)
2060   return SSL_TLSEXT_ERR_OK;
2061
2062 DEBUG(D_tls) debug_printf("Received TLS SNI \"%s\"%s\n", servername,
2063     reexpand_tls_files_for_sni ? "" : " (unused for certificate selection)");
2064
2065 /* Make the extension value available for expansion */
2066 store_pool = POOL_PERM;
2067 tls_in.sni = string_copy_taint(US servername, TRUE);
2068 store_pool = old_pool;
2069
2070 if (!reexpand_tls_files_for_sni)
2071   return SSL_TLSEXT_ERR_OK;
2072
2073 /* Can't find an SSL_CTX_clone() or equivalent, so we do it manually;
2074 not confident that memcpy wouldn't break some internal reference counting.
2075 Especially since there's a references struct member, which would be off. */
2076
2077 if (lib_ctx_new(&server_sni, NULL, &dummy_errstr) != OK)
2078   goto bad;
2079
2080 /* Not sure how many of these are actually needed, since SSL object
2081 already exists.  Might even need this selfsame callback, for reneg? */
2082
2083   {
2084   SSL_CTX * ctx = state_server.lib_state.lib_ctx;
2085   SSL_CTX_set_info_callback(server_sni, SSL_CTX_get_info_callback(ctx));
2086   SSL_CTX_set_mode(server_sni, SSL_CTX_get_mode(ctx));
2087   SSL_CTX_set_options(server_sni, SSL_CTX_get_options(ctx));
2088   SSL_CTX_set_timeout(server_sni, SSL_CTX_get_timeout(ctx));
2089   SSL_CTX_set_tlsext_servername_callback(server_sni, tls_servername_cb);
2090   SSL_CTX_set_tlsext_servername_arg(server_sni, state);
2091   }
2092
2093 if (  !init_dh(server_sni, state->dhparam, NULL, &dummy_errstr)
2094    || !init_ecdh(server_sni, NULL, &dummy_errstr)
2095    )
2096   goto bad;
2097
2098 if (  state->server_cipher_list
2099    && !SSL_CTX_set_cipher_list(server_sni, CS state->server_cipher_list))
2100   goto bad;
2101
2102 #ifndef DISABLE_OCSP
2103 if (state->u_ocsp.server.file)
2104   {
2105   SSL_CTX_set_tlsext_status_cb(server_sni, tls_server_stapling_cb);
2106   SSL_CTX_set_tlsext_status_arg(server_sni, state);
2107   }
2108 #endif
2109
2110   {
2111   uschar * expcerts;
2112   if (  !expand_check(tls_verify_certificates, US"tls_verify_certificates",
2113                   &expcerts, &dummy_errstr)
2114      || (rc = setup_certs(server_sni, expcerts, tls_crl, NULL,
2115                         &dummy_errstr)) != OK)
2116     goto bad;
2117
2118   if (expcerts && *expcerts)
2119     setup_cert_verify(server_sni, FALSE, verify_callback_server);
2120   }
2121
2122 /* do this after setup_certs, because this can require the certs for verifying
2123 OCSP information. */
2124 if ((rc = tls_expand_session_files(server_sni, state, &dummy_errstr)) != OK)
2125   goto bad;
2126
2127 DEBUG(D_tls) debug_printf("Switching SSL context.\n");
2128 SSL_set_SSL_CTX(s, server_sni);
2129 return SSL_TLSEXT_ERR_OK;
2130
2131 bad: return SSL_TLSEXT_ERR_ALERT_FATAL;
2132 }
2133 #endif /* EXIM_HAVE_OPENSSL_TLSEXT */
2134
2135
2136
2137
2138 #ifdef EXIM_HAVE_ALPN
2139 /*************************************************
2140 *        Callback to handle ALPN                 *
2141 *************************************************/
2142
2143 /* SSL_CTX_set_alpn_select_cb() */
2144 /* Called on server when client offers ALPN, after the SNI callback.
2145 If set and not e?smtp then we dump the connection */
2146
2147 static int
2148 tls_server_alpn_cb(SSL *ssl, const uschar ** out, uschar * outlen,
2149   const uschar * in, unsigned int inlen, void * arg)
2150 {
2151 const exim_openssl_state_st * state = arg;
2152
2153 DEBUG(D_tls)
2154   {
2155   debug_printf("Received TLS ALPN offer:");
2156   for (int pos = 0, siz; pos < inlen; pos += siz+1)
2157     {
2158     siz = in[pos];
2159     if (pos + 1 + siz > inlen) siz = inlen - pos - 1;
2160     debug_printf(" '%.*s'", siz, in + pos + 1);
2161     }
2162   debug_printf("\n");
2163   }
2164
2165 /* Look for an acceptable ALPN */
2166 if (  inlen > 1         /* at least one name */
2167    && in[0]+1 == inlen  /* filling the vector, so exactly one name */
2168    && (  Ustrncmp(in+1, "smtp", in[0]) == 0
2169       || Ustrncmp(in+1, "esmtp", in[0]) == 0
2170    )  )
2171   {
2172   *out = in;                    /* we checked for exactly one, so can just point to it */
2173   *outlen = inlen;
2174   return SSL_TLSEXT_ERR_OK;     /* use ALPN */
2175   }
2176
2177 /* Reject unacceptable ALPN */
2178 /* This will be fatal to the TLS conn; would be nice to kill TCP also */
2179 return SSL_TLSEXT_ERR_ALERT_FATAL;
2180 }
2181 #endif  /* EXIM_HAVE_ALPN */
2182
2183
2184
2185 #ifndef DISABLE_OCSP
2186
2187 /*************************************************
2188 *        Callback to handle OCSP Stapling        *
2189 *************************************************/
2190
2191 /* Called when acting as server during the TLS session setup if the client
2192 requests OCSP information with a Certificate Status Request.
2193
2194 Documentation via openssl s_server.c and the Apache patch from the OpenSSL
2195 project.
2196
2197 */
2198
2199 static int
2200 tls_server_stapling_cb(SSL *s, void *arg)
2201 {
2202 const exim_openssl_state_st * state = arg;
2203 ocsp_resplist * olist = state->u_ocsp.server.olist;
2204 uschar * response_der;  /*XXX blob */
2205 int response_der_len;
2206
2207 DEBUG(D_tls)
2208   debug_printf("Received TLS status request (OCSP stapling); %s response list\n",
2209     olist ? "have" : "lack");
2210
2211 tls_in.ocsp = OCSP_NOT_RESP;
2212 if (!olist)
2213   return SSL_TLSEXT_ERR_NOACK;
2214
2215 #ifdef EXIM_HAVE_OPESSL_GET0_SERIAL
2216  {
2217   const X509 * cert_sent = SSL_get_certificate(s);
2218   const ASN1_INTEGER * cert_serial = X509_get0_serialNumber(cert_sent);
2219   const BIGNUM * cert_bn = ASN1_INTEGER_to_BN(cert_serial, NULL);
2220   const X509_NAME * cert_issuer = X509_get_issuer_name(cert_sent);
2221   uschar * chash;
2222   uint chash_len;
2223
2224   for (; olist; olist = olist->next)
2225     {
2226     OCSP_BASICRESP * bs = OCSP_response_get1_basic(olist->resp);
2227     const OCSP_SINGLERESP * single = OCSP_resp_get0(bs, 0);
2228     const OCSP_CERTID * cid = OCSP_SINGLERESP_get0_id(single);
2229     ASN1_INTEGER * res_cert_serial;
2230     const BIGNUM * resp_bn;
2231     ASN1_OCTET_STRING * res_cert_iNameHash;
2232
2233
2234     (void) OCSP_id_get0_info(&res_cert_iNameHash, NULL, NULL, &res_cert_serial,
2235       (OCSP_CERTID *) cid);
2236     resp_bn = ASN1_INTEGER_to_BN(res_cert_serial, NULL);
2237
2238     DEBUG(D_tls)
2239       {
2240       debug_printf("cert serial: %s\n", BN_bn2hex(cert_bn));
2241       debug_printf("resp serial: %s\n", BN_bn2hex(resp_bn));
2242       }
2243
2244     if (BN_cmp(cert_bn, resp_bn) == 0)
2245       {
2246       DEBUG(D_tls) debug_printf("matched serial for ocsp\n");
2247
2248       /*XXX TODO: check the rest of the list for duplicate matches.
2249       If any, need to also check the Issuer Name hash.
2250       Without this, we will provide the wrong status in the case of
2251       duplicate id. */
2252
2253       break;
2254       }
2255     DEBUG(D_tls) debug_printf("not match serial for ocsp\n");
2256     }
2257   if (!olist)
2258     {
2259     DEBUG(D_tls) debug_printf("failed to find match for ocsp\n");
2260     return SSL_TLSEXT_ERR_NOACK;
2261     }
2262  }
2263 #else
2264 if (olist->next)
2265   {
2266   DEBUG(D_tls) debug_printf("OpenSSL version too early to support multi-leaf OCSP\n");
2267   return SSL_TLSEXT_ERR_NOACK;
2268   }
2269 #endif
2270
2271 /*XXX could we do the i2d earlier, rather than during the callback? */
2272 response_der = NULL;
2273 response_der_len = i2d_OCSP_RESPONSE(olist->resp, &response_der);
2274 if (response_der_len <= 0)
2275   return SSL_TLSEXT_ERR_NOACK;
2276
2277 SSL_set_tlsext_status_ocsp_resp(state_server.lib_state.lib_ssl,
2278                                 response_der, response_der_len);
2279 tls_in.ocsp = OCSP_VFIED;
2280 return SSL_TLSEXT_ERR_OK;
2281 }
2282
2283
2284 static void
2285 time_print(BIO * bp, const char * str, ASN1_GENERALIZEDTIME * time)
2286 {
2287 BIO_printf(bp, "\t%s: ", str);
2288 ASN1_GENERALIZEDTIME_print(bp, time);
2289 BIO_puts(bp, "\n");
2290 }
2291
2292 static int
2293 tls_client_stapling_cb(SSL *s, void *arg)
2294 {
2295 exim_openssl_state_st * cbinfo = arg;
2296 const unsigned char * p;
2297 int len;
2298 OCSP_RESPONSE * rsp;
2299 OCSP_BASICRESP * bs;
2300 int i;
2301
2302 DEBUG(D_tls) debug_printf("Received TLS status callback (OCSP stapling):\n");
2303 len = SSL_get_tlsext_status_ocsp_resp(s, &p);
2304 if(!p)
2305  {
2306   /* Expect this when we requested ocsp but got none */
2307   if (cbinfo->u_ocsp.client.verify_required && LOGGING(tls_cipher))
2308     log_write(0, LOG_MAIN, "Required TLS certificate status not received");
2309   else
2310     DEBUG(D_tls) debug_printf(" null\n");
2311   return cbinfo->u_ocsp.client.verify_required ? 0 : 1;
2312  }
2313
2314 if (!(rsp = d2i_OCSP_RESPONSE(NULL, &p, len)))
2315   {
2316   tls_out.ocsp = OCSP_FAILED;   /*XXX should use tlsp-> to permit concurrent outbound */
2317   if (LOGGING(tls_cipher))
2318     log_write(0, LOG_MAIN, "Received TLS cert status response, parse error");
2319   else
2320     DEBUG(D_tls) debug_printf(" parse error\n");
2321   return 0;
2322   }
2323
2324 if (!(bs = OCSP_response_get1_basic(rsp)))
2325   {
2326   tls_out.ocsp = OCSP_FAILED;
2327   if (LOGGING(tls_cipher))
2328     log_write(0, LOG_MAIN, "Received TLS cert status response, error parsing response");
2329   else
2330     DEBUG(D_tls) debug_printf(" error parsing response\n");
2331   OCSP_RESPONSE_free(rsp);
2332   return 0;
2333   }
2334
2335 /* We'd check the nonce here if we'd put one in the request. */
2336 /* However that would defeat cacheability on the server so we don't. */
2337
2338 /* This section of code reworked from OpenSSL apps source;
2339    The OpenSSL Project retains copyright:
2340    Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
2341 */
2342   {
2343     BIO * bp = NULL;
2344 #ifndef EXIM_HAVE_OCSP_RESP_COUNT
2345     STACK_OF(OCSP_SINGLERESP) * sresp = bs->tbsResponseData->responses;
2346 #endif
2347
2348     DEBUG(D_tls) bp = BIO_new_fp(debug_file, BIO_NOCLOSE);
2349
2350     /*OCSP_RESPONSE_print(bp, rsp, 0);   extreme debug: stapling content */
2351
2352     /* Use the chain that verified the server cert to verify the stapled info */
2353     /* DEBUG(D_tls) x509_store_dump_cert_s_names(cbinfo->u_ocsp.client.verify_store); */
2354
2355     if ((i = OCSP_basic_verify(bs, cbinfo->verify_stack,
2356               cbinfo->u_ocsp.client.verify_store, OCSP_NOEXPLICIT)) <= 0)
2357       if (ERR_peek_error())
2358         {
2359         tls_out.ocsp = OCSP_FAILED;
2360         if (LOGGING(tls_cipher)) log_write(0, LOG_MAIN,
2361                 "Received TLS cert status response, itself unverifiable: %s",
2362                 ERR_reason_error_string(ERR_peek_error()));
2363         BIO_printf(bp, "OCSP response verify failure\n");
2364         ERR_print_errors(bp);
2365         OCSP_RESPONSE_print(bp, rsp, 0);
2366         goto failed;
2367         }
2368       else
2369         DEBUG(D_tls) debug_printf("no explicit trust for OCSP signing"
2370           " in the root CA certificate; ignoring\n");
2371
2372     DEBUG(D_tls) debug_printf("OCSP response well-formed and signed OK\n");
2373
2374     /*XXX So we have a good stapled OCSP status.  How do we know
2375     it is for the cert of interest?  OpenSSL 1.1.0 has a routine
2376     OCSP_resp_find_status() which matches on a cert id, which presumably
2377     we should use. Making an id needs OCSP_cert_id_new(), which takes
2378     issuerName, issuerKey, serialNumber.  Are they all in the cert?
2379
2380     For now, carry on blindly accepting the resp. */
2381
2382     for (int idx =
2383 #ifdef EXIM_HAVE_OCSP_RESP_COUNT
2384             OCSP_resp_count(bs) - 1;
2385 #else
2386             sk_OCSP_SINGLERESP_num(sresp) - 1;
2387 #endif
2388          idx >= 0; idx--)
2389       {
2390       OCSP_SINGLERESP * single = OCSP_resp_get0(bs, idx);
2391       int status, reason;
2392       ASN1_GENERALIZEDTIME * rev, * thisupd, * nextupd;
2393
2394   /*XXX so I can see putting a loop in here to handle a rsp with >1 singleresp
2395   - but what happens with a GnuTLS-style input?
2396
2397   we could do with a debug label for each singleresp
2398   - it has a certID with a serialNumber, but I see no API to get that
2399   */
2400       status = OCSP_single_get0_status(single, &reason, &rev,
2401                   &thisupd, &nextupd);
2402
2403       DEBUG(D_tls) time_print(bp, "This OCSP Update", thisupd);
2404       DEBUG(D_tls) if(nextupd) time_print(bp, "Next OCSP Update", nextupd);
2405       if (!OCSP_check_validity(thisupd, nextupd,
2406             EXIM_OCSP_SKEW_SECONDS, EXIM_OCSP_MAX_AGE))
2407         {
2408         tls_out.ocsp = OCSP_FAILED;
2409         DEBUG(D_tls) ERR_print_errors(bp);
2410         log_write(0, LOG_MAIN, "Server OSCP dates invalid");
2411         goto failed;
2412         }
2413
2414       DEBUG(D_tls) BIO_printf(bp, "Certificate status: %s\n",
2415                     OCSP_cert_status_str(status));
2416       switch(status)
2417         {
2418         case V_OCSP_CERTSTATUS_GOOD:
2419           continue;     /* the idx loop */
2420         case V_OCSP_CERTSTATUS_REVOKED:
2421           log_write(0, LOG_MAIN, "Server certificate revoked%s%s",
2422               reason != -1 ? "; reason: " : "",
2423               reason != -1 ? OCSP_crl_reason_str(reason) : "");
2424           DEBUG(D_tls) time_print(bp, "Revocation Time", rev);
2425           break;
2426         default:
2427           log_write(0, LOG_MAIN,
2428               "Server certificate status unknown, in OCSP stapling");
2429           break;
2430         }
2431
2432       goto failed;
2433       }
2434
2435     i = 1;
2436     tls_out.ocsp = OCSP_VFIED;
2437     goto good;
2438
2439   failed:
2440     tls_out.ocsp = OCSP_FAILED;
2441     i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
2442   good:
2443     BIO_free(bp);
2444   }
2445
2446 OCSP_RESPONSE_free(rsp);
2447 return i;
2448 }
2449 #endif  /*!DISABLE_OCSP*/
2450
2451
2452 /*************************************************
2453 *            Initialize for TLS                  *
2454 *************************************************/
2455 /* Called from both server and client code, to do preliminary initialization
2456 of the library.  We allocate and return a context structure.
2457
2458 Arguments:
2459   host            connected host, if client; NULL if server
2460   ob              transport options block, if client; NULL if server
2461   ocsp_file       file of stapling info (server); flag for require ocsp (client)
2462   addr            address if client; NULL if server (for some randomness)
2463   caller_state    place to put pointer to allocated state-struct
2464   errstr          error string pointer
2465
2466 Returns:          OK/DEFER/FAIL
2467 */
2468
2469 static int
2470 tls_init(host_item * host, smtp_transport_options_block * ob,
2471 #ifndef DISABLE_OCSP
2472   uschar *ocsp_file,
2473 #endif
2474   address_item *addr, exim_openssl_state_st ** caller_state,
2475   tls_support * tlsp,
2476   uschar ** errstr)
2477 {
2478 SSL_CTX * ctx;
2479 exim_openssl_state_st * state;
2480 int rc;
2481
2482 if (host)                       /* client */
2483   {
2484   state = store_malloc(sizeof(exim_openssl_state_st));
2485   memset(state, 0, sizeof(*state));
2486   state->certificate = ob->tls_certificate;
2487   state->privatekey =  ob->tls_privatekey;
2488   state->is_server = FALSE;
2489   state->dhparam = NULL;
2490   state->lib_state = ob->tls_preload;
2491   }
2492 else                            /* server */
2493   {
2494   state = &state_server;
2495   state->certificate = tls_certificate;
2496   state->privatekey =  tls_privatekey;
2497   state->is_server = TRUE;
2498   state->dhparam = tls_dhparam;
2499   state->lib_state = state_server.lib_state;
2500   }
2501
2502 state->tlsp = tlsp;
2503 state->host = host;
2504
2505 if (!state->lib_state.pri_string)
2506   state->server_cipher_list = NULL;
2507
2508 #ifndef DISABLE_EVENT
2509 state->event_action = NULL;
2510 #endif
2511
2512 tls_openssl_init();
2513
2514 /* It turns out that we need to seed the random number generator this early in
2515 order to get the full complement of ciphers to work. It took me roughly a day
2516 of work to discover this by experiment.
2517
2518 On systems that have /dev/urandom, SSL may automatically seed itself from
2519 there. Otherwise, we have to make something up as best we can. Double check
2520 afterwards.
2521
2522 Although we likely called this before, at daemon startup, this is a chance
2523 to mix in further variable info (time, pid) if needed. */
2524
2525 if (!lib_rand_init(addr))
2526   return tls_error(US"RAND_status", host,
2527     US"unable to seed random number generator", errstr);
2528
2529 /* Apply administrator-supplied work-arounds.
2530 Historically we applied just one requested option,
2531 SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS, but when bug 994 requested a second, we
2532 moved to an administrator-controlled list of options to specify and
2533 grandfathered in the first one as the default value for "openssl_options".
2534
2535 No OpenSSL version number checks: the options we accept depend upon the
2536 availability of the option value macros from OpenSSL.  */
2537
2538 if (!init_options)
2539   if (!tls_openssl_options_parse(openssl_options, &init_options))
2540     return tls_error(US"openssl_options parsing failed", host, NULL, errstr);
2541
2542 /* Create a context.
2543 The OpenSSL docs in 1.0.1b have not been updated to clarify TLS variant
2544 negotiation in the different methods; as far as I can tell, the only
2545 *_{server,client}_method which allows negotiation is SSLv23, which exists even
2546 when OpenSSL is built without SSLv2 support.
2547 By disabling with openssl_options, we can let admins re-enable with the
2548 existing knob. */
2549
2550 if (!(ctx = state->lib_state.lib_ctx))
2551   {
2552   if ((rc = lib_ctx_new(&ctx, host, errstr)) != OK)
2553     return rc;
2554   state->lib_state.lib_ctx = ctx;
2555   }
2556
2557 #ifndef DISABLE_TLS_RESUME
2558 tlsp->resumption = RESUME_SUPPORTED;
2559 #endif
2560 if (init_options)
2561   {
2562 #ifndef DISABLE_TLS_RESUME
2563   /* Should the server offer session resumption? */
2564   if (!host && verify_check_host(&tls_resumption_hosts) == OK)
2565     {
2566     DEBUG(D_tls) debug_printf("tls_resumption_hosts overrides openssl_options\n");
2567     init_options &= ~SSL_OP_NO_TICKET;
2568     tlsp->resumption |= RESUME_SERVER_TICKET; /* server will give ticket on request */
2569     tlsp->host_resumable = TRUE;
2570     }
2571 #endif
2572
2573   DEBUG(D_tls) debug_printf("setting SSL CTX options: %#lx\n", init_options);
2574   if (!(SSL_CTX_set_options(ctx, init_options)))
2575     return tls_error(string_sprintf(
2576           "SSL_CTX_set_option(%#lx)", init_options), host, NULL, errstr);
2577   }
2578 else
2579   DEBUG(D_tls) debug_printf("no SSL CTX options to set\n");
2580
2581 /* We'd like to disable session cache unconditionally, but foolish Outlook
2582 Express clients then give up the first TLS connection and make a second one
2583 (which works).  Only when there is an IMAP service on the same machine.
2584 Presumably OE is trying to use the cache for A on B.  Leave it enabled for
2585 now, until we work out a decent way of presenting control to the config.  It
2586 will never be used because we use a new context every time. */
2587 #ifdef notdef
2588 (void) SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
2589 #endif
2590
2591 /* Initialize with DH parameters if supplied */
2592 /* Initialize ECDH temp key parameter selection */
2593
2594 if (state->lib_state.dh)
2595   { DEBUG(D_tls) debug_printf("TLS: DH params were preloaded\n"); }
2596 else
2597   if (!init_dh(ctx, state->dhparam, host, errstr)) return DEFER;
2598
2599 if (state->lib_state.ecdh)
2600   { DEBUG(D_tls) debug_printf("TLS: ECDH curve was preloaded\n"); }
2601 else
2602   if (!init_ecdh(ctx, host, errstr)) return DEFER;
2603
2604 /* Set up certificate and key (and perhaps OCSP info) */
2605
2606 if (state->lib_state.conn_certs)
2607   {
2608   DEBUG(D_tls)
2609     debug_printf("TLS: %s certs were preloaded\n", host ? "client":"server");
2610   }
2611 else
2612   {
2613 #ifndef DISABLE_OCSP
2614   if (!host)
2615     {
2616     state->u_ocsp.server.file = ocsp_file;
2617     state->u_ocsp.server.file_expanded = NULL;
2618     state->u_ocsp.server.olist = NULL;
2619     }
2620 #endif
2621   if ((rc = tls_expand_session_files(ctx, state, errstr)) != OK) return rc;
2622   }
2623
2624 /* If we need to handle SNI or OCSP, do so */
2625
2626 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
2627 # ifndef DISABLE_OCSP
2628   if (!(state->verify_stack = sk_X509_new_null()))
2629     {
2630     DEBUG(D_tls) debug_printf("failed to create stack for stapling verify\n");
2631     return FAIL;
2632     }
2633 # endif
2634
2635 if (!host)              /* server */
2636   {
2637 # ifndef DISABLE_OCSP
2638   /* We check u_ocsp.server.file, not server.olist, because we care about if
2639   the option exists, not what the current expansion might be, as SNI might
2640   change the certificate and OCSP file in use between now and the time the
2641   callback is invoked. */
2642   if (state->u_ocsp.server.file)
2643     {
2644     SSL_CTX_set_tlsext_status_cb(ctx, tls_server_stapling_cb);
2645     SSL_CTX_set_tlsext_status_arg(ctx, state);
2646     }
2647 # endif
2648   /* We always do this, so that $tls_sni is available even if not used in
2649   tls_certificate */
2650   SSL_CTX_set_tlsext_servername_callback(ctx, tls_servername_cb);
2651   SSL_CTX_set_tlsext_servername_arg(ctx, state);
2652 # ifdef EXIM_HAVE_ALPN
2653   SSL_CTX_set_alpn_select_cb(ctx, tls_server_alpn_cb, state);
2654 # endif
2655   }
2656 # ifndef DISABLE_OCSP
2657 else                    /* client */
2658   if(ocsp_file)         /* wanting stapling */
2659     {
2660     if (!(state->u_ocsp.client.verify_store = X509_STORE_new()))
2661       {
2662       DEBUG(D_tls) debug_printf("failed to create store for stapling verify\n");
2663       return FAIL;
2664       }
2665     SSL_CTX_set_tlsext_status_cb(ctx, tls_client_stapling_cb);
2666     SSL_CTX_set_tlsext_status_arg(ctx, state);
2667     }
2668 # endif
2669 #endif
2670
2671 state->verify_cert_hostnames = NULL;
2672
2673 #ifdef EXIM_HAVE_EPHEM_RSA_KEX
2674 /* Set up the RSA callback */
2675 SSL_CTX_set_tmp_rsa_callback(ctx, rsa_callback);
2676 #endif
2677
2678 /* Finally, set the session cache timeout, and we are done.
2679 The period appears to be also used for (server-generated) session tickets */
2680
2681 SSL_CTX_set_timeout(ctx, ssl_session_timeout);
2682 DEBUG(D_tls) debug_printf("Initialized TLS\n");
2683
2684 *caller_state = state;
2685
2686 return OK;
2687 }
2688
2689
2690
2691
2692 /*************************************************
2693 *           Get name of cipher in use            *
2694 *************************************************/
2695
2696 /*
2697 Argument:   pointer to an SSL structure for the connection
2698             pointer to number of bits for cipher
2699 Returns:    pointer to allocated string in perm-pool
2700 */
2701
2702 static uschar *
2703 construct_cipher_name(SSL * ssl, const uschar * ver, int * bits)
2704 {
2705 int pool = store_pool;
2706 /* With OpenSSL 1.0.0a, 'c' needs to be const but the documentation doesn't
2707 yet reflect that.  It should be a safe change anyway, even 0.9.8 versions have
2708 the accessor functions use const in the prototype. */
2709
2710 const SSL_CIPHER * c = (const SSL_CIPHER *) SSL_get_current_cipher(ssl);
2711 uschar * s;
2712
2713 SSL_CIPHER_get_bits(c, bits);
2714
2715 store_pool = POOL_PERM;
2716 s = string_sprintf("%s:%s:%u", ver, SSL_CIPHER_get_name(c), *bits);
2717 store_pool = pool;
2718 DEBUG(D_tls) debug_printf("Cipher: %s\n", s);
2719 return s;
2720 }
2721
2722
2723 /* Get IETF-standard name for ciphersuite.
2724 Argument:   pointer to an SSL structure for the connection
2725 Returns:    pointer to string
2726 */
2727
2728 static const uschar *
2729 cipher_stdname_ssl(SSL * ssl)
2730 {
2731 #ifdef EXIM_HAVE_OPENSSL_CIPHER_STD_NAME
2732 return CUS SSL_CIPHER_standard_name(SSL_get_current_cipher(ssl));
2733 #else
2734 ushort id = 0xffff & SSL_CIPHER_get_id(SSL_get_current_cipher(ssl));
2735 return cipher_stdname(id >> 8, id & 0xff);
2736 #endif
2737 }
2738
2739
2740 static const uschar *
2741 tlsver_name(SSL * ssl)
2742 {
2743 uschar * s, * p;
2744 int pool = store_pool;
2745
2746 store_pool = POOL_PERM;
2747 s = string_copy(US SSL_get_version(ssl));
2748 store_pool = pool;
2749 if ((p = Ustrchr(s, 'v')))      /* TLSv1.2 -> TLS1.2 */
2750   for (;; p++) if (!(*p = p[1])) break;
2751 return CUS s;
2752 }
2753
2754
2755 static void
2756 peer_cert(SSL * ssl, tls_support * tlsp, uschar * peerdn, unsigned siz)
2757 {
2758 /*XXX we might consider a list-of-certs variable for the cert chain.
2759 SSL_get_peer_cert_chain(SSL*).  We'd need a new variable type and support
2760 in list-handling functions, also consider the difference between the entire
2761 chain and the elements sent by the peer. */
2762
2763 tlsp->peerdn = NULL;
2764
2765 /* Will have already noted peercert on a verify fail; possibly not the leaf */
2766 if (!tlsp->peercert)
2767   tlsp->peercert = SSL_get_peer_certificate(ssl);
2768 /* Beware anonymous ciphers which lead to server_cert being NULL */
2769 if (tlsp->peercert)
2770   if (!X509_NAME_oneline(X509_get_subject_name(tlsp->peercert), CS peerdn, siz))
2771     { DEBUG(D_tls) debug_printf("X509_NAME_oneline() error\n"); }
2772   else
2773     {
2774     int oldpool = store_pool;
2775
2776     peerdn[siz-1] = '\0';               /* paranoia */
2777     store_pool = POOL_PERM;
2778     tlsp->peerdn = string_copy(peerdn);
2779     store_pool = oldpool;
2780
2781     /* We used to set CV in the cert-verify callbacks (either plain or dane)
2782     but they don't get called on session-resumption.  So use the official
2783     interface, which uses the resumed value.  Unfortunately this claims verified
2784     when it actually failed but we're in try-verify mode, due to us wanting the
2785     knowlege that it failed so needing to have the callback and forcing a
2786     permissive return.  If we don't force it, the TLS startup is failed.
2787     The extra bit of information is set in verify_override in the cb, stashed
2788     for resumption next to the TLS session, and used here. */
2789
2790     if (!tlsp->verify_override)
2791       tlsp->certificate_verified =
2792 #ifdef SUPPORT_DANE
2793         tlsp->dane_verified ||
2794 #endif
2795         SSL_get_verify_result(ssl) == X509_V_OK;
2796     }
2797 }
2798
2799
2800
2801
2802
2803 /*************************************************
2804 *        Set up for verifying certificates       *
2805 *************************************************/
2806
2807 #ifndef DISABLE_OCSP
2808 /* Load certs from file, return TRUE on success */
2809
2810 static BOOL
2811 chain_from_pem_file(const uschar * file, STACK_OF(X509) ** vp)
2812 {
2813 BIO * bp;
2814 STACK_OF(X509) * verify_stack = *vp;
2815 X509 * x;
2816
2817 if (verify_stack)
2818   while (sk_X509_num(verify_stack) > 0)
2819     X509_free(sk_X509_pop(verify_stack));
2820 else
2821   verify_stack = sk_X509_new_null();
2822
2823 if (!(bp = BIO_new_file(CS file, "r"))) return FALSE;
2824 for (X509 * x; x = PEM_read_bio_X509(bp, NULL, 0, NULL); )
2825   sk_X509_push(verify_stack, x);
2826 BIO_free(bp);
2827 *vp = verify_stack;
2828 return TRUE;
2829 }
2830 #endif
2831
2832
2833
2834 /* Called by both client and server startup; on the server possibly
2835 repeated after a Server Name Indication.
2836
2837 Arguments:
2838   sctx          SSL_CTX* to initialise
2839   certs         certs file, expanded
2840   crl           CRL file or NULL
2841   host          NULL in a server; the remote host in a client
2842   errstr        error string pointer
2843
2844 Returns:        OK/DEFER/FAIL
2845 */
2846
2847 static int
2848 setup_certs(SSL_CTX *sctx, uschar *certs, uschar *crl, host_item *host,
2849     uschar ** errstr)
2850 {
2851 uschar *expcerts, *expcrl;
2852
2853 if (!expand_check(certs, US"tls_verify_certificates", &expcerts, errstr))
2854   return DEFER;
2855 DEBUG(D_tls) debug_printf("tls_verify_certificates: %s\n", expcerts);
2856
2857 if (expcerts && *expcerts)
2858   {
2859   /* Tell the library to use its compiled-in location for the system default
2860   CA bundle. Then add the ones specified in the config, if any. */
2861
2862   if (!SSL_CTX_set_default_verify_paths(sctx))
2863     return tls_error(US"SSL_CTX_set_default_verify_paths", host, NULL, errstr);
2864
2865   if (Ustrcmp(expcerts, "system") != 0 && Ustrncmp(expcerts, "system,", 7) != 0)
2866     {
2867     struct stat statbuf;
2868
2869     if (Ustat(expcerts, &statbuf) < 0)
2870       {
2871       log_write(0, LOG_MAIN|LOG_PANIC,
2872         "failed to stat %s for certificates", expcerts);
2873       return DEFER;
2874       }
2875     else
2876       {
2877       uschar *file, *dir;
2878       if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
2879         { file = NULL; dir = expcerts; }
2880       else
2881         {
2882         STACK_OF(X509) * verify_stack =
2883 #ifndef DISABLE_OCSP
2884           !host ? state_server.verify_stack :
2885 #endif
2886           NULL;
2887         STACK_OF(X509) ** vp = &verify_stack;
2888
2889         file = expcerts; dir = NULL;
2890 #ifndef DISABLE_OCSP
2891         /* In the server if we will be offering an OCSP proof, load chain from
2892         file for verifying the OCSP proof at load time. */
2893
2894 /*XXX Glitch!   The file here is tls_verify_certs: the chain for verifying the client cert.
2895 This is inconsistent with the need to verify the OCSP proof of the server cert.
2896 */
2897         if (  !host
2898            && statbuf.st_size > 0
2899            && state_server.u_ocsp.server.file
2900            && !chain_from_pem_file(file, vp)
2901            )
2902           {
2903           log_write(0, LOG_MAIN|LOG_PANIC,
2904             "failed to load cert chain from %s", file);
2905           return DEFER;
2906           }
2907 #endif
2908         }
2909
2910       /* If a certificate file is empty, the load function fails with an
2911       unhelpful error message. If we skip it, we get the correct behaviour (no
2912       certificates are recognized, but the error message is still misleading (it
2913       says no certificate was supplied).  But this is better. */
2914
2915       if (  (!file || statbuf.st_size > 0)
2916          && !SSL_CTX_load_verify_locations(sctx, CS file, CS dir))
2917           return tls_error(US"SSL_CTX_load_verify_locations",
2918                             host, NULL, errstr);
2919
2920       /* On the server load the list of CAs for which we will accept certs, for
2921       sending to the client.  This is only for the one-file
2922       tls_verify_certificates variant.
2923       If a list isn't loaded into the server, but some verify locations are set,
2924       the server end appears to make a wildcard request for client certs.
2925       Meanwhile, the client library as default behaviour *ignores* the list
2926       we send over the wire - see man SSL_CTX_set_client_cert_cb.
2927       Because of this, and that the dir variant is likely only used for
2928       the public-CA bundle (not for a private CA), not worth fixing.  */
2929
2930       if (file)
2931         {
2932         STACK_OF(X509_NAME) * names = SSL_load_client_CA_file(CS file);
2933         int i = sk_X509_NAME_num(names);
2934
2935         if (!host) SSL_CTX_set_client_CA_list(sctx, names);
2936         DEBUG(D_tls) debug_printf("Added %d additional certificate authorit%s\n",
2937                                     i, i>1 ? "ies":"y");
2938         }
2939       else
2940         DEBUG(D_tls)
2941           debug_printf("Added dir for additional certificate authorities\n");
2942       }
2943     }
2944
2945   /* Handle a certificate revocation list. */
2946
2947 #if OPENSSL_VERSION_NUMBER > 0x00907000L
2948
2949   /* This bit of code is now the version supplied by Lars Mainka. (I have
2950   merely reformatted it into the Exim code style.)
2951
2952   "From here I changed the code to add support for multiple crl's
2953   in pem format in one file or to support hashed directory entries in
2954   pem format instead of a file. This method now uses the library function
2955   X509_STORE_load_locations to add the CRL location to the SSL context.
2956   OpenSSL will then handle the verify against CA certs and CRLs by
2957   itself in the verify callback." */
2958
2959   if (!expand_check(crl, US"tls_crl", &expcrl, errstr)) return DEFER;
2960   if (expcrl && *expcrl)
2961     {
2962     struct stat statbufcrl;
2963     if (Ustat(expcrl, &statbufcrl) < 0)
2964       {
2965       log_write(0, LOG_MAIN|LOG_PANIC,
2966         "failed to stat %s for certificates revocation lists", expcrl);
2967       return DEFER;
2968       }
2969     else
2970       {
2971       /* is it a file or directory? */
2972       uschar *file, *dir;
2973       X509_STORE *cvstore = SSL_CTX_get_cert_store(sctx);
2974       if ((statbufcrl.st_mode & S_IFMT) == S_IFDIR)
2975         {
2976         file = NULL;
2977         dir = expcrl;
2978         DEBUG(D_tls) debug_printf("SSL CRL value is a directory %s\n", dir);
2979         }
2980       else
2981         {
2982         file = expcrl;
2983         dir = NULL;
2984         DEBUG(D_tls) debug_printf("SSL CRL value is a file %s\n", file);
2985         }
2986       if (X509_STORE_load_locations(cvstore, CS file, CS dir) == 0)
2987         return tls_error(US"X509_STORE_load_locations", host, NULL, errstr);
2988
2989       /* setting the flags to check against the complete crl chain */
2990
2991       X509_STORE_set_flags(cvstore,
2992         X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
2993       }
2994     }
2995
2996 #endif  /* OPENSSL_VERSION_NUMBER > 0x00907000L */
2997   }
2998
2999 return OK;
3000 }
3001
3002
3003
3004 /*************************************************
3005 *       Start a TLS session in a server          *
3006 *************************************************/
3007 /* This is called when Exim is running as a server, after having received
3008 the STARTTLS command. It must respond to that command, and then negotiate
3009 a TLS session.
3010
3011 Arguments:
3012   errstr            pointer to error message
3013
3014 Returns:            OK on success
3015                     DEFER for errors before the start of the negotiation
3016                     FAIL for errors during the negotiation; the server can't
3017                       continue running.
3018 */
3019
3020 int
3021 tls_server_start(uschar ** errstr)
3022 {
3023 int rc;
3024 uschar * expciphers;
3025 exim_openssl_state_st * dummy_statep;
3026 SSL_CTX * ctx;
3027 SSL * ssl;
3028 static uschar peerdn[256];
3029
3030 /* Check for previous activation */
3031
3032 if (tls_in.active.sock >= 0)
3033   {
3034   tls_error(US"STARTTLS received after TLS started", NULL, US"", errstr);
3035   smtp_printf("554 Already in TLS\r\n", FALSE);
3036   return FAIL;
3037   }
3038
3039 /* Initialize the SSL library. If it fails, it will already have logged
3040 the error. */
3041
3042 rc = tls_init(NULL, NULL,
3043 #ifndef DISABLE_OCSP
3044     tls_ocsp_file,
3045 #endif
3046     NULL, &dummy_statep, &tls_in, errstr);
3047 if (rc != OK) return rc;
3048 ctx = state_server.lib_state.lib_ctx;
3049
3050 /* In OpenSSL, cipher components are separated by hyphens. In GnuTLS, they
3051 were historically separated by underscores. So that I can use either form in my
3052 tests, and also for general convenience, we turn underscores into hyphens here.
3053
3054 XXX SSL_CTX_set_cipher_list() is replaced by SSL_CTX_set_ciphersuites()
3055 for TLS 1.3 .  Since we do not call it at present we get the default list:
3056 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
3057 */
3058
3059 if (state_server.lib_state.pri_string)
3060   { DEBUG(D_tls) debug_printf("TLS: cipher list was preloaded\n"); }
3061 else 
3062   {
3063   if (!expand_check(tls_require_ciphers, US"tls_require_ciphers", &expciphers, errstr))
3064     return FAIL;
3065
3066   if (  expciphers
3067      && (rc = server_load_ciphers(ctx, &state_server, expciphers, errstr)) != OK)
3068     return rc;
3069   }
3070
3071 /* If this is a host for which certificate verification is mandatory or
3072 optional, set up appropriately. */
3073
3074 tls_in.certificate_verified = FALSE;
3075 #ifdef SUPPORT_DANE
3076 tls_in.dane_verified = FALSE;
3077 #endif
3078 server_verify_callback_called = FALSE;
3079
3080 if (verify_check_host(&tls_verify_hosts) == OK)
3081   server_verify_optional = FALSE;
3082 else if (verify_check_host(&tls_try_verify_hosts) == OK)
3083   server_verify_optional = TRUE;
3084 else
3085   goto skip_certs;
3086
3087   {
3088   uschar * expcerts;
3089   if (!expand_check(tls_verify_certificates, US"tls_verify_certificates",
3090                     &expcerts, errstr))
3091     return DEFER;
3092   DEBUG(D_tls) debug_printf("tls_verify_certificates: %s\n", expcerts);
3093
3094   if (state_server.lib_state.cabundle)
3095     { DEBUG(D_tls) debug_printf("TLS: CA bundle for server was preloaded\n"); }
3096   else
3097     if ((rc = setup_certs(ctx, expcerts, tls_crl, NULL, errstr)) != OK)
3098       return rc;
3099
3100   if (expcerts && *expcerts)
3101     setup_cert_verify(ctx, server_verify_optional, verify_callback_server);
3102   }
3103 skip_certs: ;
3104
3105 #ifndef DISABLE_TLS_RESUME
3106 SSL_CTX_set_tlsext_ticket_key_cb(ctx, ticket_key_callback);
3107 /* despite working, appears to always return failure, so ignoring */
3108 #endif
3109 #ifdef OPENSSL_HAVE_NUM_TICKETS
3110 # ifndef DISABLE_TLS_RESUME
3111 SSL_CTX_set_num_tickets(ctx, tls_in.host_resumable ? 1 : 0);
3112 # else
3113 SSL_CTX_set_num_tickets(ctx, 0);        /* send no TLS1.3 stateful-tickets */
3114 # endif
3115 #endif
3116
3117
3118 /* Prepare for new connection */
3119
3120 if (!(ssl = SSL_new(ctx)))
3121   return tls_error(US"SSL_new", NULL, NULL, errstr);
3122 state_server.lib_state.lib_ssl = ssl;
3123
3124 /* Warning: we used to SSL_clear(ssl) here, it was removed.
3125  *
3126  * With the SSL_clear(), we get strange interoperability bugs with
3127  * OpenSSL 1.0.1b and TLS1.1/1.2.  It looks as though this may be a bug in
3128  * OpenSSL itself, as a clear should not lead to inability to follow protocols.
3129  *
3130  * The SSL_clear() call is to let an existing SSL* be reused, typically after
3131  * session shutdown.  In this case, we have a brand new object and there's no
3132  * obvious reason to immediately clear it.  I'm guessing that this was
3133  * originally added because of incomplete initialisation which the clear fixed,
3134  * in some historic release.
3135  */
3136
3137 /* Set context and tell client to go ahead, except in the case of TLS startup
3138 on connection, where outputting anything now upsets the clients and tends to
3139 make them disconnect. We need to have an explicit fflush() here, to force out
3140 the response. Other smtp_printf() calls do not need it, because in non-TLS
3141 mode, the fflush() happens when smtp_getc() is called. */
3142
3143 SSL_set_session_id_context(ssl, sid_ctx, Ustrlen(sid_ctx));
3144 if (!tls_in.on_connect)
3145   {
3146   smtp_printf("220 TLS go ahead\r\n", FALSE);
3147   fflush(smtp_out);
3148   }
3149
3150 /* Now negotiate the TLS session. We put our own timer on it, since it seems
3151 that the OpenSSL library doesn't. */
3152
3153 SSL_set_wfd(ssl, fileno(smtp_out));
3154 SSL_set_rfd(ssl, fileno(smtp_in));
3155 SSL_set_accept_state(ssl);
3156
3157 DEBUG(D_tls) debug_printf("Calling SSL_accept\n");
3158
3159 ERR_clear_error();
3160 sigalrm_seen = FALSE;
3161 if (smtp_receive_timeout > 0) ALARM(smtp_receive_timeout);
3162 rc = SSL_accept(ssl);
3163 ALARM_CLR(0);
3164
3165 if (rc <= 0)
3166   {
3167   int error = SSL_get_error(ssl, rc);
3168   switch(error)
3169     {
3170     case SSL_ERROR_NONE:
3171       break;
3172
3173     case SSL_ERROR_ZERO_RETURN:
3174       DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
3175       (void) tls_error(US"SSL_accept", NULL, sigalrm_seen ? US"timed out" : NULL, errstr);
3176
3177       if (SSL_get_shutdown(ssl) == SSL_RECEIVED_SHUTDOWN)
3178             SSL_shutdown(ssl);
3179
3180       tls_close(NULL, TLS_NO_SHUTDOWN);
3181       return FAIL;
3182
3183     /* Handle genuine errors */
3184     case SSL_ERROR_SSL:
3185       {
3186       uschar * s = NULL;
3187       int r = ERR_GET_REASON(ERR_peek_error());
3188       if (  r == SSL_R_WRONG_VERSION_NUMBER
3189 #ifdef SSL_R_VERSION_TOO_LOW
3190          || r == SSL_R_VERSION_TOO_LOW
3191 #endif
3192          || r == SSL_R_UNKNOWN_PROTOCOL || r == SSL_R_UNSUPPORTED_PROTOCOL)
3193         s = string_sprintf("%s (%s)", s, SSL_get_version(ssl));
3194       (void) tls_error(US"SSL_accept", NULL, sigalrm_seen ? US"timed out" : s, errstr);
3195       return FAIL;
3196       }
3197
3198     default:
3199       DEBUG(D_tls) debug_printf("Got SSL error %d\n", error);
3200       if (error == SSL_ERROR_SYSCALL)
3201         {
3202         if (!errno)
3203           {
3204           *errstr = US"SSL_accept: TCP connection closed by peer";
3205           return FAIL;
3206           }
3207         DEBUG(D_tls) debug_printf(" - syscall %s\n", strerror(errno));
3208         }
3209       (void) tls_error(US"SSL_accept", NULL,
3210                       sigalrm_seen ? US"timed out"
3211                       : ERR_peek_error() ? NULL : string_sprintf("ret %d", error),
3212                       errstr);
3213       return FAIL;
3214     }
3215   }
3216
3217 DEBUG(D_tls) debug_printf("SSL_accept was successful\n");
3218 ERR_clear_error();      /* Even success can leave errors in the stack. Seen with
3219                         anon-authentication ciphersuite negotiated. */
3220
3221 #ifndef DISABLE_TLS_RESUME
3222 if (SSL_session_reused(ssl))
3223   {
3224   tls_in.resumption |= RESUME_USED;
3225   DEBUG(D_tls) debug_printf("Session reused\n");
3226   }
3227 #endif
3228
3229 /* TLS has been set up. Record data for the connection,
3230 adjust the input functions to read via TLS, and initialize things. */
3231
3232 #ifdef SSL_get_extms_support
3233 tls_in.ext_master_secret = SSL_get_extms_support(ssl) == 1;
3234 #endif
3235 peer_cert(ssl, &tls_in, peerdn, sizeof(peerdn));
3236
3237 tls_in.ver = tlsver_name(ssl);
3238 tls_in.cipher = construct_cipher_name(ssl, tls_in.ver, &tls_in.bits);
3239 tls_in.cipher_stdname = cipher_stdname_ssl(ssl);
3240
3241 DEBUG(D_tls)
3242   {
3243   uschar buf[2048];
3244   if (SSL_get_shared_ciphers(ssl, CS buf, sizeof(buf)))
3245     debug_printf("Shared ciphers: %s\n", buf);
3246
3247 #ifdef EXIM_HAVE_OPENSSL_KEYLOG
3248   {
3249   BIO * bp = BIO_new_fp(debug_file, BIO_NOCLOSE);
3250   SSL_SESSION_print_keylog(bp, SSL_get_session(ssl));
3251   BIO_free(bp);
3252   }
3253 #endif
3254
3255 #ifdef EXIM_HAVE_SESSION_TICKET
3256   {
3257   SSL_SESSION * ss = SSL_get_session(ssl);
3258   if (SSL_SESSION_has_ticket(ss))       /* 1.1.0 */
3259     debug_printf("The session has a ticket, life %lu seconds\n",
3260       SSL_SESSION_get_ticket_lifetime_hint(ss));
3261   }
3262 #endif
3263   }
3264
3265 /* Record the certificate we presented */
3266   {
3267   X509 * crt = SSL_get_certificate(ssl);
3268   tls_in.ourcert = crt ? X509_dup(crt) : NULL;
3269   }
3270
3271 /* Channel-binding info for authenticators
3272 See description in https://paquier.xyz/postgresql-2/channel-binding-openssl/ */
3273   {
3274   uschar c, * s;
3275   size_t len = SSL_get_peer_finished(ssl, &c, 0);
3276   int old_pool = store_pool;
3277
3278   SSL_get_peer_finished(ssl, s = store_get((int)len, FALSE), len);
3279   store_pool = POOL_PERM;
3280     tls_in.channelbinding = b64encode_taint(CUS s, (int)len, FALSE);
3281   store_pool = old_pool;
3282   DEBUG(D_tls) debug_printf("Have channel bindings cached for possible auth usage %p\n", tls_in.channelbinding);
3283   }
3284
3285 /* Only used by the server-side tls (tls_in), including tls_getc.
3286    Client-side (tls_out) reads (seem to?) go via
3287    smtp_read_response()/ip_recv().
3288    Hence no need to duplicate for _in and _out.
3289  */
3290 if (!ssl_xfer_buffer) ssl_xfer_buffer = store_malloc(ssl_xfer_buffer_size);
3291 ssl_xfer_buffer_lwm = ssl_xfer_buffer_hwm = 0;
3292 ssl_xfer_eof = ssl_xfer_error = FALSE;
3293
3294 receive_getc = tls_getc;
3295 receive_getbuf = tls_getbuf;
3296 receive_get_cache = tls_get_cache;
3297 receive_ungetc = tls_ungetc;
3298 receive_feof = tls_feof;
3299 receive_ferror = tls_ferror;
3300 receive_smtp_buffered = tls_smtp_buffered;
3301
3302 tls_in.active.sock = fileno(smtp_out);
3303 tls_in.active.tls_ctx = NULL;   /* not using explicit ctx for server-side */
3304 return OK;
3305 }
3306
3307
3308
3309
3310 static int
3311 tls_client_basic_ctx_init(SSL_CTX * ctx,
3312     host_item * host, smtp_transport_options_block * ob, exim_openssl_state_st * state,
3313     uschar ** errstr)
3314 {
3315 int rc;
3316
3317 /* Back-compatible old behaviour if tls_verify_certificates is set but both
3318 tls_verify_hosts and tls_try_verify_hosts are not set. Check only the specified
3319 host patterns if one of them is set with content. */
3320
3321 if (  (  (  !ob->tls_verify_hosts || !ob->tls_verify_hosts
3322          || Ustrcmp(ob->tls_try_verify_hosts, ":") == 0
3323          )
3324       && (  !ob->tls_try_verify_hosts || !*ob->tls_try_verify_hosts
3325          || Ustrcmp(ob->tls_try_verify_hosts, ":") == 0
3326          )
3327       )
3328    || verify_check_given_host(CUSS &ob->tls_verify_hosts, host) == OK
3329    )
3330   client_verify_optional = FALSE;
3331 else if (verify_check_given_host(CUSS &ob->tls_try_verify_hosts, host) == OK)
3332   client_verify_optional = TRUE;
3333 else
3334   return OK;
3335
3336   {
3337   uschar * expcerts;
3338   if (!expand_check(ob->tls_verify_certificates, US"tls_verify_certificates",
3339                     &expcerts, errstr))
3340     return DEFER;
3341   DEBUG(D_tls) debug_printf("tls_verify_certificates: %s\n", expcerts);
3342
3343   if (state->lib_state.cabundle)
3344     { DEBUG(D_tls) debug_printf("TLS: CA bundle was preloaded\n"); }
3345   else
3346     if ((rc = setup_certs(ctx, expcerts, ob->tls_crl, host, errstr)) != OK)
3347       return rc;
3348
3349   if (expcerts && *expcerts)
3350     setup_cert_verify(ctx, client_verify_optional, verify_callback_client);
3351   }
3352
3353 if (verify_check_given_host(CUSS &ob->tls_verify_cert_hostnames, host) == OK)
3354   {
3355   state->verify_cert_hostnames =
3356 #ifdef SUPPORT_I18N
3357     string_domain_utf8_to_alabel(host->certname, NULL);
3358 #else
3359     host->certname;
3360 #endif
3361   DEBUG(D_tls) debug_printf("Cert hostname to check: \"%s\"\n",
3362                     state->verify_cert_hostnames);
3363   }
3364 return OK;
3365 }
3366
3367
3368 #ifdef SUPPORT_DANE
3369 static int
3370 dane_tlsa_load(SSL * ssl, host_item * host, dns_answer * dnsa, uschar ** errstr)
3371 {
3372 dns_scan dnss;
3373 const char * hostnames[2] = { CS host->name, NULL };
3374 int found = 0;
3375
3376 if (DANESSL_init(ssl, NULL, hostnames) != 1)
3377   return tls_error(US"hostnames load", host, NULL, errstr);
3378
3379 for (dns_record * rr = dns_next_rr(dnsa, &dnss, RESET_ANSWERS); rr;
3380      rr = dns_next_rr(dnsa, &dnss, RESET_NEXT)
3381     ) if (rr->type == T_TLSA && rr->size > 3)
3382   {
3383   const uschar * p = rr->data;
3384   uint8_t usage, selector, mtype;
3385   const char * mdname;
3386
3387   usage = *p++;
3388
3389   /* Only DANE-TA(2) and DANE-EE(3) are supported */
3390   if (usage != 2 && usage != 3) continue;
3391
3392   selector = *p++;
3393   mtype = *p++;
3394
3395   switch (mtype)
3396     {
3397     default: continue;  /* Only match-types 0, 1, 2 are supported */
3398     case 0:  mdname = NULL; break;
3399     case 1:  mdname = "sha256"; break;
3400     case 2:  mdname = "sha512"; break;
3401     }
3402
3403   found++;
3404   switch (DANESSL_add_tlsa(ssl, usage, selector, mdname, p, rr->size - 3))
3405     {
3406     default:
3407       return tls_error(US"tlsa load", host, NULL, errstr);
3408     case 0:     /* action not taken */
3409     case 1:     break;
3410     }
3411
3412   tls_out.tlsa_usage |= 1<<usage;
3413   }
3414
3415 if (found)
3416   return OK;
3417
3418 log_write(0, LOG_MAIN, "DANE error: No usable TLSA records");
3419 return DEFER;
3420 }
3421 #endif  /*SUPPORT_DANE*/
3422
3423
3424
3425 #ifndef DISABLE_TLS_RESUME
3426 /* On the client, get any stashed session for the given IP from hints db
3427 and apply it to the ssl-connection for attempted resumption. */
3428
3429 static void
3430 tls_retrieve_session(tls_support * tlsp, SSL * ssl, const uschar * key)
3431 {
3432 tlsp->resumption |= RESUME_SUPPORTED;
3433 if (tlsp->host_resumable)
3434   {
3435   dbdata_tls_session * dt;
3436   int len;
3437   open_db dbblock, * dbm_file;
3438
3439   tlsp->resumption |= RESUME_CLIENT_REQUESTED;
3440   DEBUG(D_tls) debug_printf("checking for resumable session for %s\n", key);
3441   if ((dbm_file = dbfn_open(US"tls", O_RDWR, &dbblock, FALSE, FALSE)))
3442     {
3443     /* key for the db is the IP */
3444     if ((dt = dbfn_read_with_length(dbm_file, key, &len)))
3445       {
3446       SSL_SESSION * ss = NULL;
3447       const uschar * sess_asn1 = dt->session;
3448
3449       len -= sizeof(dbdata_tls_session);
3450       if (!(d2i_SSL_SESSION(&ss, &sess_asn1, (long)len)))
3451         {
3452         DEBUG(D_tls)
3453           {
3454           ERR_error_string_n(ERR_get_error(),
3455             ssl_errstring, sizeof(ssl_errstring));
3456           debug_printf("decoding session: %s\n", ssl_errstring);
3457           }
3458         }
3459       else
3460         {
3461         unsigned long lifetime =
3462 #ifdef EXIM_HAVE_SESSION_TICKET
3463           SSL_SESSION_get_ticket_lifetime_hint(ss);
3464 #else                   /* Use, fairly arbitrilarily, what we as server would */
3465           f.running_in_test_harness ? 6 : ssl_session_timeout;
3466 #endif
3467         if (lifetime + dt->time_stamp < time(NULL))
3468           {
3469           DEBUG(D_tls) debug_printf("session expired\n");
3470           dbfn_delete(dbm_file, key);
3471           }
3472         else if (!SSL_set_session(ssl, ss))
3473           {
3474           DEBUG(D_tls)
3475             {
3476             ERR_error_string_n(ERR_get_error(),
3477               ssl_errstring, sizeof(ssl_errstring));
3478             debug_printf("applying session to ssl: %s\n", ssl_errstring);
3479             }
3480           }
3481         else
3482           {
3483           DEBUG(D_tls) debug_printf("good session\n");
3484           tlsp->resumption |= RESUME_CLIENT_SUGGESTED;
3485           tlsp->verify_override = dt->verify_override;
3486           tlsp->ocsp = dt->ocsp;
3487           }
3488         }
3489       }
3490     else
3491       DEBUG(D_tls) debug_printf("no session record\n");
3492     dbfn_close(dbm_file);
3493     }
3494   }
3495 }
3496
3497
3498 /* On the client, save the session for later resumption */
3499
3500 static int
3501 tls_save_session_cb(SSL * ssl, SSL_SESSION * ss)
3502 {
3503 exim_openssl_state_st * cbinfo = SSL_get_ex_data(ssl, tls_exdata_idx);
3504 tls_support * tlsp;
3505
3506 DEBUG(D_tls) debug_printf("tls_save_session_cb\n");
3507
3508 if (!cbinfo || !(tlsp = cbinfo->tlsp)->host_resumable) return 0;
3509
3510 # ifdef OPENSSL_HAVE_NUM_TICKETS
3511 if (SSL_SESSION_is_resumable(ss))       /* 1.1.1 */
3512 # endif
3513   {
3514   int len = i2d_SSL_SESSION(ss, NULL);
3515   int dlen = sizeof(dbdata_tls_session) + len;
3516   dbdata_tls_session * dt = store_get(dlen, TRUE);
3517   uschar * s = dt->session;
3518   open_db dbblock, * dbm_file;
3519
3520   DEBUG(D_tls) debug_printf("session is resumable\n");
3521   tlsp->resumption |= RESUME_SERVER_TICKET;     /* server gave us a ticket */
3522
3523   dt->verify_override = tlsp->verify_override;
3524   dt->ocsp = tlsp->ocsp;
3525   (void) i2d_SSL_SESSION(ss, &s);               /* s gets bumped to end */
3526
3527   if ((dbm_file = dbfn_open(US"tls", O_RDWR, &dbblock, FALSE, FALSE)))
3528     {
3529     const uschar * key = cbinfo->host->address;
3530     dbfn_delete(dbm_file, key);
3531     dbfn_write(dbm_file, key, dt, dlen);
3532     dbfn_close(dbm_file);
3533     DEBUG(D_tls) debug_printf("wrote session (len %u) to db\n",
3534                   (unsigned)dlen);
3535     }
3536   }
3537 return 1;
3538 }
3539
3540
3541 static void
3542 tls_client_ctx_resume_prehandshake(
3543   exim_openssl_client_tls_ctx * exim_client_ctx, tls_support * tlsp,
3544   smtp_transport_options_block * ob, host_item * host)
3545 {
3546 /* Should the client request a session resumption ticket? */
3547 if (verify_check_given_host(CUSS &ob->tls_resumption_hosts, host) == OK)
3548   {
3549   tlsp->host_resumable = TRUE;
3550
3551   SSL_CTX_set_session_cache_mode(exim_client_ctx->ctx,
3552         SSL_SESS_CACHE_CLIENT
3553         | SSL_SESS_CACHE_NO_INTERNAL | SSL_SESS_CACHE_NO_AUTO_CLEAR);
3554   SSL_CTX_sess_set_new_cb(exim_client_ctx->ctx, tls_save_session_cb);
3555   }
3556 }
3557
3558 static BOOL
3559 tls_client_ssl_resume_prehandshake(SSL * ssl, tls_support * tlsp,
3560   host_item * host, uschar ** errstr)
3561 {
3562 if (tlsp->host_resumable)
3563   {
3564   DEBUG(D_tls)
3565     debug_printf("tls_resumption_hosts overrides openssl_options, enabling tickets\n");
3566   SSL_clear_options(ssl, SSL_OP_NO_TICKET);
3567
3568   tls_exdata_idx = SSL_get_ex_new_index(0, 0, 0, 0, 0);
3569   if (!SSL_set_ex_data(ssl, tls_exdata_idx, client_static_state))
3570     {
3571     tls_error(US"set ex_data", host, NULL, errstr);
3572     return FALSE;
3573     }
3574   debug_printf("tls_exdata_idx %d cbinfo %p\n", tls_exdata_idx, client_static_state);
3575   }
3576
3577 tlsp->resumption = RESUME_SUPPORTED;
3578 /* Pick up a previous session, saved on an old ticket */
3579 tls_retrieve_session(tlsp, ssl, host->address);
3580 return TRUE;
3581 }
3582
3583 static void
3584 tls_client_resume_posthandshake(exim_openssl_client_tls_ctx * exim_client_ctx,
3585   tls_support * tlsp)
3586 {
3587 if (SSL_session_reused(exim_client_ctx->ssl))
3588   {
3589   DEBUG(D_tls) debug_printf("The session was reused\n");
3590   tlsp->resumption |= RESUME_USED;
3591   }
3592 }
3593 #endif  /* !DISABLE_TLS_RESUME */
3594
3595
3596 /*************************************************
3597 *    Start a TLS session in a client             *
3598 *************************************************/
3599
3600 /* Called from the smtp transport after STARTTLS has been accepted.
3601
3602 Arguments:
3603   cctx          connection context
3604   conn_args     connection details
3605   cookie        datum for randomness; can be NULL
3606   tlsp          record details of TLS channel configuration here; must be non-NULL
3607   errstr        error string pointer
3608
3609 Returns:        TRUE for success with TLS session context set in connection context,
3610                 FALSE on error
3611 */
3612
3613 BOOL
3614 tls_client_start(client_conn_ctx * cctx, smtp_connect_args * conn_args,
3615   void * cookie, tls_support * tlsp, uschar ** errstr)
3616 {
3617 host_item * host = conn_args->host;             /* for msgs and option-tests */
3618 transport_instance * tb = conn_args->tblock;    /* always smtp or NULL */
3619 smtp_transport_options_block * ob = tb
3620   ? (smtp_transport_options_block *)tb->options_block
3621   : &smtp_transport_option_defaults;
3622 exim_openssl_client_tls_ctx * exim_client_ctx;
3623 uschar * expciphers;
3624 int rc;
3625 static uschar peerdn[256];
3626
3627 #ifndef DISABLE_OCSP
3628 BOOL request_ocsp = FALSE;
3629 BOOL require_ocsp = FALSE;
3630 #endif
3631
3632 rc = store_pool;
3633 store_pool = POOL_PERM;
3634 exim_client_ctx = store_get(sizeof(exim_openssl_client_tls_ctx), FALSE);
3635 exim_client_ctx->corked = NULL;
3636 store_pool = rc;
3637
3638 #ifdef SUPPORT_DANE
3639 tlsp->tlsa_usage = 0;
3640 #endif
3641
3642 #ifndef DISABLE_OCSP
3643   {
3644 # ifdef SUPPORT_DANE
3645   /*XXX this should be moved to caller, to be common across gnutls/openssl */
3646   if (  conn_args->dane
3647      && ob->hosts_request_ocsp[0] == '*'
3648      && ob->hosts_request_ocsp[1] == '\0'
3649      )
3650     {
3651     /* Unchanged from default.  Use a safer one under DANE */
3652     request_ocsp = TRUE;
3653     ob->hosts_request_ocsp = US"${if or { {= {0}{$tls_out_tlsa_usage}} "
3654                                       "   {= {4}{$tls_out_tlsa_usage}} } "
3655                                  " {*}{}}";
3656     }
3657 # endif
3658
3659   if ((require_ocsp =
3660         verify_check_given_host(CUSS &ob->hosts_require_ocsp, host) == OK))
3661     request_ocsp = TRUE;
3662   else
3663 # ifdef SUPPORT_DANE
3664     if (!request_ocsp)
3665 # endif
3666       request_ocsp =
3667         verify_check_given_host(CUSS &ob->hosts_request_ocsp, host) == OK;
3668   }
3669 #endif
3670
3671 rc = tls_init(host, ob,
3672 #ifndef DISABLE_OCSP
3673     (void *)(long)request_ocsp,
3674 #endif
3675     cookie, &client_static_state, tlsp, errstr);
3676 if (rc != OK) return FALSE;
3677
3678 exim_client_ctx->ctx = client_static_state->lib_state.lib_ctx;
3679
3680 tlsp->certificate_verified = FALSE;
3681 client_verify_callback_called = FALSE;
3682
3683 expciphers = NULL;
3684 #ifdef SUPPORT_DANE
3685 if (conn_args->dane)
3686   {
3687   /* We fall back to tls_require_ciphers if unset, empty or forced failure, but
3688   other failures should be treated as problems. */
3689   if (ob->dane_require_tls_ciphers &&
3690       !expand_check(ob->dane_require_tls_ciphers, US"dane_require_tls_ciphers",
3691         &expciphers, errstr))
3692     return FALSE;
3693   if (expciphers && *expciphers == '\0')
3694     expciphers = NULL;
3695   }
3696 #endif
3697 if (!expciphers &&
3698     !expand_check(ob->tls_require_ciphers, US"tls_require_ciphers",
3699       &expciphers, errstr))
3700   return FALSE;
3701
3702 /* In OpenSSL, cipher components are separated by hyphens. In GnuTLS, they
3703 are separated by underscores. So that I can use either form in my tests, and
3704 also for general convenience, we turn underscores into hyphens here. */
3705
3706 if (expciphers)
3707   {
3708   uschar *s = expciphers;
3709   while (*s) { if (*s == '_') *s = '-'; s++; }
3710   DEBUG(D_tls) debug_printf("required ciphers: %s\n", expciphers);
3711   if (!SSL_CTX_set_cipher_list(exim_client_ctx->ctx, CS expciphers))
3712     {
3713     tls_error(US"SSL_CTX_set_cipher_list", host, NULL, errstr);
3714     return FALSE;
3715     }
3716   }
3717
3718 #ifdef SUPPORT_DANE
3719 if (conn_args->dane)
3720   {
3721   SSL_CTX_set_verify(exim_client_ctx->ctx,
3722     SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT,
3723     verify_callback_client_dane);
3724
3725   if (!DANESSL_library_init())
3726     {
3727     tls_error(US"library init", host, NULL, errstr);
3728     return FALSE;
3729     }
3730   if (DANESSL_CTX_init(exim_client_ctx->ctx) <= 0)
3731     {
3732     tls_error(US"context init", host, NULL, errstr);
3733     return FALSE;
3734     }
3735   }
3736 else
3737
3738 #endif
3739
3740 if (tls_client_basic_ctx_init(exim_client_ctx->ctx, host, ob,
3741       client_static_state, errstr) != OK)
3742   return FALSE;
3743
3744 #ifndef DISABLE_TLS_RESUME
3745 tls_client_ctx_resume_prehandshake(exim_client_ctx, tlsp, ob, host);
3746 #endif
3747
3748
3749 if (!(exim_client_ctx->ssl = SSL_new(exim_client_ctx->ctx)))
3750   {
3751   tls_error(US"SSL_new", host, NULL, errstr);
3752   return FALSE;
3753   }
3754 SSL_set_session_id_context(exim_client_ctx->ssl, sid_ctx, Ustrlen(sid_ctx));
3755
3756 SSL_set_fd(exim_client_ctx->ssl, cctx->sock);
3757 SSL_set_connect_state(exim_client_ctx->ssl);
3758
3759 if (ob->tls_sni)
3760   {
3761   if (!expand_check(ob->tls_sni, US"tls_sni", &tlsp->sni, errstr))
3762     return FALSE;
3763   if (!tlsp->sni)
3764     {
3765     DEBUG(D_tls) debug_printf("Setting TLS SNI forced to fail, not sending\n");
3766     }
3767   else if (!Ustrlen(tlsp->sni))
3768     tlsp->sni = NULL;
3769   else
3770     {
3771 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
3772     DEBUG(D_tls) debug_printf("Setting TLS SNI \"%s\"\n", tlsp->sni);
3773     SSL_set_tlsext_host_name(exim_client_ctx->ssl, tlsp->sni);
3774 #else
3775     log_write(0, LOG_MAIN, "SNI unusable with this OpenSSL library version; ignoring \"%s\"\n",
3776           tlsp->sni);
3777 #endif
3778     }
3779   }
3780
3781 #ifdef SUPPORT_DANE
3782 if (conn_args->dane)
3783   if (dane_tlsa_load(exim_client_ctx->ssl, host, &conn_args->tlsa_dnsa, errstr) != OK)
3784     return FALSE;
3785 #endif
3786
3787 #ifndef DISABLE_OCSP
3788 /* Request certificate status at connection-time.  If the server
3789 does OCSP stapling we will get the callback (set in tls_init()) */
3790 # ifdef SUPPORT_DANE
3791 if (request_ocsp)
3792   {
3793   const uschar * s;
3794   if (  ((s = ob->hosts_require_ocsp) && Ustrstr(s, US"tls_out_tlsa_usage"))
3795      || ((s = ob->hosts_request_ocsp) && Ustrstr(s, US"tls_out_tlsa_usage"))
3796      )
3797     {   /* Re-eval now $tls_out_tlsa_usage is populated.  If
3798         this means we avoid the OCSP request, we wasted the setup
3799         cost in tls_init(). */
3800     require_ocsp = verify_check_given_host(CUSS &ob->hosts_require_ocsp, host) == OK;
3801     request_ocsp = require_ocsp
3802       || verify_check_given_host(CUSS &ob->hosts_request_ocsp, host) == OK;
3803     }
3804   }
3805 # endif
3806
3807 if (request_ocsp)
3808   {
3809   SSL_set_tlsext_status_type(exim_client_ctx->ssl, TLSEXT_STATUSTYPE_ocsp);
3810   client_static_state->u_ocsp.client.verify_required = require_ocsp;
3811   tlsp->ocsp = OCSP_NOT_RESP;
3812   }
3813 #endif
3814
3815 #ifndef DISABLE_TLS_RESUME
3816 if (!tls_client_ssl_resume_prehandshake(exim_client_ctx->ssl, tlsp, host,
3817       errstr))
3818   return FALSE;
3819 #endif
3820
3821 #ifndef DISABLE_EVENT
3822 client_static_state->event_action = tb ? tb->event_action : NULL;
3823 #endif
3824
3825 /* There doesn't seem to be a built-in timeout on connection. */
3826
3827 DEBUG(D_tls) debug_printf("Calling SSL_connect\n");
3828 sigalrm_seen = FALSE;
3829 ALARM(ob->command_timeout);
3830 rc = SSL_connect(exim_client_ctx->ssl);
3831 ALARM_CLR(0);
3832
3833 #ifdef SUPPORT_DANE
3834 if (conn_args->dane)
3835   DANESSL_cleanup(exim_client_ctx->ssl);
3836 #endif
3837
3838 if (rc <= 0)
3839   {
3840   tls_error(US"SSL_connect", host, sigalrm_seen ? US"timed out" : NULL, errstr);
3841   return FALSE;
3842   }
3843
3844 DEBUG(D_tls)
3845   {
3846   debug_printf("SSL_connect succeeded\n");
3847 #ifdef EXIM_HAVE_OPENSSL_KEYLOG
3848   {
3849   BIO * bp = BIO_new_fp(debug_file, BIO_NOCLOSE);
3850   SSL_SESSION_print_keylog(bp, SSL_get_session(exim_client_ctx->ssl));
3851   BIO_free(bp);
3852   }
3853 #endif
3854   }
3855
3856 #ifndef DISABLE_TLS_RESUME
3857 tls_client_resume_posthandshake(exim_client_ctx, tlsp);
3858 #endif
3859
3860 #ifdef SSL_get_extms_support
3861 tlsp->ext_master_secret = SSL_get_extms_support(exim_client_ctx->ssl) == 1;
3862 #endif
3863 peer_cert(exim_client_ctx->ssl, tlsp, peerdn, sizeof(peerdn));
3864
3865 tlsp->ver = tlsver_name(exim_client_ctx->ssl);
3866 tlsp->cipher = construct_cipher_name(exim_client_ctx->ssl, tlsp->ver, &tlsp->bits);
3867 tlsp->cipher_stdname = cipher_stdname_ssl(exim_client_ctx->ssl);
3868
3869 /* Record the certificate we presented */
3870   {
3871   X509 * crt = SSL_get_certificate(exim_client_ctx->ssl);
3872   tlsp->ourcert = crt ? X509_dup(crt) : NULL;
3873   }
3874
3875 /*XXX will this work with continued-TLS? */
3876 /* Channel-binding info for authenticators */
3877   {
3878   uschar c, * s;
3879   size_t len = SSL_get_finished(exim_client_ctx->ssl, &c, 0);
3880   int old_pool = store_pool;
3881
3882   SSL_get_finished(exim_client_ctx->ssl, s = store_get((int)len, TRUE), len);
3883   store_pool = POOL_PERM;
3884     tlsp->channelbinding = b64encode_taint(CUS s, (int)len, TRUE);
3885   store_pool = old_pool;
3886   DEBUG(D_tls) debug_printf("Have channel bindings cached for possible auth usage %p %p\n", tlsp->channelbinding, tlsp);
3887   }
3888
3889 tlsp->active.sock = cctx->sock;
3890 tlsp->active.tls_ctx = exim_client_ctx;
3891 cctx->tls_ctx = exim_client_ctx;
3892 return TRUE;
3893 }
3894
3895
3896
3897
3898
3899 static BOOL
3900 tls_refill(unsigned lim)
3901 {
3902 SSL * ssl = state_server.lib_state.lib_ssl;
3903 int error;
3904 int inbytes;
3905
3906 DEBUG(D_tls) debug_printf("Calling SSL_read(%p, %p, %u)\n", ssl,
3907   ssl_xfer_buffer, ssl_xfer_buffer_size);
3908
3909 ERR_clear_error();
3910 if (smtp_receive_timeout > 0) ALARM(smtp_receive_timeout);
3911 inbytes = SSL_read(ssl, CS ssl_xfer_buffer,
3912                   MIN(ssl_xfer_buffer_size, lim));
3913 error = SSL_get_error(ssl, inbytes);
3914 if (smtp_receive_timeout > 0) ALARM_CLR(0);
3915
3916 if (had_command_timeout)                /* set by signal handler */
3917   smtp_command_timeout_exit();          /* does not return */
3918 if (had_command_sigterm)
3919   smtp_command_sigterm_exit();
3920 if (had_data_timeout)
3921   smtp_data_timeout_exit();
3922 if (had_data_sigint)
3923   smtp_data_sigint_exit();
3924
3925 /* SSL_ERROR_ZERO_RETURN appears to mean that the SSL session has been
3926 closed down, not that the socket itself has been closed down. Revert to
3927 non-SSL handling. */
3928
3929 switch(error)
3930   {
3931   case SSL_ERROR_NONE:
3932     break;
3933
3934   case SSL_ERROR_ZERO_RETURN:
3935     DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
3936
3937     if (SSL_get_shutdown(ssl) == SSL_RECEIVED_SHUTDOWN)
3938           SSL_shutdown(ssl);
3939
3940     tls_close(NULL, TLS_NO_SHUTDOWN);
3941     return FALSE;
3942
3943   /* Handle genuine errors */
3944   case SSL_ERROR_SSL:
3945     ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
3946     log_write(0, LOG_MAIN, "TLS error (SSL_read): %s", ssl_errstring);
3947     ssl_xfer_error = TRUE;
3948     return FALSE;
3949
3950   default:
3951     DEBUG(D_tls) debug_printf("Got SSL error %d\n", error);
3952     DEBUG(D_tls) if (error == SSL_ERROR_SYSCALL)
3953       debug_printf(" - syscall %s\n", strerror(errno));
3954     ssl_xfer_error = TRUE;
3955     return FALSE;
3956   }
3957
3958 #ifndef DISABLE_DKIM
3959 dkim_exim_verify_feed(ssl_xfer_buffer, inbytes);
3960 #endif
3961 ssl_xfer_buffer_hwm = inbytes;
3962 ssl_xfer_buffer_lwm = 0;
3963 return TRUE;
3964 }
3965
3966
3967 /*************************************************
3968 *            TLS version of getc                 *
3969 *************************************************/
3970
3971 /* This gets the next byte from the TLS input buffer. If the buffer is empty,
3972 it refills the buffer via the SSL reading function.
3973
3974 Arguments:  lim         Maximum amount to read/buffer
3975 Returns:    the next character or EOF
3976
3977 Only used by the server-side TLS.
3978 */
3979
3980 int
3981 tls_getc(unsigned lim)
3982 {
3983 if (ssl_xfer_buffer_lwm >= ssl_xfer_buffer_hwm)
3984   if (!tls_refill(lim))
3985     return ssl_xfer_error ? EOF : smtp_getc(lim);
3986
3987 /* Something in the buffer; return next uschar */
3988
3989 return ssl_xfer_buffer[ssl_xfer_buffer_lwm++];
3990 }
3991
3992 uschar *
3993 tls_getbuf(unsigned * len)
3994 {
3995 unsigned size;
3996 uschar * buf;
3997
3998 if (ssl_xfer_buffer_lwm >= ssl_xfer_buffer_hwm)
3999   if (!tls_refill(*len))
4000     {
4001     if (!ssl_xfer_error) return smtp_getbuf(len);
4002     *len = 0;
4003     return NULL;
4004     }
4005
4006 if ((size = ssl_xfer_buffer_hwm - ssl_xfer_buffer_lwm) > *len)
4007   size = *len;
4008 buf = &ssl_xfer_buffer[ssl_xfer_buffer_lwm];
4009 ssl_xfer_buffer_lwm += size;
4010 *len = size;
4011 return buf;
4012 }
4013
4014
4015 void
4016 tls_get_cache(void)
4017 {
4018 #ifndef DISABLE_DKIM
4019 int n = ssl_xfer_buffer_hwm - ssl_xfer_buffer_lwm;
4020 if (n > 0)
4021   dkim_exim_verify_feed(ssl_xfer_buffer+ssl_xfer_buffer_lwm, n);
4022 #endif
4023 }
4024
4025
4026 BOOL
4027 tls_could_read(void)
4028 {
4029 return ssl_xfer_buffer_lwm < ssl_xfer_buffer_hwm
4030     || SSL_pending(state_server.lib_state.lib_ssl) > 0;
4031 }
4032
4033
4034 /*************************************************
4035 *          Read bytes from TLS channel           *
4036 *************************************************/
4037
4038 /*
4039 Arguments:
4040   ct_ctx    client context pointer, or NULL for the one global server context
4041   buff      buffer of data
4042   len       size of buffer
4043
4044 Returns:    the number of bytes read
4045             -1 after a failed read, including EOF
4046
4047 Only used by the client-side TLS.
4048 */
4049
4050 int
4051 tls_read(void * ct_ctx, uschar *buff, size_t len)
4052 {
4053 SSL * ssl = ct_ctx ? ((exim_openssl_client_tls_ctx *)ct_ctx)->ssl
4054                   : state_server.lib_state.lib_ssl;
4055 int inbytes;
4056 int error;
4057
4058 DEBUG(D_tls) debug_printf("Calling SSL_read(%p, %p, %u)\n", ssl,
4059   buff, (unsigned int)len);
4060
4061 ERR_clear_error();
4062 inbytes = SSL_read(ssl, CS buff, len);
4063 error = SSL_get_error(ssl, inbytes);
4064
4065 if (error == SSL_ERROR_ZERO_RETURN)
4066   {
4067   DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
4068   return -1;
4069   }
4070 else if (error != SSL_ERROR_NONE)
4071   return -1;
4072
4073 return inbytes;
4074 }
4075
4076
4077
4078
4079
4080 /*************************************************
4081 *         Write bytes down TLS channel           *
4082 *************************************************/
4083
4084 /*
4085 Arguments:
4086   ct_ctx    client context pointer, or NULL for the one global server context
4087   buff      buffer of data
4088   len       number of bytes
4089   more      further data expected soon
4090
4091 Returns:    the number of bytes after a successful write,
4092             -1 after a failed write
4093
4094 Used by both server-side and client-side TLS.  Calling with len zero and more unset
4095 will flush buffered writes; buff can be null for this case.
4096 */
4097
4098 int
4099 tls_write(void * ct_ctx, const uschar * buff, size_t len, BOOL more)
4100 {
4101 size_t olen = len;
4102 int outbytes, error;
4103 SSL * ssl = ct_ctx
4104   ? ((exim_openssl_client_tls_ctx *)ct_ctx)->ssl
4105   : state_server.lib_state.lib_ssl;
4106 static gstring * server_corked = NULL;
4107 gstring ** corkedp = ct_ctx
4108   ? &((exim_openssl_client_tls_ctx *)ct_ctx)->corked : &server_corked;
4109 gstring * corked = *corkedp;
4110
4111 DEBUG(D_tls) debug_printf("%s(%p, %lu%s)\n", __FUNCTION__,
4112   buff, (unsigned long)len, more ? ", more" : "");
4113
4114 /* Lacking a CORK or MSG_MORE facility (such as GnuTLS has) we copy data when
4115 "more" is notified.  This hack is only ok if small amounts are involved AND only
4116 one stream does it, in one context (i.e. no store reset).  Currently it is used
4117 for the responses to the received SMTP MAIL , RCPT, DATA sequence, only.
4118 We support callouts done by the server process by using a separate client
4119 context for the stashed information. */
4120 /* + if PIPE_COMMAND, banner & ehlo-resp for smmtp-on-connect. Suspect there's
4121 a store reset there, so use POOL_PERM. */
4122 /* + if CHUNKING, cmds EHLO,MAIL,RCPT(s),BDAT */
4123
4124 if (more || corked)
4125   {
4126   if (!len) buff = US &error;   /* dummy just so that string_catn is ok */
4127
4128   int save_pool = store_pool;
4129   store_pool = POOL_PERM;
4130
4131   corked = string_catn(corked, buff, len);
4132
4133   store_pool = save_pool;
4134
4135   if (more)
4136     {
4137     *corkedp = corked;
4138     return len;
4139     }
4140   buff = CUS corked->s;
4141   len = corked->ptr;
4142   *corkedp = NULL;
4143   }
4144
4145 for (int left = len; left > 0;)
4146   {
4147   DEBUG(D_tls) debug_printf("SSL_write(%p, %p, %d)\n", ssl, buff, left);
4148   ERR_clear_error();
4149   outbytes = SSL_write(ssl, CS buff, left);
4150   error = SSL_get_error(ssl, outbytes);
4151   DEBUG(D_tls) debug_printf("outbytes=%d error=%d\n", outbytes, error);
4152   switch (error)
4153     {
4154     case SSL_ERROR_NONE:        /* the usual case */
4155       left -= outbytes;
4156       buff += outbytes;
4157       break;
4158
4159     case SSL_ERROR_SSL:
4160       ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
4161       log_write(0, LOG_MAIN, "TLS error (SSL_write): %s", ssl_errstring);
4162       return -1;
4163
4164     case SSL_ERROR_ZERO_RETURN:
4165       log_write(0, LOG_MAIN, "SSL channel closed on write");
4166       return -1;
4167
4168     case SSL_ERROR_SYSCALL:
4169       if (ct_ctx || errno != ECONNRESET || !f.smtp_in_quit)
4170         log_write(0, LOG_MAIN, "SSL_write: (from %s) syscall: %s",
4171           sender_fullhost ? sender_fullhost : US"<unknown>",
4172           strerror(errno));
4173       else if (LOGGING(protocol_detail))
4174         log_write(0, LOG_MAIN, "[%s] after QUIT, client reset TCP before"
4175           " SMTP response and TLS close\n", sender_host_address);
4176       else
4177         DEBUG(D_tls) debug_printf("[%s] SSL_write: after QUIT,"
4178           " client reset TCP before TLS close\n", sender_host_address);
4179       return -1;
4180
4181     default:
4182       log_write(0, LOG_MAIN, "SSL_write error %d", error);
4183       return -1;
4184     }
4185   }
4186 return olen;
4187 }
4188
4189
4190
4191 /*
4192 Arguments:
4193   ct_ctx        client TLS context pointer, or NULL for the one global server context
4194 */
4195
4196 void
4197 tls_shutdown_wr(void * ct_ctx)
4198 {
4199 exim_openssl_client_tls_ctx * o_ctx = ct_ctx;
4200 SSL ** sslp = o_ctx ? &o_ctx->ssl : (SSL **) &state_server.lib_state.lib_ssl;
4201 int * fdp = o_ctx ? &tls_out.active.sock : &tls_in.active.sock;
4202 int rc;
4203
4204 if (*fdp < 0) return;  /* TLS was not active */
4205
4206 tls_write(ct_ctx, NULL, 0, FALSE);      /* flush write buffer */
4207
4208 HDEBUG(D_transport|D_tls|D_acl|D_v) debug_printf_indent("  SMTP(TLS shutdown)>>\n");
4209 rc = SSL_shutdown(*sslp);
4210 if (rc < 0) DEBUG(D_tls)
4211   {
4212   ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
4213   debug_printf("SSL_shutdown: %s\n", ssl_errstring);
4214   }
4215 }
4216
4217 /*************************************************
4218 *         Close down a TLS session               *
4219 *************************************************/
4220
4221 /* This is also called from within a delivery subprocess forked from the
4222 daemon, to shut down the TLS library, without actually doing a shutdown (which
4223 would tamper with the SSL session in the parent process).
4224
4225 Arguments:
4226   ct_ctx        client TLS context pointer, or NULL for the one global server context
4227   do_shutdown   0 no data-flush or TLS close-alert
4228                 1 if TLS close-alert is to be sent,
4229                 2 if also response to be waited for
4230
4231 Returns:     nothing
4232
4233 Used by both server-side and client-side TLS.
4234 */
4235
4236 void
4237 tls_close(void * ct_ctx, int do_shutdown)
4238 {
4239 exim_openssl_client_tls_ctx * o_ctx = ct_ctx;
4240 SSL ** sslp = o_ctx ? &o_ctx->ssl : (SSL **) &state_server.lib_state.lib_ssl;
4241 int * fdp = o_ctx ? &tls_out.active.sock : &tls_in.active.sock;
4242
4243 if (*fdp < 0) return;  /* TLS was not active */
4244
4245 if (do_shutdown)
4246   {
4247   int rc;
4248   DEBUG(D_tls) debug_printf("tls_close(): shutting down TLS%s\n",
4249     do_shutdown > 1 ? " (with response-wait)" : "");
4250
4251   tls_write(ct_ctx, NULL, 0, FALSE);    /* flush write buffer */
4252
4253   if (  (rc = SSL_shutdown(*sslp)) == 0 /* send "close notify" alert */
4254      && do_shutdown > 1)
4255     {
4256     ALARM(2);
4257     rc = SSL_shutdown(*sslp);           /* wait for response */
4258     ALARM_CLR(0);
4259     }
4260
4261   if (rc < 0) DEBUG(D_tls)
4262     {
4263     ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
4264     debug_printf("SSL_shutdown: %s\n", ssl_errstring);
4265     }
4266   }
4267
4268 if (!o_ctx)             /* server side */
4269   {
4270 #ifndef DISABLE_OCSP
4271   sk_X509_pop_free(state_server.verify_stack, X509_free);
4272   state_server.verify_stack = NULL;
4273 #endif
4274
4275   receive_getc =        smtp_getc;
4276   receive_getbuf =      smtp_getbuf;
4277   receive_get_cache =   smtp_get_cache;
4278   receive_ungetc =      smtp_ungetc;
4279   receive_feof =        smtp_feof;
4280   receive_ferror =      smtp_ferror;
4281   receive_smtp_buffered = smtp_buffered;
4282   tls_in.active.tls_ctx = NULL;
4283   tls_in.sni = NULL;
4284   /* Leave bits, peercert, cipher, peerdn, certificate_verified set, for logging */
4285   }
4286
4287 SSL_free(*sslp);
4288 *sslp = NULL;
4289 *fdp = -1;
4290 }
4291
4292
4293
4294
4295 /*************************************************
4296 *  Let tls_require_ciphers be checked at startup *
4297 *************************************************/
4298
4299 /* The tls_require_ciphers option, if set, must be something which the
4300 library can parse.
4301
4302 Returns:     NULL on success, or error message
4303 */
4304
4305 uschar *
4306 tls_validate_require_cipher(void)
4307 {
4308 SSL_CTX *ctx;
4309 uschar *s, *expciphers, *err;
4310
4311 tls_openssl_init();
4312
4313 if (!(tls_require_ciphers && *tls_require_ciphers))
4314   return NULL;
4315
4316 if (!expand_check(tls_require_ciphers, US"tls_require_ciphers", &expciphers,
4317                   &err))
4318   return US"failed to expand tls_require_ciphers";
4319
4320 if (!(expciphers && *expciphers))
4321   return NULL;
4322
4323 /* normalisation ripped from above */
4324 s = expciphers;
4325 while (*s != 0) { if (*s == '_') *s = '-'; s++; }
4326
4327 err = NULL;
4328
4329 if (lib_ctx_new(&ctx, NULL, &err) == OK)
4330   {
4331   DEBUG(D_tls)
4332     debug_printf("tls_require_ciphers expands to \"%s\"\n", expciphers);
4333
4334   if (!SSL_CTX_set_cipher_list(ctx, CS expciphers))
4335     {
4336     ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
4337     err = string_sprintf("SSL_CTX_set_cipher_list(%s) failed: %s",
4338                         expciphers, ssl_errstring);
4339     }
4340
4341   SSL_CTX_free(ctx);
4342   }
4343 return err;
4344 }
4345
4346
4347
4348
4349 /*************************************************
4350 *         Report the library versions.           *
4351 *************************************************/
4352
4353 /* There have historically been some issues with binary compatibility in
4354 OpenSSL libraries; if Exim (like many other applications) is built against
4355 one version of OpenSSL but the run-time linker picks up another version,
4356 it can result in serious failures, including crashing with a SIGSEGV.  So
4357 report the version found by the compiler and the run-time version.
4358
4359 Note: some OS vendors backport security fixes without changing the version
4360 number/string, and the version date remains unchanged.  The _build_ date
4361 will change, so we can more usefully assist with version diagnosis by also
4362 reporting the build date.
4363
4364 Arguments:   a FILE* to print the results to
4365 Returns:     nothing
4366 */
4367
4368 void
4369 tls_version_report(FILE *f)
4370 {
4371 fprintf(f, "Library version: OpenSSL: Compile: %s\n"
4372            "                          Runtime: %s\n"
4373            "                                 : %s\n",
4374            OPENSSL_VERSION_TEXT,
4375            SSLeay_version(SSLEAY_VERSION),
4376            SSLeay_version(SSLEAY_BUILT_ON));
4377 /* third line is 38 characters for the %s and the line is 73 chars long;
4378 the OpenSSL output includes a "built on: " prefix already. */
4379 }
4380
4381
4382
4383
4384 /*************************************************
4385 *            Random number generation            *
4386 *************************************************/
4387
4388 /* Pseudo-random number generation.  The result is not expected to be
4389 cryptographically strong but not so weak that someone will shoot themselves
4390 in the foot using it as a nonce in input in some email header scheme or
4391 whatever weirdness they'll twist this into.  The result should handle fork()
4392 and avoid repeating sequences.  OpenSSL handles that for us.
4393
4394 Arguments:
4395   max       range maximum
4396 Returns     a random number in range [0, max-1]
4397 */
4398
4399 int
4400 vaguely_random_number(int max)
4401 {
4402 unsigned int r;
4403 int i, needed_len;
4404 static pid_t pidlast = 0;
4405 pid_t pidnow;
4406 uschar smallbuf[sizeof(r)];
4407
4408 if (max <= 1)
4409   return 0;
4410
4411 pidnow = getpid();
4412 if (pidnow != pidlast)
4413   {
4414   /* Although OpenSSL documents that "OpenSSL makes sure that the PRNG state
4415   is unique for each thread", this doesn't apparently apply across processes,
4416   so our own warning from vaguely_random_number_fallback() applies here too.
4417   Fix per PostgreSQL. */
4418   if (pidlast != 0)
4419     RAND_cleanup();
4420   pidlast = pidnow;
4421   }
4422
4423 /* OpenSSL auto-seeds from /dev/random, etc, but this a double-check. */
4424 if (!RAND_status())
4425   {
4426   randstuff r;
4427   gettimeofday(&r.tv, NULL);
4428   r.p = getpid();
4429
4430   RAND_seed(US (&r), sizeof(r));
4431   }
4432 /* We're after pseudo-random, not random; if we still don't have enough data
4433 in the internal PRNG then our options are limited.  We could sleep and hope
4434 for entropy to come along (prayer technique) but if the system is so depleted
4435 in the first place then something is likely to just keep taking it.  Instead,
4436 we'll just take whatever little bit of pseudo-random we can still manage to
4437 get. */
4438
4439 needed_len = sizeof(r);
4440 /* Don't take 8 times more entropy than needed if int is 8 octets and we were
4441 asked for a number less than 10. */
4442 for (r = max, i = 0; r; ++i)
4443   r >>= 1;
4444 i = (i + 7) / 8;
4445 if (i < needed_len)
4446   needed_len = i;
4447
4448 #ifdef EXIM_HAVE_RAND_PSEUDO
4449 /* We do not care if crypto-strong */
4450 i = RAND_pseudo_bytes(smallbuf, needed_len);
4451 #else
4452 i = RAND_bytes(smallbuf, needed_len);
4453 #endif
4454
4455 if (i < 0)
4456   {
4457   DEBUG(D_all)
4458     debug_printf("OpenSSL RAND_pseudo_bytes() not supported by RAND method, using fallback.\n");
4459   return vaguely_random_number_fallback(max);
4460   }
4461
4462 r = 0;
4463 for (uschar * p = smallbuf; needed_len; --needed_len, ++p)
4464   r = 256 * r + *p;
4465
4466 /* We don't particularly care about weighted results; if someone wants
4467 smooth distribution and cares enough then they should submit a patch then. */
4468 return r % max;
4469 }
4470
4471
4472
4473
4474 /*************************************************
4475 *        OpenSSL option parse                    *
4476 *************************************************/
4477
4478 /* Parse one option for tls_openssl_options_parse below
4479
4480 Arguments:
4481   name    one option name
4482   value   place to store a value for it
4483 Returns   success or failure in parsing
4484 */
4485
4486
4487
4488 static BOOL
4489 tls_openssl_one_option_parse(uschar *name, long *value)
4490 {
4491 int first = 0;
4492 int last = exim_openssl_options_size;
4493 while (last > first)
4494   {
4495   int middle = (first + last)/2;
4496   int c = Ustrcmp(name, exim_openssl_options[middle].name);
4497   if (c == 0)
4498     {
4499     *value = exim_openssl_options[middle].value;
4500     return TRUE;
4501     }
4502   else if (c > 0)
4503     first = middle + 1;
4504   else
4505     last = middle;
4506   }
4507 return FALSE;
4508 }
4509
4510
4511
4512
4513 /*************************************************
4514 *        OpenSSL option parsing logic            *
4515 *************************************************/
4516
4517 /* OpenSSL has a number of compatibility options which an administrator might
4518 reasonably wish to set.  Interpret a list similarly to decode_bits(), so that
4519 we look like log_selector.
4520
4521 Arguments:
4522   option_spec  the administrator-supplied string of options
4523   results      ptr to long storage for the options bitmap
4524 Returns        success or failure
4525 */
4526
4527 BOOL
4528 tls_openssl_options_parse(uschar *option_spec, long *results)
4529 {
4530 long result, item;
4531 uschar * exp, * end;
4532 BOOL adding, item_parsed;
4533
4534 /* Server: send no (<= TLS1.2) session tickets */
4535 result = SSL_OP_NO_TICKET;
4536
4537 /* Prior to 4.80 we or'd in SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; removed
4538 from default because it increases BEAST susceptibility. */
4539 #ifdef SSL_OP_NO_SSLv2
4540 result |= SSL_OP_NO_SSLv2;
4541 #endif
4542 #ifdef SSL_OP_NO_SSLv3
4543 result |= SSL_OP_NO_SSLv3;
4544 #endif
4545 #ifdef SSL_OP_SINGLE_DH_USE
4546 result |= SSL_OP_SINGLE_DH_USE;
4547 #endif
4548 #ifdef SSL_OP_NO_RENEGOTIATION
4549 result |= SSL_OP_NO_RENEGOTIATION;
4550 #endif
4551
4552 if (!option_spec)
4553   {
4554   *results = result;
4555   return TRUE;
4556   }
4557
4558 if (!expand_check(option_spec, US"openssl_options", &exp, &end))
4559   return FALSE;
4560
4561 for (uschar * s = exp; *s; /**/)
4562   {
4563   while (isspace(*s)) ++s;
4564   if (*s == '\0')
4565     break;
4566   if (*s != '+' && *s != '-')
4567     {
4568     DEBUG(D_tls) debug_printf("malformed openssl option setting: "
4569         "+ or - expected but found \"%s\"\n", s);
4570     return FALSE;
4571     }
4572   adding = *s++ == '+';
4573   for (end = s; *end && !isspace(*end); ) end++;
4574   item_parsed = tls_openssl_one_option_parse(string_copyn(s, end-s), &item);
4575   if (!item_parsed)
4576     {
4577     DEBUG(D_tls) debug_printf("openssl option setting unrecognised: \"%s\"\n", s);
4578     return FALSE;
4579     }
4580   DEBUG(D_tls) debug_printf("openssl option, %s %08lx: %08lx (%s)\n",
4581       adding ? "adding to    " : "removing from", result, item, s);
4582   if (adding)
4583     result |= item;
4584   else
4585     result &= ~item;
4586   s = end;
4587   }
4588
4589 *results = result;
4590 return TRUE;
4591 }
4592
4593 #endif  /*!MACRO_PREDEF*/
4594 /* vi: aw ai sw=2
4595 */
4596 /* End of tls-openssl.c */