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