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