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