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