Tidy certificate verification logic under OpenSSL
[exim.git] / src / src / tls-openssl.c
1 /*************************************************
2 *     Exim - an Internet mail transport agent    *
3 *************************************************/
4
5 /* Copyright (c) University of Cambridge 1995 - 2014 */
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 #ifdef EXPERIMENTAL_OCSP
26 #include <openssl/ocsp.h>
27 #endif
28
29 #ifdef EXPERIMENTAL_OCSP
30 #define EXIM_OCSP_SKEW_SECONDS (300L)
31 #define EXIM_OCSP_MAX_AGE (-1L)
32 #endif
33
34 #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT)
35 #define EXIM_HAVE_OPENSSL_TLSEXT
36 #endif
37
38 /* Structure for collecting random data for seeding. */
39
40 typedef struct randstuff {
41   struct timeval tv;
42   pid_t          p;
43 } randstuff;
44
45 /* Local static variables */
46
47 static BOOL client_verify_callback_called = FALSE;
48 static BOOL server_verify_callback_called = FALSE;
49 static const uschar *sid_ctx = US"exim";
50
51 /* We have three different contexts to care about.
52
53 Simple case: client, `client_ctx`
54  As a client, we can be doing a callout or cut-through delivery while receiving
55  a message.  So we have a client context, which should have options initialised
56  from the SMTP Transport.
57
58 Server:
59  There are two cases: with and without ServerNameIndication from the client.
60  Given TLS SNI, we can be using different keys, certs and various other
61  configuration settings, because they're re-expanded with $tls_sni set.  This
62  allows vhosting with TLS.  This SNI is sent in the handshake.
63  A client might not send SNI, so we need a fallback, and an initial setup too.
64  So as a server, we start out using `server_ctx`.
65  If SNI is sent by the client, then we as server, mid-negotiation, try to clone
66  `server_sni` from `server_ctx` and then initialise settings by re-expanding
67  configuration.
68 */
69
70 static SSL_CTX *client_ctx = NULL;
71 static SSL_CTX *server_ctx = NULL;
72 static SSL     *client_ssl = NULL;
73 static SSL     *server_ssl = NULL;
74
75 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
76 static SSL_CTX *server_sni = NULL;
77 #endif
78
79 static char ssl_errstring[256];
80
81 static int  ssl_session_timeout = 200;
82 static BOOL client_verify_optional = FALSE;
83 static BOOL server_verify_optional = FALSE;
84
85 static BOOL reexpand_tls_files_for_sni = FALSE;
86
87
88 typedef struct tls_ext_ctx_cb {
89   uschar *certificate;
90   uschar *privatekey;
91 #ifdef EXPERIMENTAL_OCSP
92   BOOL is_server;
93   union {
94     struct {
95       uschar        *file;
96       uschar        *file_expanded;
97       OCSP_RESPONSE *response;
98     } server;
99     struct {
100       X509_STORE    *verify_store;      /* non-null if status requested */
101       BOOL          verify_required;
102     } client;
103   } u_ocsp;
104 #endif
105   uschar *dhparam;
106   /* these are cached from first expand */
107   uschar *server_cipher_list;
108   /* only passed down to tls_error: */
109   host_item *host;
110 } tls_ext_ctx_cb;
111
112 /* should figure out a cleanup of API to handle state preserved per
113 implementation, for various reasons, which can be void * in the APIs.
114 For now, we hack around it. */
115 tls_ext_ctx_cb *client_static_cbinfo = NULL;
116 tls_ext_ctx_cb *server_static_cbinfo = NULL;
117
118 static int
119 setup_certs(SSL_CTX *sctx, uschar *certs, uschar *crl, host_item *host, BOOL optional,
120     int (*cert_vfy_cb)(int, X509_STORE_CTX *) );
121
122 /* Callbacks */
123 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
124 static int tls_servername_cb(SSL *s, int *ad ARG_UNUSED, void *arg);
125 #endif
126 #ifdef EXPERIMENTAL_OCSP
127 static int tls_server_stapling_cb(SSL *s, void *arg);
128 #endif
129
130
131 /*************************************************
132 *               Handle TLS error                 *
133 *************************************************/
134
135 /* Called from lots of places when errors occur before actually starting to do
136 the TLS handshake, that is, while the session is still in clear. Always returns
137 DEFER for a server and FAIL for a client so that most calls can use "return
138 tls_error(...)" to do this processing and then give an appropriate return. A
139 single function is used for both server and client, because it is called from
140 some shared functions.
141
142 Argument:
143   prefix    text to include in the logged error
144   host      NULL if setting up a server;
145             the connected host if setting up a client
146   msg       error message or NULL if we should ask OpenSSL
147
148 Returns:    OK/DEFER/FAIL
149 */
150
151 static int
152 tls_error(uschar *prefix, host_item *host, uschar *msg)
153 {
154 if (msg == NULL)
155   {
156   ERR_error_string(ERR_get_error(), ssl_errstring);
157   msg = (uschar *)ssl_errstring;
158   }
159
160 if (host == NULL)
161   {
162   uschar *conn_info = smtp_get_connection_info();
163   if (Ustrncmp(conn_info, US"SMTP ", 5) == 0)
164     conn_info += 5;
165   log_write(0, LOG_MAIN, "TLS error on %s (%s): %s",
166     conn_info, prefix, msg);
167   return DEFER;
168   }
169 else
170   {
171   log_write(0, LOG_MAIN, "TLS error on connection to %s [%s] (%s): %s",
172     host->name, host->address, prefix, msg);
173   return FAIL;
174   }
175 }
176
177
178
179 /*************************************************
180 *        Callback to generate RSA key            *
181 *************************************************/
182
183 /*
184 Arguments:
185   s          SSL connection
186   export     not used
187   keylength  keylength
188
189 Returns:     pointer to generated key
190 */
191
192 static RSA *
193 rsa_callback(SSL *s, int export, int keylength)
194 {
195 RSA *rsa_key;
196 export = export;     /* Shut picky compilers up */
197 DEBUG(D_tls) debug_printf("Generating %d bit RSA key...\n", keylength);
198 rsa_key = RSA_generate_key(keylength, RSA_F4, NULL, NULL);
199 if (rsa_key == NULL)
200   {
201   ERR_error_string(ERR_get_error(), ssl_errstring);
202   log_write(0, LOG_MAIN|LOG_PANIC, "TLS error (RSA_generate_key): %s",
203     ssl_errstring);
204   return NULL;
205   }
206 return rsa_key;
207 }
208
209
210
211 /* Extreme debug
212 #if defined(EXPERIMENTAL_OCSP)
213 void
214 x509_store_dump_cert_s_names(X509_STORE * store)
215 {
216 STACK_OF(X509_OBJECT) * roots= store->objs;
217 int i;
218 static uschar name[256];
219
220 for(i= 0; i<sk_X509_OBJECT_num(roots); i++)
221   {
222   X509_OBJECT * tmp_obj= sk_X509_OBJECT_value(roots, i);
223   if(tmp_obj->type == X509_LU_X509)
224     {
225     X509 * current_cert= tmp_obj->data.x509;
226     X509_NAME_oneline(X509_get_subject_name(current_cert), CS name, sizeof(name));
227     debug_printf(" %s\n", name);
228     }
229   }
230 }
231 #endif
232 */
233
234
235 /*************************************************
236 *        Callback for verification               *
237 *************************************************/
238
239 /* The SSL library does certificate verification if set up to do so. This
240 callback has the current yes/no state is in "state". If verification succeeded,
241 we set up the tls_peerdn string. If verification failed, what happens depends
242 on whether the client is required to present a verifiable certificate or not.
243
244 If verification is optional, we change the state to yes, but still log the
245 verification error. For some reason (it really would help to have proper
246 documentation of OpenSSL), this callback function then gets called again, this
247 time with state = 1. In fact, that's useful, because we can set up the peerdn
248 value, but we must take care not to set the private verified flag on the second
249 time through.
250
251 Note: this function is not called if the client fails to present a certificate
252 when asked. We get here only if a certificate has been received. Handling of
253 optional verification for this case is done when requesting SSL to verify, by
254 setting SSL_VERIFY_FAIL_IF_NO_PEER_CERT in the non-optional case.
255
256 Arguments:
257   state      current yes/no state as 1/0
258   x509ctx    certificate information.
259   client     TRUE for client startup, FALSE for server startup
260
261 Returns:     1 if verified, 0 if not
262 */
263
264 static int
265 verify_callback(int state, X509_STORE_CTX *x509ctx, tls_support *tlsp, BOOL *calledp, BOOL *optionalp)
266 {
267 static uschar txt[256];
268
269 X509_NAME_oneline(X509_get_subject_name(x509ctx->current_cert),
270   CS txt, sizeof(txt));
271
272 if (state == 0)
273   {
274   log_write(0, LOG_MAIN, "SSL verify error: depth=%d error=%s cert=%s",
275     x509ctx->error_depth,
276     X509_verify_cert_error_string(x509ctx->error),
277     txt);
278   tlsp->certificate_verified = FALSE;
279   *calledp = TRUE;
280   if (!*optionalp)
281     {
282     tlsp->peercert = X509_dup(x509ctx->current_cert);
283     return 0;                       /* reject */
284     }
285   DEBUG(D_tls) debug_printf("SSL verify failure overridden (host in "
286     "tls_try_verify_hosts)\n");
287   }
288
289 else if (x509ctx->error_depth != 0)
290   {
291   DEBUG(D_tls) debug_printf("SSL verify ok: depth=%d SN=%s\n",
292      x509ctx->error_depth, txt);
293 #ifdef EXPERIMENTAL_OCSP
294   if (tlsp == &tls_out && client_static_cbinfo->u_ocsp.client.verify_store)
295     {   /* client, wanting stapling  */
296     /* Add the server cert's signing chain as the one
297     for the verification of the OCSP stapled information. */
298   
299     if (!X509_STORE_add_cert(client_static_cbinfo->u_ocsp.client.verify_store,
300                              x509ctx->current_cert))
301       ERR_clear_error();
302     }
303 #endif
304   }
305 else
306   {
307   tlsp->peerdn = txt;
308   tlsp->peercert = X509_dup(x509ctx->current_cert);
309   DEBUG(D_tls) debug_printf("SSL%s verify ok: depth=0 SN=%s\n",
310     *calledp ? "" : " authenticated", txt);
311   if (!*calledp) tlsp->certificate_verified = TRUE;
312   *calledp = TRUE;
313   }
314
315 return 1;   /* accept */
316 }
317
318 static int
319 verify_callback_client(int state, X509_STORE_CTX *x509ctx)
320 {
321 return verify_callback(state, x509ctx, &tls_out, &client_verify_callback_called, &client_verify_optional);
322 }
323
324 static int
325 verify_callback_server(int state, X509_STORE_CTX *x509ctx)
326 {
327 return verify_callback(state, x509ctx, &tls_in, &server_verify_callback_called, &server_verify_optional);
328 }
329
330
331
332 /*************************************************
333 *           Information callback                 *
334 *************************************************/
335
336 /* The SSL library functions call this from time to time to indicate what they
337 are doing. We copy the string to the debugging output when TLS debugging has
338 been requested.
339
340 Arguments:
341   s         the SSL connection
342   where
343   ret
344
345 Returns:    nothing
346 */
347
348 static void
349 info_callback(SSL *s, int where, int ret)
350 {
351 where = where;
352 ret = ret;
353 DEBUG(D_tls) debug_printf("SSL info: %s\n", SSL_state_string_long(s));
354 }
355
356
357
358 /*************************************************
359 *                Initialize for DH               *
360 *************************************************/
361
362 /* If dhparam is set, expand it, and load up the parameters for DH encryption.
363
364 Arguments:
365   dhparam   DH parameter file or fixed parameter identity string
366   host      connected host, if client; NULL if server
367
368 Returns:    TRUE if OK (nothing to set up, or setup worked)
369 */
370
371 static BOOL
372 init_dh(SSL_CTX *sctx, uschar *dhparam, host_item *host)
373 {
374 BIO *bio;
375 DH *dh;
376 uschar *dhexpanded;
377 const char *pem;
378
379 if (!expand_check(dhparam, US"tls_dhparam", &dhexpanded))
380   return FALSE;
381
382 if (dhexpanded == NULL || *dhexpanded == '\0')
383   {
384   bio = BIO_new_mem_buf(CS std_dh_prime_default(), -1);
385   }
386 else if (dhexpanded[0] == '/')
387   {
388   bio = BIO_new_file(CS dhexpanded, "r");
389   if (bio == NULL)
390     {
391     tls_error(string_sprintf("could not read dhparams file %s", dhexpanded),
392           host, US strerror(errno));
393     return FALSE;
394     }
395   }
396 else
397   {
398   if (Ustrcmp(dhexpanded, "none") == 0)
399     {
400     DEBUG(D_tls) debug_printf("Requested no DH parameters.\n");
401     return TRUE;
402     }
403
404   pem = std_dh_prime_named(dhexpanded);
405   if (!pem)
406     {
407     tls_error(string_sprintf("Unknown standard DH prime \"%s\"", dhexpanded),
408         host, US strerror(errno));
409     return FALSE;
410     }
411   bio = BIO_new_mem_buf(CS pem, -1);
412   }
413
414 dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
415 if (dh == NULL)
416   {
417   BIO_free(bio);
418   tls_error(string_sprintf("Could not read tls_dhparams \"%s\"", dhexpanded),
419       host, NULL);
420   return FALSE;
421   }
422
423 /* Even if it is larger, we silently return success rather than cause things
424  * to fail out, so that a too-large DH will not knock out all TLS; it's a
425  * debatable choice. */
426 if ((8*DH_size(dh)) > tls_dh_max_bits)
427   {
428   DEBUG(D_tls)
429     debug_printf("dhparams file %d bits, is > tls_dh_max_bits limit of %d",
430         8*DH_size(dh), tls_dh_max_bits);
431   }
432 else
433   {
434   SSL_CTX_set_tmp_dh(sctx, dh);
435   DEBUG(D_tls)
436     debug_printf("Diffie-Hellman initialized from %s with %d-bit prime\n",
437       dhexpanded ? dhexpanded : US"default", 8*DH_size(dh));
438   }
439
440 DH_free(dh);
441 BIO_free(bio);
442
443 return TRUE;
444 }
445
446
447
448
449 #ifdef EXPERIMENTAL_OCSP
450 /*************************************************
451 *       Load OCSP information into state         *
452 *************************************************/
453
454 /* Called to load the server OCSP response from the given file into memory, once
455 caller has determined this is needed.  Checks validity.  Debugs a message
456 if invalid.
457
458 ASSUMES: single response, for single cert.
459
460 Arguments:
461   sctx            the SSL_CTX* to update
462   cbinfo          various parts of session state
463   expanded        the filename putatively holding an OCSP response
464
465 */
466
467 static void
468 ocsp_load_response(SSL_CTX *sctx, tls_ext_ctx_cb *cbinfo, const uschar *expanded)
469 {
470 BIO *bio;
471 OCSP_RESPONSE *resp;
472 OCSP_BASICRESP *basic_response;
473 OCSP_SINGLERESP *single_response;
474 ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd;
475 X509_STORE *store;
476 unsigned long verify_flags;
477 int status, reason, i;
478
479 cbinfo->u_ocsp.server.file_expanded = string_copy(expanded);
480 if (cbinfo->u_ocsp.server.response)
481   {
482   OCSP_RESPONSE_free(cbinfo->u_ocsp.server.response);
483   cbinfo->u_ocsp.server.response = NULL;
484   }
485
486 bio = BIO_new_file(CS cbinfo->u_ocsp.server.file_expanded, "rb");
487 if (!bio)
488   {
489   DEBUG(D_tls) debug_printf("Failed to open OCSP response file \"%s\"\n",
490       cbinfo->u_ocsp.server.file_expanded);
491   return;
492   }
493
494 resp = d2i_OCSP_RESPONSE_bio(bio, NULL);
495 BIO_free(bio);
496 if (!resp)
497   {
498   DEBUG(D_tls) debug_printf("Error reading OCSP response.\n");
499   return;
500   }
501
502 status = OCSP_response_status(resp);
503 if (status != OCSP_RESPONSE_STATUS_SUCCESSFUL)
504   {
505   DEBUG(D_tls) debug_printf("OCSP response not valid: %s (%d)\n",
506       OCSP_response_status_str(status), status);
507   goto bad;
508   }
509
510 basic_response = OCSP_response_get1_basic(resp);
511 if (!basic_response)
512   {
513   DEBUG(D_tls)
514     debug_printf("OCSP response parse error: unable to extract basic response.\n");
515   goto bad;
516   }
517
518 store = SSL_CTX_get_cert_store(sctx);
519 verify_flags = OCSP_NOVERIFY; /* check sigs, but not purpose */
520
521 /* May need to expose ability to adjust those flags?
522 OCSP_NOSIGS OCSP_NOVERIFY OCSP_NOCHAIN OCSP_NOCHECKS OCSP_NOEXPLICIT
523 OCSP_TRUSTOTHER OCSP_NOINTERN */
524
525 i = OCSP_basic_verify(basic_response, NULL, store, verify_flags);
526 if (i <= 0)
527   {
528   DEBUG(D_tls) {
529     ERR_error_string(ERR_get_error(), ssl_errstring);
530     debug_printf("OCSP response verify failure: %s\n", US ssl_errstring);
531     }
532   goto bad;
533   }
534
535 /* Here's the simplifying assumption: there's only one response, for the
536 one certificate we use, and nothing for anything else in a chain.  If this
537 proves false, we need to extract a cert id from our issued cert
538 (tls_certificate) and use that for OCSP_resp_find_status() (which finds the
539 right cert in the stack and then calls OCSP_single_get0_status()).
540
541 I'm hoping to avoid reworking a bunch more of how we handle state here. */
542 single_response = OCSP_resp_get0(basic_response, 0);
543 if (!single_response)
544   {
545   DEBUG(D_tls)
546     debug_printf("Unable to get first response from OCSP basic response.\n");
547   goto bad;
548   }
549
550 status = OCSP_single_get0_status(single_response, &reason, &rev, &thisupd, &nextupd);
551 if (status != V_OCSP_CERTSTATUS_GOOD)
552   {
553   DEBUG(D_tls) debug_printf("OCSP response bad cert status: %s (%d) %s (%d)\n",
554       OCSP_cert_status_str(status), status,
555       OCSP_crl_reason_str(reason), reason);
556   goto bad;
557   }
558
559 if (!OCSP_check_validity(thisupd, nextupd, EXIM_OCSP_SKEW_SECONDS, EXIM_OCSP_MAX_AGE))
560   {
561   DEBUG(D_tls) debug_printf("OCSP status invalid times.\n");
562   goto bad;
563   }
564
565 supply_response:
566   cbinfo->u_ocsp.server.response = resp;
567 return;
568
569 bad:
570   if (running_in_test_harness)
571     {
572     extern char ** environ;
573     uschar ** p;
574     for (p = USS environ; *p != NULL; p++)
575       if (Ustrncmp(*p, "EXIM_TESTHARNESS_DISABLE_OCSPVALIDITYCHECK", 42) == 0)
576         {
577         DEBUG(D_tls) debug_printf("Supplying known bad OCSP response\n");
578         goto supply_response;
579         }
580     }
581 return;
582 }
583 #endif  /*EXPERIMENTAL_OCSP*/
584
585
586
587
588 /*************************************************
589 *        Expand key and cert file specs          *
590 *************************************************/
591
592 /* Called once during tls_init and possibly again during TLS setup, for a
593 new context, if Server Name Indication was used and tls_sni was seen in
594 the certificate string.
595
596 Arguments:
597   sctx            the SSL_CTX* to update
598   cbinfo          various parts of session state
599
600 Returns:          OK/DEFER/FAIL
601 */
602
603 static int
604 tls_expand_session_files(SSL_CTX *sctx, tls_ext_ctx_cb *cbinfo)
605 {
606 uschar *expanded;
607
608 if (cbinfo->certificate == NULL)
609   return OK;
610
611 if (Ustrstr(cbinfo->certificate, US"tls_sni") ||
612     Ustrstr(cbinfo->certificate, US"tls_in_sni") ||
613     Ustrstr(cbinfo->certificate, US"tls_out_sni")
614    )
615   reexpand_tls_files_for_sni = TRUE;
616
617 if (!expand_check(cbinfo->certificate, US"tls_certificate", &expanded))
618   return DEFER;
619
620 if (expanded != NULL)
621   {
622   DEBUG(D_tls) debug_printf("tls_certificate file %s\n", expanded);
623   if (!SSL_CTX_use_certificate_chain_file(sctx, CS expanded))
624     return tls_error(string_sprintf(
625       "SSL_CTX_use_certificate_chain_file file=%s", expanded),
626         cbinfo->host, NULL);
627   }
628
629 if (cbinfo->privatekey != NULL &&
630     !expand_check(cbinfo->privatekey, US"tls_privatekey", &expanded))
631   return DEFER;
632
633 /* If expansion was forced to fail, key_expanded will be NULL. If the result
634 of the expansion is an empty string, ignore it also, and assume the private
635 key is in the same file as the certificate. */
636
637 if (expanded != NULL && *expanded != 0)
638   {
639   DEBUG(D_tls) debug_printf("tls_privatekey file %s\n", expanded);
640   if (!SSL_CTX_use_PrivateKey_file(sctx, CS expanded, SSL_FILETYPE_PEM))
641     return tls_error(string_sprintf(
642       "SSL_CTX_use_PrivateKey_file file=%s", expanded), cbinfo->host, NULL);
643   }
644
645 #ifdef EXPERIMENTAL_OCSP
646 if (cbinfo->is_server &&  cbinfo->u_ocsp.server.file != NULL)
647   {
648   if (!expand_check(cbinfo->u_ocsp.server.file, US"tls_ocsp_file", &expanded))
649     return DEFER;
650
651   if (expanded != NULL && *expanded != 0)
652     {
653     DEBUG(D_tls) debug_printf("tls_ocsp_file %s\n", expanded);
654     if (cbinfo->u_ocsp.server.file_expanded &&
655         (Ustrcmp(expanded, cbinfo->u_ocsp.server.file_expanded) == 0))
656       {
657       DEBUG(D_tls)
658         debug_printf("tls_ocsp_file value unchanged, using existing values.\n");
659       } else {
660         ocsp_load_response(sctx, cbinfo, expanded);
661       }
662     }
663   }
664 #endif
665
666 return OK;
667 }
668
669
670
671
672 /*************************************************
673 *            Callback to handle SNI              *
674 *************************************************/
675
676 /* Called when acting as server during the TLS session setup if a Server Name
677 Indication extension was sent by the client.
678
679 API documentation is OpenSSL s_server.c implementation.
680
681 Arguments:
682   s               SSL* of the current session
683   ad              unknown (part of OpenSSL API) (unused)
684   arg             Callback of "our" registered data
685
686 Returns:          SSL_TLSEXT_ERR_{OK,ALERT_WARNING,ALERT_FATAL,NOACK}
687 */
688
689 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
690 static int
691 tls_servername_cb(SSL *s, int *ad ARG_UNUSED, void *arg)
692 {
693 const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name);
694 tls_ext_ctx_cb *cbinfo = (tls_ext_ctx_cb *) arg;
695 int rc;
696 int old_pool = store_pool;
697
698 if (!servername)
699   return SSL_TLSEXT_ERR_OK;
700
701 DEBUG(D_tls) debug_printf("Received TLS SNI \"%s\"%s\n", servername,
702     reexpand_tls_files_for_sni ? "" : " (unused for certificate selection)");
703
704 /* Make the extension value available for expansion */
705 store_pool = POOL_PERM;
706 tls_in.sni = string_copy(US servername);
707 store_pool = old_pool;
708
709 if (!reexpand_tls_files_for_sni)
710   return SSL_TLSEXT_ERR_OK;
711
712 /* Can't find an SSL_CTX_clone() or equivalent, so we do it manually;
713 not confident that memcpy wouldn't break some internal reference counting.
714 Especially since there's a references struct member, which would be off. */
715
716 server_sni = SSL_CTX_new(SSLv23_server_method());
717 if (!server_sni)
718   {
719   ERR_error_string(ERR_get_error(), ssl_errstring);
720   DEBUG(D_tls) debug_printf("SSL_CTX_new() failed: %s\n", ssl_errstring);
721   return SSL_TLSEXT_ERR_NOACK;
722   }
723
724 /* Not sure how many of these are actually needed, since SSL object
725 already exists.  Might even need this selfsame callback, for reneg? */
726
727 SSL_CTX_set_info_callback(server_sni, SSL_CTX_get_info_callback(server_ctx));
728 SSL_CTX_set_mode(server_sni, SSL_CTX_get_mode(server_ctx));
729 SSL_CTX_set_options(server_sni, SSL_CTX_get_options(server_ctx));
730 SSL_CTX_set_timeout(server_sni, SSL_CTX_get_timeout(server_ctx));
731 SSL_CTX_set_tlsext_servername_callback(server_sni, tls_servername_cb);
732 SSL_CTX_set_tlsext_servername_arg(server_sni, cbinfo);
733 if (cbinfo->server_cipher_list)
734   SSL_CTX_set_cipher_list(server_sni, CS cbinfo->server_cipher_list);
735 #ifdef EXPERIMENTAL_OCSP
736 if (cbinfo->u_ocsp.server.file)
737   {
738   SSL_CTX_set_tlsext_status_cb(server_sni, tls_server_stapling_cb);
739   SSL_CTX_set_tlsext_status_arg(server_sni, cbinfo);
740   }
741 #endif
742
743 rc = setup_certs(server_sni, tls_verify_certificates, tls_crl, NULL, FALSE, verify_callback_server);
744 if (rc != OK) return SSL_TLSEXT_ERR_NOACK;
745
746 /* do this after setup_certs, because this can require the certs for verifying
747 OCSP information. */
748 rc = tls_expand_session_files(server_sni, cbinfo);
749 if (rc != OK) return SSL_TLSEXT_ERR_NOACK;
750
751 rc = init_dh(server_sni, cbinfo->dhparam, NULL);
752 if (rc != OK) return SSL_TLSEXT_ERR_NOACK;
753
754 DEBUG(D_tls) debug_printf("Switching SSL context.\n");
755 SSL_set_SSL_CTX(s, server_sni);
756
757 return SSL_TLSEXT_ERR_OK;
758 }
759 #endif /* EXIM_HAVE_OPENSSL_TLSEXT */
760
761
762
763
764 #ifdef EXPERIMENTAL_OCSP
765
766 /*************************************************
767 *        Callback to handle OCSP Stapling        *
768 *************************************************/
769
770 /* Called when acting as server during the TLS session setup if the client
771 requests OCSP information with a Certificate Status Request.
772
773 Documentation via openssl s_server.c and the Apache patch from the OpenSSL
774 project.
775
776 */
777
778 static int
779 tls_server_stapling_cb(SSL *s, void *arg)
780 {
781 const tls_ext_ctx_cb *cbinfo = (tls_ext_ctx_cb *) arg;
782 uschar *response_der;
783 int response_der_len;
784
785 if (log_extra_selector & LX_tls_cipher)
786   log_write(0, LOG_MAIN, "[%s] Recieved OCSP stapling req;%s responding",
787     sender_host_address, cbinfo->u_ocsp.server.response ? "":" not");
788 else
789   DEBUG(D_tls) debug_printf("Received TLS status request (OCSP stapling); %s response.",
790     cbinfo->u_ocsp.server.response ? "have" : "lack");
791
792 tls_in.ocsp = OCSP_NOT_RESP;
793 if (!cbinfo->u_ocsp.server.response)
794   return SSL_TLSEXT_ERR_NOACK;
795
796 response_der = NULL;
797 response_der_len = i2d_OCSP_RESPONSE(cbinfo->u_ocsp.server.response,
798                       &response_der);
799 if (response_der_len <= 0)
800   return SSL_TLSEXT_ERR_NOACK;
801
802 SSL_set_tlsext_status_ocsp_resp(server_ssl, response_der, response_der_len);
803 tls_in.ocsp = OCSP_VFIED;
804 return SSL_TLSEXT_ERR_OK;
805 }
806
807
808 static void
809 time_print(BIO * bp, const char * str, ASN1_GENERALIZEDTIME * time)
810 {
811 BIO_printf(bp, "\t%s: ", str);
812 ASN1_GENERALIZEDTIME_print(bp, time);
813 BIO_puts(bp, "\n");
814 }
815
816 static int
817 tls_client_stapling_cb(SSL *s, void *arg)
818 {
819 tls_ext_ctx_cb * cbinfo = arg;
820 const unsigned char * p;
821 int len;
822 OCSP_RESPONSE * rsp;
823 OCSP_BASICRESP * bs;
824 int i;
825
826 DEBUG(D_tls) debug_printf("Received TLS status response (OCSP stapling):");
827 len = SSL_get_tlsext_status_ocsp_resp(s, &p);
828 if(!p)
829  {
830   /* Expect this when we requested ocsp but got none */
831   if (  cbinfo->u_ocsp.client.verify_required
832      && log_extra_selector & LX_tls_cipher)
833     log_write(0, LOG_MAIN, "Received TLS status callback, null content");
834   else
835     DEBUG(D_tls) debug_printf(" null\n");
836   return cbinfo->u_ocsp.client.verify_required ? 0 : 1;
837  }
838
839 if(!(rsp = d2i_OCSP_RESPONSE(NULL, &p, len)))
840  {
841   tls_out.ocsp = OCSP_FAILED;
842   if (log_extra_selector & LX_tls_cipher)
843     log_write(0, LOG_MAIN, "Received TLS status response, parse error");
844   else
845     DEBUG(D_tls) debug_printf(" parse error\n");
846   return 0;
847  }
848
849 if(!(bs = OCSP_response_get1_basic(rsp)))
850   {
851   tls_out.ocsp = OCSP_FAILED;
852   if (log_extra_selector & LX_tls_cipher)
853     log_write(0, LOG_MAIN, "Received TLS status response, error parsing response");
854   else
855     DEBUG(D_tls) debug_printf(" error parsing response\n");
856   OCSP_RESPONSE_free(rsp);
857   return 0;
858   }
859
860 /* We'd check the nonce here if we'd put one in the request. */
861 /* However that would defeat cacheability on the server so we don't. */
862
863 /* This section of code reworked from OpenSSL apps source;
864    The OpenSSL Project retains copyright:
865    Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
866 */
867   {
868     BIO * bp = NULL;
869     int status, reason;
870     ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd;
871
872     DEBUG(D_tls) bp = BIO_new_fp(stderr, BIO_NOCLOSE);
873
874     /*OCSP_RESPONSE_print(bp, rsp, 0);   extreme debug: stapling content */
875
876     /* Use the chain that verified the server cert to verify the stapled info */
877     /* DEBUG(D_tls) x509_store_dump_cert_s_names(cbinfo->u_ocsp.client.verify_store); */
878
879     if ((i = OCSP_basic_verify(bs, NULL,
880               cbinfo->u_ocsp.client.verify_store, 0)) <= 0)
881       {
882       tls_out.ocsp = OCSP_FAILED;
883       BIO_printf(bp, "OCSP response verify failure\n");
884       ERR_print_errors(bp);
885       i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
886       goto out;
887       }
888
889     BIO_printf(bp, "OCSP response well-formed and signed OK\n");
890
891       {
892       STACK_OF(OCSP_SINGLERESP) * sresp = bs->tbsResponseData->responses;
893       OCSP_SINGLERESP * single;
894
895       if (sk_OCSP_SINGLERESP_num(sresp) != 1)
896         {
897         tls_out.ocsp = OCSP_FAILED;
898         log_write(0, LOG_MAIN, "OCSP stapling "
899             "with multiple responses not handled");
900         i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
901         goto out;
902         }
903       single = OCSP_resp_get0(bs, 0);
904       status = OCSP_single_get0_status(single, &reason, &rev,
905                   &thisupd, &nextupd);
906       }
907
908     DEBUG(D_tls) time_print(bp, "This OCSP Update", thisupd);
909     DEBUG(D_tls) if(nextupd) time_print(bp, "Next OCSP Update", nextupd);
910     if (!OCSP_check_validity(thisupd, nextupd,
911           EXIM_OCSP_SKEW_SECONDS, EXIM_OCSP_MAX_AGE))
912       {
913       tls_out.ocsp = OCSP_FAILED;
914       DEBUG(D_tls) ERR_print_errors(bp);
915       log_write(0, LOG_MAIN, "Server OSCP dates invalid");
916       i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
917       }
918     else
919       {
920       DEBUG(D_tls) BIO_printf(bp, "Certificate status: %s\n",
921                     OCSP_cert_status_str(status));
922       switch(status)
923         {
924         case V_OCSP_CERTSTATUS_GOOD:
925           tls_out.ocsp = OCSP_VFIED;
926           i = 1;
927           break;
928         case V_OCSP_CERTSTATUS_REVOKED:
929           tls_out.ocsp = OCSP_FAILED;
930           log_write(0, LOG_MAIN, "Server certificate revoked%s%s",
931               reason != -1 ? "; reason: " : "",
932               reason != -1 ? OCSP_crl_reason_str(reason) : "");
933           DEBUG(D_tls) time_print(bp, "Revocation Time", rev);
934           i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
935           break;
936         default:
937           tls_out.ocsp = OCSP_FAILED;
938           log_write(0, LOG_MAIN,
939               "Server certificate status unknown, in OCSP stapling");
940           i = cbinfo->u_ocsp.client.verify_required ? 0 : 1;
941           break;
942         }
943       }
944   out:
945     BIO_free(bp);
946   }
947
948 OCSP_RESPONSE_free(rsp);
949 return i;
950 }
951 #endif  /*EXPERIMENTAL_OCSP*/
952
953
954
955 /*************************************************
956 *            Initialize for TLS                  *
957 *************************************************/
958
959 /* Called from both server and client code, to do preliminary initialization of
960 the library.
961
962 Arguments:
963   host            connected host, if client; NULL if server
964   dhparam         DH parameter file
965   certificate     certificate file
966   privatekey      private key
967   ocsp_file       file of stapling info (server); flag for require ocsp (client)
968   addr            address if client; NULL if server (for some randomness)
969
970 Returns:          OK/DEFER/FAIL
971 */
972
973 static int
974 tls_init(SSL_CTX **ctxp, host_item *host, uschar *dhparam, uschar *certificate,
975   uschar *privatekey,
976 #ifdef EXPERIMENTAL_OCSP
977   uschar *ocsp_file,
978 #endif
979   address_item *addr, tls_ext_ctx_cb ** cbp)
980 {
981 long init_options;
982 int rc;
983 BOOL okay;
984 tls_ext_ctx_cb *cbinfo;
985
986 cbinfo = store_malloc(sizeof(tls_ext_ctx_cb));
987 cbinfo->certificate = certificate;
988 cbinfo->privatekey = privatekey;
989 #ifdef EXPERIMENTAL_OCSP
990 if ((cbinfo->is_server = host==NULL))
991   {
992   cbinfo->u_ocsp.server.file = ocsp_file;
993   cbinfo->u_ocsp.server.file_expanded = NULL;
994   cbinfo->u_ocsp.server.response = NULL;
995   }
996 else
997   cbinfo->u_ocsp.client.verify_store = NULL;
998 #endif
999 cbinfo->dhparam = dhparam;
1000 cbinfo->host = host;
1001
1002 SSL_load_error_strings();          /* basic set up */
1003 OpenSSL_add_ssl_algorithms();
1004
1005 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
1006 /* SHA256 is becoming ever more popular. This makes sure it gets added to the
1007 list of available digests. */
1008 EVP_add_digest(EVP_sha256());
1009 #endif
1010
1011 /* Create a context.
1012 The OpenSSL docs in 1.0.1b have not been updated to clarify TLS variant
1013 negotiation in the different methods; as far as I can tell, the only
1014 *_{server,client}_method which allows negotiation is SSLv23, which exists even
1015 when OpenSSL is built without SSLv2 support.
1016 By disabling with openssl_options, we can let admins re-enable with the
1017 existing knob. */
1018
1019 *ctxp = SSL_CTX_new((host == NULL)?
1020   SSLv23_server_method() : SSLv23_client_method());
1021
1022 if (*ctxp == NULL) return tls_error(US"SSL_CTX_new", host, NULL);
1023
1024 /* It turns out that we need to seed the random number generator this early in
1025 order to get the full complement of ciphers to work. It took me roughly a day
1026 of work to discover this by experiment.
1027
1028 On systems that have /dev/urandom, SSL may automatically seed itself from
1029 there. Otherwise, we have to make something up as best we can. Double check
1030 afterwards. */
1031
1032 if (!RAND_status())
1033   {
1034   randstuff r;
1035   gettimeofday(&r.tv, NULL);
1036   r.p = getpid();
1037
1038   RAND_seed((uschar *)(&r), sizeof(r));
1039   RAND_seed((uschar *)big_buffer, big_buffer_size);
1040   if (addr != NULL) RAND_seed((uschar *)addr, sizeof(addr));
1041
1042   if (!RAND_status())
1043     return tls_error(US"RAND_status", host,
1044       US"unable to seed random number generator");
1045   }
1046
1047 /* Set up the information callback, which outputs if debugging is at a suitable
1048 level. */
1049
1050 SSL_CTX_set_info_callback(*ctxp, (void (*)())info_callback);
1051
1052 /* Automatically re-try reads/writes after renegotiation. */
1053 (void) SSL_CTX_set_mode(*ctxp, SSL_MODE_AUTO_RETRY);
1054
1055 /* Apply administrator-supplied work-arounds.
1056 Historically we applied just one requested option,
1057 SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS, but when bug 994 requested a second, we
1058 moved to an administrator-controlled list of options to specify and
1059 grandfathered in the first one as the default value for "openssl_options".
1060
1061 No OpenSSL version number checks: the options we accept depend upon the
1062 availability of the option value macros from OpenSSL.  */
1063
1064 okay = tls_openssl_options_parse(openssl_options, &init_options);
1065 if (!okay)
1066   return tls_error(US"openssl_options parsing failed", host, NULL);
1067
1068 if (init_options)
1069   {
1070   DEBUG(D_tls) debug_printf("setting SSL CTX options: %#lx\n", init_options);
1071   if (!(SSL_CTX_set_options(*ctxp, init_options)))
1072     return tls_error(string_sprintf(
1073           "SSL_CTX_set_option(%#lx)", init_options), host, NULL);
1074   }
1075 else
1076   DEBUG(D_tls) debug_printf("no SSL CTX options to set\n");
1077
1078 /* Initialize with DH parameters if supplied */
1079
1080 if (!init_dh(*ctxp, dhparam, host)) return DEFER;
1081
1082 /* Set up certificate and key (and perhaps OCSP info) */
1083
1084 rc = tls_expand_session_files(*ctxp, cbinfo);
1085 if (rc != OK) return rc;
1086
1087 /* If we need to handle SNI, do so */
1088 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
1089 if (host == NULL)               /* server */
1090   {
1091 # ifdef EXPERIMENTAL_OCSP
1092   /* We check u_ocsp.server.file, not server.response, because we care about if
1093   the option exists, not what the current expansion might be, as SNI might
1094   change the certificate and OCSP file in use between now and the time the
1095   callback is invoked. */
1096   if (cbinfo->u_ocsp.server.file)
1097     {
1098     SSL_CTX_set_tlsext_status_cb(server_ctx, tls_server_stapling_cb);
1099     SSL_CTX_set_tlsext_status_arg(server_ctx, cbinfo);
1100     }
1101 # endif
1102   /* We always do this, so that $tls_sni is available even if not used in
1103   tls_certificate */
1104   SSL_CTX_set_tlsext_servername_callback(*ctxp, tls_servername_cb);
1105   SSL_CTX_set_tlsext_servername_arg(*ctxp, cbinfo);
1106   }
1107 # ifdef EXPERIMENTAL_OCSP
1108 else                    /* client */
1109   if(ocsp_file)         /* wanting stapling */
1110     {
1111     if (!(cbinfo->u_ocsp.client.verify_store = X509_STORE_new()))
1112       {
1113       DEBUG(D_tls) debug_printf("failed to create store for stapling verify\n");
1114       return FAIL;
1115       }
1116     SSL_CTX_set_tlsext_status_cb(*ctxp, tls_client_stapling_cb);
1117     SSL_CTX_set_tlsext_status_arg(*ctxp, cbinfo);
1118     }
1119 # endif
1120 #endif
1121
1122 /* Set up the RSA callback */
1123
1124 SSL_CTX_set_tmp_rsa_callback(*ctxp, rsa_callback);
1125
1126 /* Finally, set the timeout, and we are done */
1127
1128 SSL_CTX_set_timeout(*ctxp, ssl_session_timeout);
1129 DEBUG(D_tls) debug_printf("Initialized TLS\n");
1130
1131 *cbp = cbinfo;
1132
1133 return OK;
1134 }
1135
1136
1137
1138
1139 /*************************************************
1140 *           Get name of cipher in use            *
1141 *************************************************/
1142
1143 /*
1144 Argument:   pointer to an SSL structure for the connection
1145             buffer to use for answer
1146             size of buffer
1147             pointer to number of bits for cipher
1148 Returns:    nothing
1149 */
1150
1151 static void
1152 construct_cipher_name(SSL *ssl, uschar *cipherbuf, int bsize, int *bits)
1153 {
1154 /* With OpenSSL 1.0.0a, this needs to be const but the documentation doesn't
1155 yet reflect that.  It should be a safe change anyway, even 0.9.8 versions have
1156 the accessor functions use const in the prototype. */
1157 const SSL_CIPHER *c;
1158 const uschar *ver;
1159
1160 ver = (const uschar *)SSL_get_version(ssl);
1161
1162 c = (const SSL_CIPHER *) SSL_get_current_cipher(ssl);
1163 SSL_CIPHER_get_bits(c, bits);
1164
1165 string_format(cipherbuf, bsize, "%s:%s:%u", ver,
1166   SSL_CIPHER_get_name(c), *bits);
1167
1168 DEBUG(D_tls) debug_printf("Cipher: %s\n", cipherbuf);
1169 }
1170
1171
1172
1173
1174
1175 /*************************************************
1176 *        Set up for verifying certificates       *
1177 *************************************************/
1178
1179 /* Called by both client and server startup
1180
1181 Arguments:
1182   sctx          SSL_CTX* to initialise
1183   certs         certs file or NULL
1184   crl           CRL file or NULL
1185   host          NULL in a server; the remote host in a client
1186   optional      TRUE if called from a server for a host in tls_try_verify_hosts;
1187                 otherwise passed as FALSE
1188   cert_vfy_cb   Callback function for certificate verification
1189
1190 Returns:        OK/DEFER/FAIL
1191 */
1192
1193 static int
1194 setup_certs(SSL_CTX *sctx, uschar *certs, uschar *crl, host_item *host, BOOL optional,
1195     int (*cert_vfy_cb)(int, X509_STORE_CTX *) )
1196 {
1197 uschar *expcerts, *expcrl;
1198
1199 if (!expand_check(certs, US"tls_verify_certificates", &expcerts))
1200   return DEFER;
1201
1202 if (expcerts != NULL && *expcerts != '\0')
1203   {
1204   struct stat statbuf;
1205   if (!SSL_CTX_set_default_verify_paths(sctx))
1206     return tls_error(US"SSL_CTX_set_default_verify_paths", host, NULL);
1207
1208   if (Ustat(expcerts, &statbuf) < 0)
1209     {
1210     log_write(0, LOG_MAIN|LOG_PANIC,
1211       "failed to stat %s for certificates", expcerts);
1212     return DEFER;
1213     }
1214   else
1215     {
1216     uschar *file, *dir;
1217     if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
1218       { file = NULL; dir = expcerts; }
1219     else
1220       { file = expcerts; dir = NULL; }
1221
1222     /* If a certificate file is empty, the next function fails with an
1223     unhelpful error message. If we skip it, we get the correct behaviour (no
1224     certificates are recognized, but the error message is still misleading (it
1225     says no certificate was supplied.) But this is better. */
1226
1227     if ((file == NULL || statbuf.st_size > 0) &&
1228           !SSL_CTX_load_verify_locations(sctx, CS file, CS dir))
1229       return tls_error(US"SSL_CTX_load_verify_locations", host, NULL);
1230
1231     if (file != NULL)
1232       {
1233       SSL_CTX_set_client_CA_list(sctx, SSL_load_client_CA_file(CS file));
1234       }
1235     }
1236
1237   /* Handle a certificate revocation list. */
1238
1239   #if OPENSSL_VERSION_NUMBER > 0x00907000L
1240
1241   /* This bit of code is now the version supplied by Lars Mainka. (I have
1242    * merely reformatted it into the Exim code style.)
1243
1244    * "From here I changed the code to add support for multiple crl's
1245    * in pem format in one file or to support hashed directory entries in
1246    * pem format instead of a file. This method now uses the library function
1247    * X509_STORE_load_locations to add the CRL location to the SSL context.
1248    * OpenSSL will then handle the verify against CA certs and CRLs by
1249    * itself in the verify callback." */
1250
1251   if (!expand_check(crl, US"tls_crl", &expcrl)) return DEFER;
1252   if (expcrl != NULL && *expcrl != 0)
1253     {
1254     struct stat statbufcrl;
1255     if (Ustat(expcrl, &statbufcrl) < 0)
1256       {
1257       log_write(0, LOG_MAIN|LOG_PANIC,
1258         "failed to stat %s for certificates revocation lists", expcrl);
1259       return DEFER;
1260       }
1261     else
1262       {
1263       /* is it a file or directory? */
1264       uschar *file, *dir;
1265       X509_STORE *cvstore = SSL_CTX_get_cert_store(sctx);
1266       if ((statbufcrl.st_mode & S_IFMT) == S_IFDIR)
1267         {
1268         file = NULL;
1269         dir = expcrl;
1270         DEBUG(D_tls) debug_printf("SSL CRL value is a directory %s\n", dir);
1271         }
1272       else
1273         {
1274         file = expcrl;
1275         dir = NULL;
1276         DEBUG(D_tls) debug_printf("SSL CRL value is a file %s\n", file);
1277         }
1278       if (X509_STORE_load_locations(cvstore, CS file, CS dir) == 0)
1279         return tls_error(US"X509_STORE_load_locations", host, NULL);
1280
1281       /* setting the flags to check against the complete crl chain */
1282
1283       X509_STORE_set_flags(cvstore,
1284         X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
1285       }
1286     }
1287
1288   #endif  /* OPENSSL_VERSION_NUMBER > 0x00907000L */
1289
1290   /* If verification is optional, don't fail if no certificate */
1291
1292   SSL_CTX_set_verify(sctx,
1293     SSL_VERIFY_PEER | (optional? 0 : SSL_VERIFY_FAIL_IF_NO_PEER_CERT),
1294     cert_vfy_cb);
1295   }
1296
1297 return OK;
1298 }
1299
1300
1301
1302 /*************************************************
1303 *       Start a TLS session in a server          *
1304 *************************************************/
1305
1306 /* This is called when Exim is running as a server, after having received
1307 the STARTTLS command. It must respond to that command, and then negotiate
1308 a TLS session.
1309
1310 Arguments:
1311   require_ciphers   allowed ciphers
1312
1313 Returns:            OK on success
1314                     DEFER for errors before the start of the negotiation
1315                     FAIL for errors during the negotation; the server can't
1316                       continue running.
1317 */
1318
1319 int
1320 tls_server_start(const uschar *require_ciphers)
1321 {
1322 int rc;
1323 uschar *expciphers;
1324 tls_ext_ctx_cb *cbinfo;
1325 static uschar cipherbuf[256];
1326
1327 /* Check for previous activation */
1328
1329 if (tls_in.active >= 0)
1330   {
1331   tls_error(US"STARTTLS received after TLS started", NULL, US"");
1332   smtp_printf("554 Already in TLS\r\n");
1333   return FAIL;
1334   }
1335
1336 /* Initialize the SSL library. If it fails, it will already have logged
1337 the error. */
1338
1339 rc = tls_init(&server_ctx, NULL, tls_dhparam, tls_certificate, tls_privatekey,
1340 #ifdef EXPERIMENTAL_OCSP
1341     tls_ocsp_file,
1342 #endif
1343     NULL, &server_static_cbinfo);
1344 if (rc != OK) return rc;
1345 cbinfo = server_static_cbinfo;
1346
1347 if (!expand_check(require_ciphers, US"tls_require_ciphers", &expciphers))
1348   return FAIL;
1349
1350 /* In OpenSSL, cipher components are separated by hyphens. In GnuTLS, they
1351 were historically separated by underscores. So that I can use either form in my
1352 tests, and also for general convenience, we turn underscores into hyphens here.
1353 */
1354
1355 if (expciphers != NULL)
1356   {
1357   uschar *s = expciphers;
1358   while (*s != 0) { if (*s == '_') *s = '-'; s++; }
1359   DEBUG(D_tls) debug_printf("required ciphers: %s\n", expciphers);
1360   if (!SSL_CTX_set_cipher_list(server_ctx, CS expciphers))
1361     return tls_error(US"SSL_CTX_set_cipher_list", NULL, NULL);
1362   cbinfo->server_cipher_list = expciphers;
1363   }
1364
1365 /* If this is a host for which certificate verification is mandatory or
1366 optional, set up appropriately. */
1367
1368 tls_in.certificate_verified = FALSE;
1369 server_verify_callback_called = FALSE;
1370
1371 if (verify_check_host(&tls_verify_hosts) == OK)
1372   {
1373   rc = setup_certs(server_ctx, tls_verify_certificates, tls_crl, NULL,
1374                         FALSE, verify_callback_server);
1375   if (rc != OK) return rc;
1376   server_verify_optional = FALSE;
1377   }
1378 else if (verify_check_host(&tls_try_verify_hosts) == OK)
1379   {
1380   rc = setup_certs(server_ctx, tls_verify_certificates, tls_crl, NULL,
1381                         TRUE, verify_callback_server);
1382   if (rc != OK) return rc;
1383   server_verify_optional = TRUE;
1384   }
1385
1386 /* Prepare for new connection */
1387
1388 if ((server_ssl = SSL_new(server_ctx)) == NULL) return tls_error(US"SSL_new", NULL, NULL);
1389
1390 /* Warning: we used to SSL_clear(ssl) here, it was removed.
1391  *
1392  * With the SSL_clear(), we get strange interoperability bugs with
1393  * OpenSSL 1.0.1b and TLS1.1/1.2.  It looks as though this may be a bug in
1394  * OpenSSL itself, as a clear should not lead to inability to follow protocols.
1395  *
1396  * The SSL_clear() call is to let an existing SSL* be reused, typically after
1397  * session shutdown.  In this case, we have a brand new object and there's no
1398  * obvious reason to immediately clear it.  I'm guessing that this was
1399  * originally added because of incomplete initialisation which the clear fixed,
1400  * in some historic release.
1401  */
1402
1403 /* Set context and tell client to go ahead, except in the case of TLS startup
1404 on connection, where outputting anything now upsets the clients and tends to
1405 make them disconnect. We need to have an explicit fflush() here, to force out
1406 the response. Other smtp_printf() calls do not need it, because in non-TLS
1407 mode, the fflush() happens when smtp_getc() is called. */
1408
1409 SSL_set_session_id_context(server_ssl, sid_ctx, Ustrlen(sid_ctx));
1410 if (!tls_in.on_connect)
1411   {
1412   smtp_printf("220 TLS go ahead\r\n");
1413   fflush(smtp_out);
1414   }
1415
1416 /* Now negotiate the TLS session. We put our own timer on it, since it seems
1417 that the OpenSSL library doesn't. */
1418
1419 SSL_set_wfd(server_ssl, fileno(smtp_out));
1420 SSL_set_rfd(server_ssl, fileno(smtp_in));
1421 SSL_set_accept_state(server_ssl);
1422
1423 DEBUG(D_tls) debug_printf("Calling SSL_accept\n");
1424
1425 sigalrm_seen = FALSE;
1426 if (smtp_receive_timeout > 0) alarm(smtp_receive_timeout);
1427 rc = SSL_accept(server_ssl);
1428 alarm(0);
1429
1430 if (rc <= 0)
1431   {
1432   tls_error(US"SSL_accept", NULL, sigalrm_seen ? US"timed out" : NULL);
1433   if (ERR_get_error() == 0)
1434     log_write(0, LOG_MAIN,
1435         "TLS client disconnected cleanly (rejected our certificate?)");
1436   return FAIL;
1437   }
1438
1439 DEBUG(D_tls) debug_printf("SSL_accept was successful\n");
1440
1441 /* TLS has been set up. Adjust the input functions to read via TLS,
1442 and initialize things. */
1443
1444 construct_cipher_name(server_ssl, cipherbuf, sizeof(cipherbuf), &tls_in.bits);
1445 tls_in.cipher = cipherbuf;
1446
1447 DEBUG(D_tls)
1448   {
1449   uschar buf[2048];
1450   if (SSL_get_shared_ciphers(server_ssl, CS buf, sizeof(buf)) != NULL)
1451     debug_printf("Shared ciphers: %s\n", buf);
1452   }
1453
1454 /* Record the certificate we presented */
1455   {
1456   X509 * crt = SSL_get_certificate(server_ssl);
1457   tls_in.ourcert = crt ? X509_dup(crt) : NULL;
1458   }
1459
1460 /* Only used by the server-side tls (tls_in), including tls_getc.
1461    Client-side (tls_out) reads (seem to?) go via
1462    smtp_read_response()/ip_recv().
1463    Hence no need to duplicate for _in and _out.
1464  */
1465 ssl_xfer_buffer = store_malloc(ssl_xfer_buffer_size);
1466 ssl_xfer_buffer_lwm = ssl_xfer_buffer_hwm = 0;
1467 ssl_xfer_eof = ssl_xfer_error = 0;
1468
1469 receive_getc = tls_getc;
1470 receive_ungetc = tls_ungetc;
1471 receive_feof = tls_feof;
1472 receive_ferror = tls_ferror;
1473 receive_smtp_buffered = tls_smtp_buffered;
1474
1475 tls_in.active = fileno(smtp_out);
1476 return OK;
1477 }
1478
1479
1480
1481
1482
1483 /*************************************************
1484 *    Start a TLS session in a client             *
1485 *************************************************/
1486
1487 /* Called from the smtp transport after STARTTLS has been accepted.
1488
1489 Argument:
1490   fd               the fd of the connection
1491   host             connected host (for messages)
1492   addr             the first address
1493   ob               smtp transport options
1494
1495 Returns:           OK on success
1496                    FAIL otherwise - note that tls_error() will not give DEFER
1497                      because this is not a server
1498 */
1499
1500 int
1501 tls_client_start(int fd, host_item *host, address_item *addr,
1502   void *v_ob)
1503 {
1504 smtp_transport_options_block * ob = v_ob;
1505 static uschar txt[256];
1506 uschar *expciphers;
1507 X509* server_cert;
1508 int rc;
1509 static uschar cipherbuf[256];
1510 #ifdef EXPERIMENTAL_OCSP
1511 BOOL require_ocsp = verify_check_this_host(&ob->hosts_require_ocsp,
1512   NULL, host->name, host->address, NULL) == OK;
1513 BOOL request_ocsp = require_ocsp ? TRUE
1514   : verify_check_this_host(&ob->hosts_request_ocsp,
1515       NULL, host->name, host->address, NULL) == OK;
1516 #endif
1517
1518 rc = tls_init(&client_ctx, host, NULL,
1519     ob->tls_certificate, ob->tls_privatekey,
1520 #ifdef EXPERIMENTAL_OCSP
1521     (void *)(long)request_ocsp,
1522 #endif
1523     addr, &client_static_cbinfo);
1524 if (rc != OK) return rc;
1525
1526 tls_out.certificate_verified = FALSE;
1527 client_verify_callback_called = FALSE;
1528
1529 if (!expand_check(ob->tls_require_ciphers, US"tls_require_ciphers",
1530     &expciphers))
1531   return FAIL;
1532
1533 /* In OpenSSL, cipher components are separated by hyphens. In GnuTLS, they
1534 are separated by underscores. So that I can use either form in my tests, and
1535 also for general convenience, we turn underscores into hyphens here. */
1536
1537 if (expciphers != NULL)
1538   {
1539   uschar *s = expciphers;
1540   while (*s != 0) { if (*s == '_') *s = '-'; s++; }
1541   DEBUG(D_tls) debug_printf("required ciphers: %s\n", expciphers);
1542   if (!SSL_CTX_set_cipher_list(client_ctx, CS expciphers))
1543     return tls_error(US"SSL_CTX_set_cipher_list", host, NULL);
1544   }
1545
1546 /* stick to the old behaviour for compatibility if tls_verify_certificates is 
1547    set but both tls_verify_hosts and tls_try_verify_hosts is not set. Check only
1548    the specified host patterns if one of them is defined */
1549 if ((!ob->tls_verify_hosts && !ob->tls_try_verify_hosts) ||
1550     (verify_check_host(&ob->tls_verify_hosts) == OK))
1551   {
1552   if ((rc = setup_certs(client_ctx, ob->tls_verify_certificates,
1553         ob->tls_crl, host, FALSE, verify_callback_client)) != OK)
1554     return rc;
1555   client_verify_optional = FALSE;
1556   }
1557 else if (verify_check_host(&ob->tls_try_verify_hosts) == OK)
1558   {
1559   if ((rc = setup_certs(client_ctx, ob->tls_verify_certificates,
1560         ob->tls_crl, host, TRUE, verify_callback_client)) != OK)
1561     return rc;
1562   client_verify_optional = TRUE;
1563   }
1564
1565 if ((client_ssl = SSL_new(client_ctx)) == NULL)
1566   return tls_error(US"SSL_new", host, NULL);
1567 SSL_set_session_id_context(client_ssl, sid_ctx, Ustrlen(sid_ctx));
1568 SSL_set_fd(client_ssl, fd);
1569 SSL_set_connect_state(client_ssl);
1570
1571 if (ob->tls_sni)
1572   {
1573   if (!expand_check(ob->tls_sni, US"tls_sni", &tls_out.sni))
1574     return FAIL;
1575   if (tls_out.sni == NULL)
1576     {
1577     DEBUG(D_tls) debug_printf("Setting TLS SNI forced to fail, not sending\n");
1578     }
1579   else if (!Ustrlen(tls_out.sni))
1580     tls_out.sni = NULL;
1581   else
1582     {
1583 #ifdef EXIM_HAVE_OPENSSL_TLSEXT
1584     DEBUG(D_tls) debug_printf("Setting TLS SNI \"%s\"\n", tls_out.sni);
1585     SSL_set_tlsext_host_name(client_ssl, tls_out.sni);
1586 #else
1587     DEBUG(D_tls)
1588       debug_printf("OpenSSL at build-time lacked SNI support, ignoring \"%s\"\n",
1589           tls_out.sni);
1590 #endif
1591     }
1592   }
1593
1594 #ifdef EXPERIMENTAL_OCSP
1595 /* Request certificate status at connection-time.  If the server
1596 does OCSP stapling we will get the callback (set in tls_init()) */
1597 if (request_ocsp)
1598   {
1599   SSL_set_tlsext_status_type(client_ssl, TLSEXT_STATUSTYPE_ocsp);
1600   client_static_cbinfo->u_ocsp.client.verify_required = require_ocsp;
1601   tls_out.ocsp = OCSP_NOT_RESP;
1602   }
1603 #endif
1604
1605 /* There doesn't seem to be a built-in timeout on connection. */
1606
1607 DEBUG(D_tls) debug_printf("Calling SSL_connect\n");
1608 sigalrm_seen = FALSE;
1609 alarm(ob->command_timeout);
1610 rc = SSL_connect(client_ssl);
1611 alarm(0);
1612
1613 if (rc <= 0)
1614   return tls_error(US"SSL_connect", host, sigalrm_seen ? US"timed out" : NULL);
1615
1616 DEBUG(D_tls) debug_printf("SSL_connect succeeded\n");
1617
1618 /* Beware anonymous ciphers which lead to server_cert being NULL */
1619 /*XXX server_cert is never freed... use X509_free() */
1620 server_cert = SSL_get_peer_certificate (client_ssl);
1621 if (server_cert)
1622   {
1623   tls_out.peerdn = US X509_NAME_oneline(X509_get_subject_name(server_cert),
1624     CS txt, sizeof(txt));
1625   tls_out.peerdn = txt;         /*XXX a static buffer... */
1626   }
1627 else
1628   tls_out.peerdn = NULL;
1629
1630 construct_cipher_name(client_ssl, cipherbuf, sizeof(cipherbuf), &tls_out.bits);
1631 tls_out.cipher = cipherbuf;
1632
1633 /* Record the certificate we presented */
1634   {
1635   X509 * crt = SSL_get_certificate(client_ssl);
1636   tls_out.ourcert = crt ? X509_dup(crt) : NULL;
1637   }
1638
1639 tls_out.active = fd;
1640 return OK;
1641 }
1642
1643
1644
1645
1646
1647 /*************************************************
1648 *            TLS version of getc                 *
1649 *************************************************/
1650
1651 /* This gets the next byte from the TLS input buffer. If the buffer is empty,
1652 it refills the buffer via the SSL reading function.
1653
1654 Arguments:  none
1655 Returns:    the next character or EOF
1656
1657 Only used by the server-side TLS.
1658 */
1659
1660 int
1661 tls_getc(void)
1662 {
1663 if (ssl_xfer_buffer_lwm >= ssl_xfer_buffer_hwm)
1664   {
1665   int error;
1666   int inbytes;
1667
1668   DEBUG(D_tls) debug_printf("Calling SSL_read(%p, %p, %u)\n", server_ssl,
1669     ssl_xfer_buffer, ssl_xfer_buffer_size);
1670
1671   if (smtp_receive_timeout > 0) alarm(smtp_receive_timeout);
1672   inbytes = SSL_read(server_ssl, CS ssl_xfer_buffer, ssl_xfer_buffer_size);
1673   error = SSL_get_error(server_ssl, inbytes);
1674   alarm(0);
1675
1676   /* SSL_ERROR_ZERO_RETURN appears to mean that the SSL session has been
1677   closed down, not that the socket itself has been closed down. Revert to
1678   non-SSL handling. */
1679
1680   if (error == SSL_ERROR_ZERO_RETURN)
1681     {
1682     DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
1683
1684     receive_getc = smtp_getc;
1685     receive_ungetc = smtp_ungetc;
1686     receive_feof = smtp_feof;
1687     receive_ferror = smtp_ferror;
1688     receive_smtp_buffered = smtp_buffered;
1689
1690     SSL_free(server_ssl);
1691     server_ssl = NULL;
1692     tls_in.active = -1;
1693     tls_in.bits = 0;
1694     tls_in.cipher = NULL;
1695     tls_in.peerdn = NULL;
1696     tls_in.sni = NULL;
1697
1698     return smtp_getc();
1699     }
1700
1701   /* Handle genuine errors */
1702
1703   else if (error == SSL_ERROR_SSL)
1704     {
1705     ERR_error_string(ERR_get_error(), ssl_errstring);
1706     log_write(0, LOG_MAIN, "TLS error (SSL_read): %s", ssl_errstring);
1707     ssl_xfer_error = 1;
1708     return EOF;
1709     }
1710
1711   else if (error != SSL_ERROR_NONE)
1712     {
1713     DEBUG(D_tls) debug_printf("Got SSL error %d\n", error);
1714     ssl_xfer_error = 1;
1715     return EOF;
1716     }
1717
1718 #ifndef DISABLE_DKIM
1719   dkim_exim_verify_feed(ssl_xfer_buffer, inbytes);
1720 #endif
1721   ssl_xfer_buffer_hwm = inbytes;
1722   ssl_xfer_buffer_lwm = 0;
1723   }
1724
1725 /* Something in the buffer; return next uschar */
1726
1727 return ssl_xfer_buffer[ssl_xfer_buffer_lwm++];
1728 }
1729
1730
1731
1732 /*************************************************
1733 *          Read bytes from TLS channel           *
1734 *************************************************/
1735
1736 /*
1737 Arguments:
1738   buff      buffer of data
1739   len       size of buffer
1740
1741 Returns:    the number of bytes read
1742             -1 after a failed read
1743
1744 Only used by the client-side TLS.
1745 */
1746
1747 int
1748 tls_read(BOOL is_server, uschar *buff, size_t len)
1749 {
1750 SSL *ssl = is_server ? server_ssl : client_ssl;
1751 int inbytes;
1752 int error;
1753
1754 DEBUG(D_tls) debug_printf("Calling SSL_read(%p, %p, %u)\n", ssl,
1755   buff, (unsigned int)len);
1756
1757 inbytes = SSL_read(ssl, CS buff, len);
1758 error = SSL_get_error(ssl, inbytes);
1759
1760 if (error == SSL_ERROR_ZERO_RETURN)
1761   {
1762   DEBUG(D_tls) debug_printf("Got SSL_ERROR_ZERO_RETURN\n");
1763   return -1;
1764   }
1765 else if (error != SSL_ERROR_NONE)
1766   {
1767   return -1;
1768   }
1769
1770 return inbytes;
1771 }
1772
1773
1774
1775
1776
1777 /*************************************************
1778 *         Write bytes down TLS channel           *
1779 *************************************************/
1780
1781 /*
1782 Arguments:
1783   is_server channel specifier
1784   buff      buffer of data
1785   len       number of bytes
1786
1787 Returns:    the number of bytes after a successful write,
1788             -1 after a failed write
1789
1790 Used by both server-side and client-side TLS.
1791 */
1792
1793 int
1794 tls_write(BOOL is_server, const uschar *buff, size_t len)
1795 {
1796 int outbytes;
1797 int error;
1798 int left = len;
1799 SSL *ssl = is_server ? server_ssl : client_ssl;
1800
1801 DEBUG(D_tls) debug_printf("tls_do_write(%p, %d)\n", buff, left);
1802 while (left > 0)
1803   {
1804   DEBUG(D_tls) debug_printf("SSL_write(SSL, %p, %d)\n", buff, left);
1805   outbytes = SSL_write(ssl, CS buff, left);
1806   error = SSL_get_error(ssl, outbytes);
1807   DEBUG(D_tls) debug_printf("outbytes=%d error=%d\n", outbytes, error);
1808   switch (error)
1809     {
1810     case SSL_ERROR_SSL:
1811     ERR_error_string(ERR_get_error(), ssl_errstring);
1812     log_write(0, LOG_MAIN, "TLS error (SSL_write): %s", ssl_errstring);
1813     return -1;
1814
1815     case SSL_ERROR_NONE:
1816     left -= outbytes;
1817     buff += outbytes;
1818     break;
1819
1820     case SSL_ERROR_ZERO_RETURN:
1821     log_write(0, LOG_MAIN, "SSL channel closed on write");
1822     return -1;
1823
1824     case SSL_ERROR_SYSCALL:
1825     log_write(0, LOG_MAIN, "SSL_write: (from %s) syscall: %s",
1826       sender_fullhost ? sender_fullhost : US"<unknown>",
1827       strerror(errno));
1828
1829     default:
1830     log_write(0, LOG_MAIN, "SSL_write error %d", error);
1831     return -1;
1832     }
1833   }
1834 return len;
1835 }
1836
1837
1838
1839 /*************************************************
1840 *         Close down a TLS session               *
1841 *************************************************/
1842
1843 /* This is also called from within a delivery subprocess forked from the
1844 daemon, to shut down the TLS library, without actually doing a shutdown (which
1845 would tamper with the SSL session in the parent process).
1846
1847 Arguments:   TRUE if SSL_shutdown is to be called
1848 Returns:     nothing
1849
1850 Used by both server-side and client-side TLS.
1851 */
1852
1853 void
1854 tls_close(BOOL is_server, BOOL shutdown)
1855 {
1856 SSL **sslp = is_server ? &server_ssl : &client_ssl;
1857 int *fdp = is_server ? &tls_in.active : &tls_out.active;
1858
1859 if (*fdp < 0) return;  /* TLS was not active */
1860
1861 if (shutdown)
1862   {
1863   DEBUG(D_tls) debug_printf("tls_close(): shutting down SSL\n");
1864   SSL_shutdown(*sslp);
1865   }
1866
1867 SSL_free(*sslp);
1868 *sslp = NULL;
1869
1870 *fdp = -1;
1871 }
1872
1873
1874
1875
1876 /*************************************************
1877 *  Let tls_require_ciphers be checked at startup *
1878 *************************************************/
1879
1880 /* The tls_require_ciphers option, if set, must be something which the
1881 library can parse.
1882
1883 Returns:     NULL on success, or error message
1884 */
1885
1886 uschar *
1887 tls_validate_require_cipher(void)
1888 {
1889 SSL_CTX *ctx;
1890 uschar *s, *expciphers, *err;
1891
1892 /* this duplicates from tls_init(), we need a better "init just global
1893 state, for no specific purpose" singleton function of our own */
1894
1895 SSL_load_error_strings();
1896 OpenSSL_add_ssl_algorithms();
1897 #if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
1898 /* SHA256 is becoming ever more popular. This makes sure it gets added to the
1899 list of available digests. */
1900 EVP_add_digest(EVP_sha256());
1901 #endif
1902
1903 if (!(tls_require_ciphers && *tls_require_ciphers))
1904   return NULL;
1905
1906 if (!expand_check(tls_require_ciphers, US"tls_require_ciphers", &expciphers))
1907   return US"failed to expand tls_require_ciphers";
1908
1909 if (!(expciphers && *expciphers))
1910   return NULL;
1911
1912 /* normalisation ripped from above */
1913 s = expciphers;
1914 while (*s != 0) { if (*s == '_') *s = '-'; s++; }
1915
1916 err = NULL;
1917
1918 ctx = SSL_CTX_new(SSLv23_server_method());
1919 if (!ctx)
1920   {
1921   ERR_error_string(ERR_get_error(), ssl_errstring);
1922   return string_sprintf("SSL_CTX_new() failed: %s", ssl_errstring);
1923   }
1924
1925 DEBUG(D_tls)
1926   debug_printf("tls_require_ciphers expands to \"%s\"\n", expciphers);
1927
1928 if (!SSL_CTX_set_cipher_list(ctx, CS expciphers))
1929   {
1930   ERR_error_string(ERR_get_error(), ssl_errstring);
1931   err = string_sprintf("SSL_CTX_set_cipher_list(%s) failed", expciphers);
1932   }
1933
1934 SSL_CTX_free(ctx);
1935
1936 return err;
1937 }
1938
1939
1940
1941
1942 /*************************************************
1943 *         Report the library versions.           *
1944 *************************************************/
1945
1946 /* There have historically been some issues with binary compatibility in
1947 OpenSSL libraries; if Exim (like many other applications) is built against
1948 one version of OpenSSL but the run-time linker picks up another version,
1949 it can result in serious failures, including crashing with a SIGSEGV.  So
1950 report the version found by the compiler and the run-time version.
1951
1952 Note: some OS vendors backport security fixes without changing the version
1953 number/string, and the version date remains unchanged.  The _build_ date
1954 will change, so we can more usefully assist with version diagnosis by also
1955 reporting the build date.
1956
1957 Arguments:   a FILE* to print the results to
1958 Returns:     nothing
1959 */
1960
1961 void
1962 tls_version_report(FILE *f)
1963 {
1964 fprintf(f, "Library version: OpenSSL: Compile: %s\n"
1965            "                          Runtime: %s\n"
1966            "                                 : %s\n",
1967            OPENSSL_VERSION_TEXT,
1968            SSLeay_version(SSLEAY_VERSION),
1969            SSLeay_version(SSLEAY_BUILT_ON));
1970 /* third line is 38 characters for the %s and the line is 73 chars long;
1971 the OpenSSL output includes a "built on: " prefix already. */
1972 }
1973
1974
1975
1976
1977 /*************************************************
1978 *            Random number generation            *
1979 *************************************************/
1980
1981 /* Pseudo-random number generation.  The result is not expected to be
1982 cryptographically strong but not so weak that someone will shoot themselves
1983 in the foot using it as a nonce in input in some email header scheme or
1984 whatever weirdness they'll twist this into.  The result should handle fork()
1985 and avoid repeating sequences.  OpenSSL handles that for us.
1986
1987 Arguments:
1988   max       range maximum
1989 Returns     a random number in range [0, max-1]
1990 */
1991
1992 int
1993 vaguely_random_number(int max)
1994 {
1995 unsigned int r;
1996 int i, needed_len;
1997 static pid_t pidlast = 0;
1998 pid_t pidnow;
1999 uschar *p;
2000 uschar smallbuf[sizeof(r)];
2001
2002 if (max <= 1)
2003   return 0;
2004
2005 pidnow = getpid();
2006 if (pidnow != pidlast)
2007   {
2008   /* Although OpenSSL documents that "OpenSSL makes sure that the PRNG state
2009   is unique for each thread", this doesn't apparently apply across processes,
2010   so our own warning from vaguely_random_number_fallback() applies here too.
2011   Fix per PostgreSQL. */
2012   if (pidlast != 0)
2013     RAND_cleanup();
2014   pidlast = pidnow;
2015   }
2016
2017 /* OpenSSL auto-seeds from /dev/random, etc, but this a double-check. */
2018 if (!RAND_status())
2019   {
2020   randstuff r;
2021   gettimeofday(&r.tv, NULL);
2022   r.p = getpid();
2023
2024   RAND_seed((uschar *)(&r), sizeof(r));
2025   }
2026 /* We're after pseudo-random, not random; if we still don't have enough data
2027 in the internal PRNG then our options are limited.  We could sleep and hope
2028 for entropy to come along (prayer technique) but if the system is so depleted
2029 in the first place then something is likely to just keep taking it.  Instead,
2030 we'll just take whatever little bit of pseudo-random we can still manage to
2031 get. */
2032
2033 needed_len = sizeof(r);
2034 /* Don't take 8 times more entropy than needed if int is 8 octets and we were
2035 asked for a number less than 10. */
2036 for (r = max, i = 0; r; ++i)
2037   r >>= 1;
2038 i = (i + 7) / 8;
2039 if (i < needed_len)
2040   needed_len = i;
2041
2042 /* We do not care if crypto-strong */
2043 i = RAND_pseudo_bytes(smallbuf, needed_len);
2044 if (i < 0)
2045   {
2046   DEBUG(D_all)
2047     debug_printf("OpenSSL RAND_pseudo_bytes() not supported by RAND method, using fallback.\n");
2048   return vaguely_random_number_fallback(max);
2049   }
2050
2051 r = 0;
2052 for (p = smallbuf; needed_len; --needed_len, ++p)
2053   {
2054   r *= 256;
2055   r += *p;
2056   }
2057
2058 /* We don't particularly care about weighted results; if someone wants
2059 smooth distribution and cares enough then they should submit a patch then. */
2060 return r % max;
2061 }
2062
2063
2064
2065
2066 /*************************************************
2067 *        OpenSSL option parse                    *
2068 *************************************************/
2069
2070 /* Parse one option for tls_openssl_options_parse below
2071
2072 Arguments:
2073   name    one option name
2074   value   place to store a value for it
2075 Returns   success or failure in parsing
2076 */
2077
2078 struct exim_openssl_option {
2079   uschar *name;
2080   long    value;
2081 };
2082 /* We could use a macro to expand, but we need the ifdef and not all the
2083 options document which version they were introduced in.  Policylet: include
2084 all options unless explicitly for DTLS, let the administrator choose which
2085 to apply.
2086
2087 This list is current as of:
2088   ==>  1.0.1b  <==
2089 Plus SSL_OP_SAFARI_ECDHE_ECDSA_BUG from 2013-June patch/discussion on openssl-dev
2090 */
2091 static struct exim_openssl_option exim_openssl_options[] = {
2092 /* KEEP SORTED ALPHABETICALLY! */
2093 #ifdef SSL_OP_ALL
2094   { US"all", SSL_OP_ALL },
2095 #endif
2096 #ifdef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
2097   { US"allow_unsafe_legacy_renegotiation", SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION },
2098 #endif
2099 #ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
2100   { US"cipher_server_preference", SSL_OP_CIPHER_SERVER_PREFERENCE },
2101 #endif
2102 #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
2103   { US"dont_insert_empty_fragments", SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS },
2104 #endif
2105 #ifdef SSL_OP_EPHEMERAL_RSA
2106   { US"ephemeral_rsa", SSL_OP_EPHEMERAL_RSA },
2107 #endif
2108 #ifdef SSL_OP_LEGACY_SERVER_CONNECT
2109   { US"legacy_server_connect", SSL_OP_LEGACY_SERVER_CONNECT },
2110 #endif
2111 #ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
2112   { US"microsoft_big_sslv3_buffer", SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER },
2113 #endif
2114 #ifdef SSL_OP_MICROSOFT_SESS_ID_BUG
2115   { US"microsoft_sess_id_bug", SSL_OP_MICROSOFT_SESS_ID_BUG },
2116 #endif
2117 #ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING
2118   { US"msie_sslv2_rsa_padding", SSL_OP_MSIE_SSLV2_RSA_PADDING },
2119 #endif
2120 #ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG
2121   { US"netscape_challenge_bug", SSL_OP_NETSCAPE_CHALLENGE_BUG },
2122 #endif
2123 #ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
2124   { US"netscape_reuse_cipher_change_bug", SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG },
2125 #endif
2126 #ifdef SSL_OP_NO_COMPRESSION
2127   { US"no_compression", SSL_OP_NO_COMPRESSION },
2128 #endif
2129 #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
2130   { US"no_session_resumption_on_renegotiation", SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION },
2131 #endif
2132 #ifdef SSL_OP_NO_SSLv2
2133   { US"no_sslv2", SSL_OP_NO_SSLv2 },
2134 #endif
2135 #ifdef SSL_OP_NO_SSLv3
2136   { US"no_sslv3", SSL_OP_NO_SSLv3 },
2137 #endif
2138 #ifdef SSL_OP_NO_TICKET
2139   { US"no_ticket", SSL_OP_NO_TICKET },
2140 #endif
2141 #ifdef SSL_OP_NO_TLSv1
2142   { US"no_tlsv1", SSL_OP_NO_TLSv1 },
2143 #endif
2144 #ifdef SSL_OP_NO_TLSv1_1
2145 #if SSL_OP_NO_TLSv1_1 == 0x00000400L
2146   /* Error in chosen value in 1.0.1a; see first item in CHANGES for 1.0.1b */
2147 #warning OpenSSL 1.0.1a uses a bad value for SSL_OP_NO_TLSv1_1, ignoring
2148 #else
2149   { US"no_tlsv1_1", SSL_OP_NO_TLSv1_1 },
2150 #endif
2151 #endif
2152 #ifdef SSL_OP_NO_TLSv1_2
2153   { US"no_tlsv1_2", SSL_OP_NO_TLSv1_2 },
2154 #endif
2155 #ifdef SSL_OP_SAFARI_ECDHE_ECDSA_BUG
2156   { US"safari_ecdhe_ecdsa_bug", SSL_OP_SAFARI_ECDHE_ECDSA_BUG },
2157 #endif
2158 #ifdef SSL_OP_SINGLE_DH_USE
2159   { US"single_dh_use", SSL_OP_SINGLE_DH_USE },
2160 #endif
2161 #ifdef SSL_OP_SINGLE_ECDH_USE
2162   { US"single_ecdh_use", SSL_OP_SINGLE_ECDH_USE },
2163 #endif
2164 #ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG
2165   { US"ssleay_080_client_dh_bug", SSL_OP_SSLEAY_080_CLIENT_DH_BUG },
2166 #endif
2167 #ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
2168   { US"sslref2_reuse_cert_type_bug", SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG },
2169 #endif
2170 #ifdef SSL_OP_TLS_BLOCK_PADDING_BUG
2171   { US"tls_block_padding_bug", SSL_OP_TLS_BLOCK_PADDING_BUG },
2172 #endif
2173 #ifdef SSL_OP_TLS_D5_BUG
2174   { US"tls_d5_bug", SSL_OP_TLS_D5_BUG },
2175 #endif
2176 #ifdef SSL_OP_TLS_ROLLBACK_BUG
2177   { US"tls_rollback_bug", SSL_OP_TLS_ROLLBACK_BUG },
2178 #endif
2179 };
2180 static int exim_openssl_options_size =
2181   sizeof(exim_openssl_options)/sizeof(struct exim_openssl_option);
2182
2183
2184 static BOOL
2185 tls_openssl_one_option_parse(uschar *name, long *value)
2186 {
2187 int first = 0;
2188 int last = exim_openssl_options_size;
2189 while (last > first)
2190   {
2191   int middle = (first + last)/2;
2192   int c = Ustrcmp(name, exim_openssl_options[middle].name);
2193   if (c == 0)
2194     {
2195     *value = exim_openssl_options[middle].value;
2196     return TRUE;
2197     }
2198   else if (c > 0)
2199     first = middle + 1;
2200   else
2201     last = middle;
2202   }
2203 return FALSE;
2204 }
2205
2206
2207
2208
2209 /*************************************************
2210 *        OpenSSL option parsing logic            *
2211 *************************************************/
2212
2213 /* OpenSSL has a number of compatibility options which an administrator might
2214 reasonably wish to set.  Interpret a list similarly to decode_bits(), so that
2215 we look like log_selector.
2216
2217 Arguments:
2218   option_spec  the administrator-supplied string of options
2219   results      ptr to long storage for the options bitmap
2220 Returns        success or failure
2221 */
2222
2223 BOOL
2224 tls_openssl_options_parse(uschar *option_spec, long *results)
2225 {
2226 long result, item;
2227 uschar *s, *end;
2228 uschar keep_c;
2229 BOOL adding, item_parsed;
2230
2231 result = 0L;
2232 /* Prior to 4.80 we or'd in SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; removed
2233  * from default because it increases BEAST susceptibility. */
2234 #ifdef SSL_OP_NO_SSLv2
2235 result |= SSL_OP_NO_SSLv2;
2236 #endif
2237
2238 if (option_spec == NULL)
2239   {
2240   *results = result;
2241   return TRUE;
2242   }
2243
2244 for (s=option_spec; *s != '\0'; /**/)
2245   {
2246   while (isspace(*s)) ++s;
2247   if (*s == '\0')
2248     break;
2249   if (*s != '+' && *s != '-')
2250     {
2251     DEBUG(D_tls) debug_printf("malformed openssl option setting: "
2252         "+ or - expected but found \"%s\"\n", s);
2253     return FALSE;
2254     }
2255   adding = *s++ == '+';
2256   for (end = s; (*end != '\0') && !isspace(*end); ++end) /**/ ;
2257   keep_c = *end;
2258   *end = '\0';
2259   item_parsed = tls_openssl_one_option_parse(s, &item);
2260   if (!item_parsed)
2261     {
2262     DEBUG(D_tls) debug_printf("openssl option setting unrecognised: \"%s\"\n", s);
2263     return FALSE;
2264     }
2265   DEBUG(D_tls) debug_printf("openssl option, %s from %lx: %lx (%s)\n",
2266       adding ? "adding" : "removing", result, item, s);
2267   if (adding)
2268     result |= item;
2269   else
2270     result &= ~item;
2271   *end = keep_c;
2272   s = end;
2273   }
2274
2275 *results = result;
2276 return TRUE;
2277 }
2278
2279 /* vi: aw ai sw=2
2280 */
2281 /* End of tls-openssl.c */