1 /* $OpenBSD: tls.c,v 1.71 2017/09/20 17:05:17 jsing Exp $ */
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 #include <sys/socket.h>
25 #include <openssl/bio.h>
26 #include <openssl/err.h>
27 #include <openssl/evp.h>
28 #include <openssl/pem.h>
29 #include <openssl/safestack.h>
30 #include <openssl/ssl.h>
31 #include <openssl/x509.h>
34 #include "tls_internal.h"
36 static struct tls_config
*tls_config_default
;
41 static int tls_initialised
= 0;
46 SSL_load_error_strings();
49 if (BIO_sock_init() != 1)
52 if ((tls_config_default
= tls_config_new()) == NULL
)
55 tls_config_default
->refcount
++;
63 tls_error(struct tls
*ctx
)
65 return ctx
->error
.msg
;
69 tls_error_clear(struct tls_error
*error
)
78 tls_error_vset(struct tls_error
*error
, int errnum
, const char *fmt
, va_list ap
)
83 tls_error_clear(error
);
88 if (vasprintf(&errmsg
, fmt
, ap
) == -1) {
98 if (asprintf(&error
->msg
, "%s: %s", errmsg
, strerror(errnum
)) == -1) {
111 tls_error_set(struct tls_error
*error
, const char *fmt
, ...)
119 rv
= tls_error_vset(error
, errnum
, fmt
, ap
);
126 tls_error_setx(struct tls_error
*error
, const char *fmt
, ...)
132 rv
= tls_error_vset(error
, -1, fmt
, ap
);
139 tls_config_set_error(struct tls_config
*config
, const char *fmt
, ...)
147 rv
= tls_error_vset(&config
->error
, errnum
, fmt
, ap
);
154 tls_config_set_errorx(struct tls_config
*config
, const char *fmt
, ...)
160 rv
= tls_error_vset(&config
->error
, -1, fmt
, ap
);
167 tls_set_error(struct tls
*ctx
, const char *fmt
, ...)
175 rv
= tls_error_vset(&ctx
->error
, errnum
, fmt
, ap
);
182 tls_set_errorx(struct tls
*ctx
, const char *fmt
, ...)
188 rv
= tls_error_vset(&ctx
->error
, -1, fmt
, ap
);
195 tls_set_ssl_errorx(struct tls
*ctx
, const char *fmt
, ...)
200 /* Only set an error if a more specific one does not already exist. */
201 if (ctx
->error
.tls
!= 0)
205 rv
= tls_error_vset(&ctx
->error
, -1, fmt
, ap
);
212 tls_sni_ctx_new(void)
214 return (calloc(1, sizeof(struct tls_sni_ctx
)));
218 tls_sni_ctx_free(struct tls_sni_ctx
*sni_ctx
)
223 SSL_CTX_free(sni_ctx
->ssl_ctx
);
224 X509_free(sni_ctx
->ssl_cert
);
234 if ((ctx
= calloc(1, sizeof(*ctx
))) == NULL
)
239 if (tls_configure(ctx
, tls_config_default
) == -1) {
248 tls_configure(struct tls
*ctx
, struct tls_config
*config
)
251 config
= tls_config_default
;
255 tls_config_free(ctx
->config
);
257 ctx
->config
= config
;
258 ctx
->keypair
= config
->keypair
;
260 if ((ctx
->flags
& TLS_SERVER
) != 0)
261 return (tls_configure_server(ctx
));
267 tls_cert_hash(X509
*cert
, char **hash
)
269 char d
[EVP_MAX_MD_SIZE
], *dhex
= NULL
;
273 if (X509_digest(cert
, EVP_sha256(), d
, &dlen
) != 1)
276 if (tls_hex_string(d
, dlen
, &dhex
, NULL
) != 0)
279 if (asprintf(hash
, "SHA256:%s", dhex
) == -1) {
292 tls_keypair_pubkey_hash(struct tls_keypair
*keypair
, char **hash
)
296 char d
[EVP_MAX_MD_SIZE
], *dhex
= NULL
;
301 if ((membio
= BIO_new_mem_buf(keypair
->cert_mem
,
302 keypair
->cert_len
)) == NULL
)
304 if ((cert
= PEM_read_bio_X509_AUX(membio
, NULL
, tls_password_cb
,
308 if (X509_pubkey_digest(cert
, EVP_sha256(), d
, &dlen
) != 1)
311 if (tls_hex_string(d
, dlen
, &dhex
, NULL
) != 0)
314 if (asprintf(hash
, "SHA256:%s", dhex
) == -1) {
331 tls_configure_ssl_keypair(struct tls
*ctx
, SSL_CTX
*ssl_ctx
,
332 struct tls_keypair
*keypair
, int required
)
334 EVP_PKEY
*pkey
= NULL
;
338 keypair
->cert_mem
== NULL
&&
339 keypair
->key_mem
== NULL
)
342 if (keypair
->cert_mem
!= NULL
) {
343 if (keypair
->cert_len
> INT_MAX
) {
344 tls_set_errorx(ctx
, "certificate too long");
348 if (SSL_CTX_use_certificate_chain_mem(ssl_ctx
,
349 keypair
->cert_mem
, keypair
->cert_len
) != 1) {
350 tls_set_errorx(ctx
, "failed to load certificate");
353 if (tls_keypair_pubkey_hash(keypair
, &keypair
->pubkey_hash
) == -1)
357 if (keypair
->key_mem
!= NULL
) {
358 if (keypair
->key_len
> INT_MAX
) {
359 tls_set_errorx(ctx
, "key too long");
363 if ((bio
= BIO_new_mem_buf(keypair
->key_mem
,
364 keypair
->key_len
)) == NULL
) {
365 tls_set_errorx(ctx
, "failed to create buffer");
368 if ((pkey
= PEM_read_bio_PrivateKey(bio
, NULL
, tls_password_cb
,
370 tls_set_errorx(ctx
, "failed to read private key");
374 if (keypair
->pubkey_hash
!= NULL
) {
376 /* XXX only RSA for now for relayd privsep */
377 if ((rsa
= EVP_PKEY_get1_RSA(pkey
)) != NULL
) {
378 RSA_set_ex_data(rsa
, 0, keypair
->pubkey_hash
);
383 if (SSL_CTX_use_PrivateKey(ssl_ctx
, pkey
) != 1) {
384 tls_set_errorx(ctx
, "failed to load private key");
393 if (!ctx
->config
->skip_private_key_check
&&
394 SSL_CTX_check_private_key(ssl_ctx
) != 1) {
395 tls_set_errorx(ctx
, "private/public key mismatch");
409 tls_configure_ssl(struct tls
*ctx
, SSL_CTX
*ssl_ctx
)
411 SSL_CTX_set_mode(ssl_ctx
, SSL_MODE_ENABLE_PARTIAL_WRITE
);
412 SSL_CTX_set_mode(ssl_ctx
, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER
);
414 SSL_CTX_set_options(ssl_ctx
, SSL_OP_NO_SSLv2
);
415 SSL_CTX_set_options(ssl_ctx
, SSL_OP_NO_SSLv3
);
417 SSL_CTX_clear_options(ssl_ctx
, SSL_OP_NO_TLSv1
);
418 SSL_CTX_clear_options(ssl_ctx
, SSL_OP_NO_TLSv1_1
);
419 SSL_CTX_clear_options(ssl_ctx
, SSL_OP_NO_TLSv1_2
);
421 if ((ctx
->config
->protocols
& TLS_PROTOCOL_TLSv1_0
) == 0)
422 SSL_CTX_set_options(ssl_ctx
, SSL_OP_NO_TLSv1
);
423 if ((ctx
->config
->protocols
& TLS_PROTOCOL_TLSv1_1
) == 0)
424 SSL_CTX_set_options(ssl_ctx
, SSL_OP_NO_TLSv1_1
);
425 if ((ctx
->config
->protocols
& TLS_PROTOCOL_TLSv1_2
) == 0)
426 SSL_CTX_set_options(ssl_ctx
, SSL_OP_NO_TLSv1_2
);
428 if (ctx
->config
->alpn
!= NULL
) {
429 if (SSL_CTX_set_alpn_protos(ssl_ctx
, ctx
->config
->alpn
,
430 ctx
->config
->alpn_len
) != 0) {
431 tls_set_errorx(ctx
, "failed to set alpn");
436 if (ctx
->config
->ciphers
!= NULL
) {
437 if (SSL_CTX_set_cipher_list(ssl_ctx
,
438 ctx
->config
->ciphers
) != 1) {
439 tls_set_errorx(ctx
, "failed to set ciphers");
444 if (ctx
->config
->verify_time
== 0) {
445 X509_VERIFY_PARAM_set_flags(ssl_ctx
->param
,
446 X509_V_FLAG_NO_CHECK_TIME
);
449 /* Disable any form of session caching by default */
450 SSL_CTX_set_session_cache_mode(ssl_ctx
, SSL_SESS_CACHE_OFF
);
451 SSL_CTX_set_options(ssl_ctx
, SSL_OP_NO_TICKET
);
460 tls_ssl_cert_verify_cb(X509_STORE_CTX
*x509_ctx
, void *arg
)
462 struct tls
*ctx
= arg
;
465 if (ctx
->config
->verify_cert
== 0)
468 if ((X509_verify_cert(x509_ctx
)) < 0) {
469 tls_set_errorx(ctx
, "X509 verify cert failed");
473 x509_err
= X509_STORE_CTX_get_error(x509_ctx
);
474 if (x509_err
== X509_V_OK
)
477 tls_set_errorx(ctx
, "certificate verification failed: %s",
478 X509_verify_cert_error_string(x509_err
));
484 tls_configure_ssl_verify(struct tls
*ctx
, SSL_CTX
*ssl_ctx
, int verify
)
486 size_t ca_len
= ctx
->config
->ca_len
;
487 char *ca_mem
= ctx
->config
->ca_mem
;
488 char *crl_mem
= ctx
->config
->crl_mem
;
489 size_t crl_len
= ctx
->config
->crl_len
;
490 char *ca_free
= NULL
;
491 STACK_OF(X509_INFO
) *xis
= NULL
;
498 SSL_CTX_set_verify(ssl_ctx
, verify
, NULL
);
499 SSL_CTX_set_cert_verify_callback(ssl_ctx
, tls_ssl_cert_verify_cb
, ctx
);
501 if (ctx
->config
->verify_depth
>= 0)
502 SSL_CTX_set_verify_depth(ssl_ctx
, ctx
->config
->verify_depth
);
504 if (ctx
->config
->verify_cert
== 0)
507 /* If no CA has been specified, attempt to load the default. */
508 if (ctx
->config
->ca_mem
== NULL
&& ctx
->config
->ca_path
== NULL
) {
509 if (tls_config_load_file(&ctx
->error
, "CA", _PATH_SSL_CA_FILE
,
510 &ca_mem
, &ca_len
) != 0)
515 if (ca_mem
!= NULL
) {
516 if (ca_len
> INT_MAX
) {
517 tls_set_errorx(ctx
, "ca too long");
520 if (SSL_CTX_load_verify_mem(ssl_ctx
, ca_mem
, ca_len
) != 1) {
521 tls_set_errorx(ctx
, "ssl verify memory setup failure");
524 } else if (SSL_CTX_load_verify_locations(ssl_ctx
, NULL
,
525 ctx
->config
->ca_path
) != 1) {
526 tls_set_errorx(ctx
, "ssl verify locations failure");
530 if (crl_mem
!= NULL
) {
531 if (crl_len
> INT_MAX
) {
532 tls_set_errorx(ctx
, "crl too long");
535 if ((bio
= BIO_new_mem_buf(crl_mem
, crl_len
)) == NULL
) {
536 tls_set_errorx(ctx
, "failed to create buffer");
539 if ((xis
= PEM_X509_INFO_read_bio(bio
, NULL
, tls_password_cb
,
541 tls_set_errorx(ctx
, "failed to parse crl");
544 store
= SSL_CTX_get_cert_store(ssl_ctx
);
545 for (i
= 0; i
< sk_X509_INFO_num(xis
); i
++) {
546 xi
= sk_X509_INFO_value(xis
, i
);
549 if (!X509_STORE_add_crl(store
, xi
->crl
)) {
550 tls_set_error(ctx
, "failed to add crl");
555 X509_VERIFY_PARAM_set_flags(store
->param
,
556 X509_V_FLAG_CRL_CHECK
| X509_V_FLAG_CRL_CHECK_ALL
);
563 sk_X509_INFO_pop_free(xis
, X509_INFO_free
);
571 tls_free(struct tls
*ctx
)
582 tls_reset(struct tls
*ctx
)
584 struct tls_sni_ctx
*sni
, *nsni
;
586 tls_config_free(ctx
->config
);
589 SSL_CTX_free(ctx
->ssl_ctx
);
590 SSL_free(ctx
->ssl_conn
);
591 X509_free(ctx
->ssl_peer_cert
);
593 ctx
->ssl_conn
= NULL
;
595 ctx
->ssl_peer_cert
= NULL
;
596 /* X509 objects in chain are freed with the SSL */
597 ctx
->ssl_peer_chain
= NULL
;
602 free(ctx
->servername
);
603 ctx
->servername
= NULL
;
605 free(ctx
->error
.msg
);
606 ctx
->error
.msg
= NULL
;
609 tls_conninfo_free(ctx
->conninfo
);
610 ctx
->conninfo
= NULL
;
612 tls_ocsp_free(ctx
->ocsp
);
615 for (sni
= ctx
->sni_ctx
; sni
!= NULL
; sni
= nsni
) {
617 tls_sni_ctx_free(sni
);
622 ctx
->write_cb
= NULL
;
627 tls_ssl_error(struct tls
*ctx
, SSL
*ssl_conn
, int ssl_ret
, const char *prefix
)
629 const char *errstr
= "unknown error";
633 ssl_err
= SSL_get_error(ssl_conn
, ssl_ret
);
636 case SSL_ERROR_ZERO_RETURN
:
639 case SSL_ERROR_WANT_READ
:
640 return (TLS_WANT_POLLIN
);
642 case SSL_ERROR_WANT_WRITE
:
643 return (TLS_WANT_POLLOUT
);
645 case SSL_ERROR_SYSCALL
:
646 if ((err
= ERR_peek_error()) != 0) {
647 errstr
= ERR_error_string(err
, NULL
);
648 } else if (ssl_ret
== 0) {
649 if ((ctx
->state
& TLS_HANDSHAKE_COMPLETE
) != 0) {
650 ctx
->state
|= TLS_EOF_NO_CLOSE_NOTIFY
;
653 errstr
= "unexpected EOF";
654 } else if (ssl_ret
== -1) {
655 errstr
= strerror(errno
);
657 tls_set_ssl_errorx(ctx
, "%s failed: %s", prefix
, errstr
);
661 if ((err
= ERR_peek_error()) != 0) {
662 errstr
= ERR_error_string(err
, NULL
);
664 tls_set_ssl_errorx(ctx
, "%s failed: %s", prefix
, errstr
);
667 case SSL_ERROR_WANT_CONNECT
:
668 case SSL_ERROR_WANT_ACCEPT
:
669 case SSL_ERROR_WANT_X509_LOOKUP
:
671 tls_set_ssl_errorx(ctx
, "%s failed (%i)", prefix
, ssl_err
);
677 tls_handshake(struct tls
*ctx
)
681 tls_error_clear(&ctx
->error
);
683 if ((ctx
->flags
& (TLS_CLIENT
| TLS_SERVER_CONN
)) == 0) {
684 tls_set_errorx(ctx
, "invalid operation for context");
688 if ((ctx
->state
& TLS_HANDSHAKE_COMPLETE
) != 0) {
689 tls_set_errorx(ctx
, "handshake already completed");
693 if ((ctx
->flags
& TLS_CLIENT
) != 0)
694 rv
= tls_handshake_client(ctx
);
695 else if ((ctx
->flags
& TLS_SERVER_CONN
) != 0)
696 rv
= tls_handshake_server(ctx
);
699 ctx
->ssl_peer_cert
= SSL_get_peer_certificate(ctx
->ssl_conn
);
700 ctx
->ssl_peer_chain
= SSL_get_peer_cert_chain(ctx
->ssl_conn
);
701 if (tls_conninfo_populate(ctx
) == -1)
703 if (ctx
->ocsp
== NULL
)
704 ctx
->ocsp
= tls_ocsp_setup_from_peer(ctx
);
707 /* Prevent callers from performing incorrect error handling */
713 tls_read(struct tls
*ctx
, void *buf
, size_t buflen
)
718 tls_error_clear(&ctx
->error
);
720 if ((ctx
->state
& TLS_HANDSHAKE_COMPLETE
) == 0) {
721 if ((rv
= tls_handshake(ctx
)) != 0)
725 if (buflen
> INT_MAX
) {
726 tls_set_errorx(ctx
, "buflen too long");
731 if ((ssl_ret
= SSL_read(ctx
->ssl_conn
, buf
, buflen
)) > 0) {
732 rv
= (ssize_t
)ssl_ret
;
735 rv
= (ssize_t
)tls_ssl_error(ctx
, ctx
->ssl_conn
, ssl_ret
, "read");
738 /* Prevent callers from performing incorrect error handling */
744 tls_write(struct tls
*ctx
, const void *buf
, size_t buflen
)
749 tls_error_clear(&ctx
->error
);
751 if ((ctx
->state
& TLS_HANDSHAKE_COMPLETE
) == 0) {
752 if ((rv
= tls_handshake(ctx
)) != 0)
756 if (buflen
> INT_MAX
) {
757 tls_set_errorx(ctx
, "buflen too long");
762 if ((ssl_ret
= SSL_write(ctx
->ssl_conn
, buf
, buflen
)) > 0) {
763 rv
= (ssize_t
)ssl_ret
;
766 rv
= (ssize_t
)tls_ssl_error(ctx
, ctx
->ssl_conn
, ssl_ret
, "write");
769 /* Prevent callers from performing incorrect error handling */
775 tls_close(struct tls
*ctx
)
780 tls_error_clear(&ctx
->error
);
782 if ((ctx
->flags
& (TLS_CLIENT
| TLS_SERVER_CONN
)) == 0) {
783 tls_set_errorx(ctx
, "invalid operation for context");
788 if (ctx
->state
& TLS_SSL_NEEDS_SHUTDOWN
) {
790 ssl_ret
= SSL_shutdown(ctx
->ssl_conn
);
792 rv
= tls_ssl_error(ctx
, ctx
->ssl_conn
, ssl_ret
,
794 if (rv
== TLS_WANT_POLLIN
|| rv
== TLS_WANT_POLLOUT
)
797 ctx
->state
&= ~TLS_SSL_NEEDS_SHUTDOWN
;
800 if (ctx
->socket
!= -1) {
801 if (shutdown(ctx
->socket
, SHUT_RDWR
) != 0) {
803 errno
!= ENOTCONN
&& errno
!= ECONNRESET
) {
804 tls_set_error(ctx
, "shutdown");
808 if (close(ctx
->socket
) != 0) {
810 tls_set_error(ctx
, "close");
817 if ((ctx
->state
& TLS_EOF_NO_CLOSE_NOTIFY
) != 0) {
818 tls_set_errorx(ctx
, "EOF without close notify");
823 /* Prevent callers from performing incorrect error handling */