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