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