dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / lib / libtls / tls.c
blobf07c4c6deb0a0ec181d42512bae6d363c23c7a9f
1 /* $OpenBSD: tls.c,v 1.71 2017/09/20 17:05:17 jsing Exp $ */
2 /*
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>
20 #include <errno.h>
21 #include <limits.h>
22 #include <stdlib.h>
23 #include <unistd.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>
33 #include <tls.h>
34 #include "tls_internal.h"
36 static struct tls_config *tls_config_default;
38 int
39 tls_init(void)
41 static int tls_initialised = 0;
43 if (tls_initialised)
44 return (0);
46 SSL_load_error_strings();
47 SSL_library_init();
49 if (BIO_sock_init() != 1)
50 return (-1);
52 if ((tls_config_default = tls_config_new()) == NULL)
53 return (-1);
55 tls_config_default->refcount++;
57 tls_initialised = 1;
59 return (0);
62 const char *
63 tls_error(struct tls *ctx)
65 return ctx->error.msg;
68 void
69 tls_error_clear(struct tls_error *error)
71 free(error->msg);
72 error->msg = NULL;
73 error->num = 0;
74 error->tls = 0;
77 static int
78 tls_error_vset(struct tls_error *error, int errnum, const char *fmt, va_list ap)
80 char *errmsg = NULL;
81 int rv = -1;
83 tls_error_clear(error);
85 error->num = errnum;
86 error->tls = 1;
88 if (vasprintf(&errmsg, fmt, ap) == -1) {
89 errmsg = NULL;
90 goto err;
93 if (errnum == -1) {
94 error->msg = errmsg;
95 return (0);
98 if (asprintf(&error->msg, "%s: %s", errmsg, strerror(errnum)) == -1) {
99 error->msg = NULL;
100 goto err;
102 rv = 0;
104 err:
105 free(errmsg);
107 return (rv);
111 tls_error_set(struct tls_error *error, const char *fmt, ...)
113 va_list ap;
114 int errnum, rv;
116 errnum = errno;
118 va_start(ap, fmt);
119 rv = tls_error_vset(error, errnum, fmt, ap);
120 va_end(ap);
122 return (rv);
126 tls_error_setx(struct tls_error *error, const char *fmt, ...)
128 va_list ap;
129 int rv;
131 va_start(ap, fmt);
132 rv = tls_error_vset(error, -1, fmt, ap);
133 va_end(ap);
135 return (rv);
139 tls_config_set_error(struct tls_config *config, const char *fmt, ...)
141 va_list ap;
142 int errnum, rv;
144 errnum = errno;
146 va_start(ap, fmt);
147 rv = tls_error_vset(&config->error, errnum, fmt, ap);
148 va_end(ap);
150 return (rv);
154 tls_config_set_errorx(struct tls_config *config, const char *fmt, ...)
156 va_list ap;
157 int rv;
159 va_start(ap, fmt);
160 rv = tls_error_vset(&config->error, -1, fmt, ap);
161 va_end(ap);
163 return (rv);
167 tls_set_error(struct tls *ctx, const char *fmt, ...)
169 va_list ap;
170 int errnum, rv;
172 errnum = errno;
174 va_start(ap, fmt);
175 rv = tls_error_vset(&ctx->error, errnum, fmt, ap);
176 va_end(ap);
178 return (rv);
182 tls_set_errorx(struct tls *ctx, const char *fmt, ...)
184 va_list ap;
185 int rv;
187 va_start(ap, fmt);
188 rv = tls_error_vset(&ctx->error, -1, fmt, ap);
189 va_end(ap);
191 return (rv);
195 tls_set_ssl_errorx(struct tls *ctx, const char *fmt, ...)
197 va_list ap;
198 int rv;
200 /* Only set an error if a more specific one does not already exist. */
201 if (ctx->error.tls != 0)
202 return (0);
204 va_start(ap, fmt);
205 rv = tls_error_vset(&ctx->error, -1, fmt, ap);
206 va_end(ap);
208 return (rv);
211 struct tls_sni_ctx *
212 tls_sni_ctx_new(void)
214 return (calloc(1, sizeof(struct tls_sni_ctx)));
217 void
218 tls_sni_ctx_free(struct tls_sni_ctx *sni_ctx)
220 if (sni_ctx == NULL)
221 return;
223 SSL_CTX_free(sni_ctx->ssl_ctx);
224 X509_free(sni_ctx->ssl_cert);
226 free(sni_ctx);
229 struct tls *
230 tls_new(void)
232 struct tls *ctx;
234 if ((ctx = calloc(1, sizeof(*ctx))) == NULL)
235 return (NULL);
237 tls_reset(ctx);
239 if (tls_configure(ctx, tls_config_default) == -1) {
240 free(ctx);
241 return NULL;
244 return (ctx);
248 tls_configure(struct tls *ctx, struct tls_config *config)
250 if (config == NULL)
251 config = tls_config_default;
253 config->refcount++;
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));
263 return (0);
267 tls_cert_hash(X509 *cert, char **hash)
269 char d[EVP_MAX_MD_SIZE], *dhex = NULL;
270 int dlen, rv = -1;
272 *hash = NULL;
273 if (X509_digest(cert, EVP_sha256(), d, &dlen) != 1)
274 goto err;
276 if (tls_hex_string(d, dlen, &dhex, NULL) != 0)
277 goto err;
279 if (asprintf(hash, "SHA256:%s", dhex) == -1) {
280 *hash = NULL;
281 goto err;
284 rv = 0;
285 err:
286 free(dhex);
288 return (rv);
291 static int
292 tls_keypair_pubkey_hash(struct tls_keypair *keypair, char **hash)
294 BIO *membio = NULL;
295 X509 *cert = NULL;
296 char d[EVP_MAX_MD_SIZE], *dhex = NULL;
297 int dlen, rv = -1;
299 *hash = NULL;
301 if ((membio = BIO_new_mem_buf(keypair->cert_mem,
302 keypair->cert_len)) == NULL)
303 goto err;
304 if ((cert = PEM_read_bio_X509_AUX(membio, NULL, tls_password_cb,
305 NULL)) == NULL)
306 goto err;
308 if (X509_pubkey_digest(cert, EVP_sha256(), d, &dlen) != 1)
309 goto err;
311 if (tls_hex_string(d, dlen, &dhex, NULL) != 0)
312 goto err;
314 if (asprintf(hash, "SHA256:%s", dhex) == -1) {
315 *hash = NULL;
316 goto err;
319 rv = 0;
321 err:
322 free(dhex);
323 X509_free(cert);
324 BIO_free(membio);
326 return (rv);
331 tls_configure_ssl_keypair(struct tls *ctx, SSL_CTX *ssl_ctx,
332 struct tls_keypair *keypair, int required)
334 EVP_PKEY *pkey = NULL;
335 BIO *bio = NULL;
337 if (!required &&
338 keypair->cert_mem == NULL &&
339 keypair->key_mem == NULL)
340 return(0);
342 if (keypair->cert_mem != NULL) {
343 if (keypair->cert_len > INT_MAX) {
344 tls_set_errorx(ctx, "certificate too long");
345 goto err;
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");
351 goto err;
353 if (tls_keypair_pubkey_hash(keypair, &keypair->pubkey_hash) == -1)
354 goto err;
357 if (keypair->key_mem != NULL) {
358 if (keypair->key_len > INT_MAX) {
359 tls_set_errorx(ctx, "key too long");
360 goto err;
363 if ((bio = BIO_new_mem_buf(keypair->key_mem,
364 keypair->key_len)) == NULL) {
365 tls_set_errorx(ctx, "failed to create buffer");
366 goto err;
368 if ((pkey = PEM_read_bio_PrivateKey(bio, NULL, tls_password_cb,
369 NULL)) == NULL) {
370 tls_set_errorx(ctx, "failed to read private key");
371 goto err;
374 if (keypair->pubkey_hash != NULL) {
375 RSA *rsa;
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);
379 RSA_free(rsa);
383 if (SSL_CTX_use_PrivateKey(ssl_ctx, pkey) != 1) {
384 tls_set_errorx(ctx, "failed to load private key");
385 goto err;
387 BIO_free(bio);
388 bio = NULL;
389 EVP_PKEY_free(pkey);
390 pkey = NULL;
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");
396 goto err;
399 return (0);
401 err:
402 EVP_PKEY_free(pkey);
403 BIO_free(bio);
405 return (1);
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");
432 goto err;
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");
440 goto err;
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);
453 return (0);
455 err:
456 return (-1);
459 static int
460 tls_ssl_cert_verify_cb(X509_STORE_CTX *x509_ctx, void *arg)
462 struct tls *ctx = arg;
463 int x509_err;
465 if (ctx->config->verify_cert == 0)
466 return (1);
468 if ((X509_verify_cert(x509_ctx)) < 0) {
469 tls_set_errorx(ctx, "X509 verify cert failed");
470 return (0);
473 x509_err = X509_STORE_CTX_get_error(x509_ctx);
474 if (x509_err == X509_V_OK)
475 return (1);
477 tls_set_errorx(ctx, "certificate verification failed: %s",
478 X509_verify_cert_error_string(x509_err));
480 return (0);
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;
492 X509_STORE *store;
493 X509_INFO *xi;
494 BIO *bio = NULL;
495 int rv = -1;
496 int i;
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)
505 goto done;
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)
511 goto err;
512 ca_free = ca_mem;
515 if (ca_mem != NULL) {
516 if (ca_len > INT_MAX) {
517 tls_set_errorx(ctx, "ca too long");
518 goto err;
520 if (SSL_CTX_load_verify_mem(ssl_ctx, ca_mem, ca_len) != 1) {
521 tls_set_errorx(ctx, "ssl verify memory setup failure");
522 goto err;
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");
527 goto err;
530 if (crl_mem != NULL) {
531 if (crl_len > INT_MAX) {
532 tls_set_errorx(ctx, "crl too long");
533 goto err;
535 if ((bio = BIO_new_mem_buf(crl_mem, crl_len)) == NULL) {
536 tls_set_errorx(ctx, "failed to create buffer");
537 goto err;
539 if ((xis = PEM_X509_INFO_read_bio(bio, NULL, tls_password_cb,
540 NULL)) == NULL) {
541 tls_set_errorx(ctx, "failed to parse crl");
542 goto err;
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);
547 if (xi->crl == NULL)
548 continue;
549 if (!X509_STORE_add_crl(store, xi->crl)) {
550 tls_set_error(ctx, "failed to add crl");
551 goto err;
553 xi->crl = NULL;
555 X509_VERIFY_PARAM_set_flags(store->param,
556 X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL);
559 done:
560 rv = 0;
562 err:
563 sk_X509_INFO_pop_free(xis, X509_INFO_free);
564 BIO_free(bio);
565 free(ca_free);
567 return (rv);
570 void
571 tls_free(struct tls *ctx)
573 if (ctx == NULL)
574 return;
576 tls_reset(ctx);
578 free(ctx);
581 void
582 tls_reset(struct tls *ctx)
584 struct tls_sni_ctx *sni, *nsni;
586 tls_config_free(ctx->config);
587 ctx->config = NULL;
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;
594 ctx->ssl_ctx = NULL;
595 ctx->ssl_peer_cert = NULL;
596 /* X509 objects in chain are freed with the SSL */
597 ctx->ssl_peer_chain = NULL;
599 ctx->socket = -1;
600 ctx->state = 0;
602 free(ctx->servername);
603 ctx->servername = NULL;
605 free(ctx->error.msg);
606 ctx->error.msg = NULL;
607 ctx->error.num = -1;
609 tls_conninfo_free(ctx->conninfo);
610 ctx->conninfo = NULL;
612 tls_ocsp_free(ctx->ocsp);
613 ctx->ocsp = NULL;
615 for (sni = ctx->sni_ctx; sni != NULL; sni = nsni) {
616 nsni = sni->next;
617 tls_sni_ctx_free(sni);
619 ctx->sni_ctx = NULL;
621 ctx->read_cb = NULL;
622 ctx->write_cb = NULL;
623 ctx->cb_arg = NULL;
627 tls_ssl_error(struct tls *ctx, SSL *ssl_conn, int ssl_ret, const char *prefix)
629 const char *errstr = "unknown error";
630 unsigned long err;
631 int ssl_err;
633 ssl_err = SSL_get_error(ssl_conn, ssl_ret);
634 switch (ssl_err) {
635 case SSL_ERROR_NONE:
636 case SSL_ERROR_ZERO_RETURN:
637 return (0);
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;
651 return (0);
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);
658 return (-1);
660 case SSL_ERROR_SSL:
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);
665 return (-1);
667 case SSL_ERROR_WANT_CONNECT:
668 case SSL_ERROR_WANT_ACCEPT:
669 case SSL_ERROR_WANT_X509_LOOKUP:
670 default:
671 tls_set_ssl_errorx(ctx, "%s failed (%i)", prefix, ssl_err);
672 return (-1);
677 tls_handshake(struct tls *ctx)
679 int rv = -1;
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");
685 goto out;
688 if ((ctx->state & TLS_HANDSHAKE_COMPLETE) != 0) {
689 tls_set_errorx(ctx, "handshake already completed");
690 goto out;
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);
698 if (rv == 0) {
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)
702 rv = -1;
703 if (ctx->ocsp == NULL)
704 ctx->ocsp = tls_ocsp_setup_from_peer(ctx);
706 out:
707 /* Prevent callers from performing incorrect error handling */
708 errno = 0;
709 return (rv);
712 ssize_t
713 tls_read(struct tls *ctx, void *buf, size_t buflen)
715 ssize_t rv = -1;
716 int ssl_ret;
718 tls_error_clear(&ctx->error);
720 if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) {
721 if ((rv = tls_handshake(ctx)) != 0)
722 goto out;
725 if (buflen > INT_MAX) {
726 tls_set_errorx(ctx, "buflen too long");
727 goto out;
730 ERR_clear_error();
731 if ((ssl_ret = SSL_read(ctx->ssl_conn, buf, buflen)) > 0) {
732 rv = (ssize_t)ssl_ret;
733 goto out;
735 rv = (ssize_t)tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "read");
737 out:
738 /* Prevent callers from performing incorrect error handling */
739 errno = 0;
740 return (rv);
743 ssize_t
744 tls_write(struct tls *ctx, const void *buf, size_t buflen)
746 ssize_t rv = -1;
747 int ssl_ret;
749 tls_error_clear(&ctx->error);
751 if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) {
752 if ((rv = tls_handshake(ctx)) != 0)
753 goto out;
756 if (buflen > INT_MAX) {
757 tls_set_errorx(ctx, "buflen too long");
758 goto out;
761 ERR_clear_error();
762 if ((ssl_ret = SSL_write(ctx->ssl_conn, buf, buflen)) > 0) {
763 rv = (ssize_t)ssl_ret;
764 goto out;
766 rv = (ssize_t)tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "write");
768 out:
769 /* Prevent callers from performing incorrect error handling */
770 errno = 0;
771 return (rv);
775 tls_close(struct tls *ctx)
777 int ssl_ret;
778 int rv = 0;
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");
784 rv = -1;
785 goto out;
788 if (ctx->state & TLS_SSL_NEEDS_SHUTDOWN) {
789 ERR_clear_error();
790 ssl_ret = SSL_shutdown(ctx->ssl_conn);
791 if (ssl_ret < 0) {
792 rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret,
793 "shutdown");
794 if (rv == TLS_WANT_POLLIN || rv == TLS_WANT_POLLOUT)
795 goto out;
797 ctx->state &= ~TLS_SSL_NEEDS_SHUTDOWN;
800 if (ctx->socket != -1) {
801 if (shutdown(ctx->socket, SHUT_RDWR) != 0) {
802 if (rv == 0 &&
803 errno != ENOTCONN && errno != ECONNRESET) {
804 tls_set_error(ctx, "shutdown");
805 rv = -1;
808 if (close(ctx->socket) != 0) {
809 if (rv == 0) {
810 tls_set_error(ctx, "close");
811 rv = -1;
814 ctx->socket = -1;
817 if ((ctx->state & TLS_EOF_NO_CLOSE_NOTIFY) != 0) {
818 tls_set_errorx(ctx, "EOF without close notify");
819 rv = -1;
822 out:
823 /* Prevent callers from performing incorrect error handling */
824 errno = 0;
825 return (rv);