summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libtls/tls.c5
-rw-r--r--lib/libtls/tls_internal.h6
-rw-r--r--lib/libtls/tls_ocsp.c22
-rw-r--r--lib/libtls/tls_server.c6
4 files changed, 25 insertions, 14 deletions
diff --git a/lib/libtls/tls.c b/lib/libtls/tls.c
index d4e8d0114f2..f07c4c6deb0 100644
--- a/lib/libtls/tls.c
+++ b/lib/libtls/tls.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tls.c,v 1.70 2017/08/28 13:58:02 beck Exp $ */
+/* $OpenBSD: tls.c,v 1.71 2017/09/20 17:05:17 jsing Exp $ */
/*
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
*
@@ -235,6 +235,7 @@ tls_new(void)
return (NULL);
tls_reset(ctx);
+
if (tls_configure(ctx, tls_config_default) == -1) {
free(ctx);
return NULL;
@@ -252,7 +253,9 @@ tls_configure(struct tls *ctx, struct tls_config *config)
config->refcount++;
tls_config_free(ctx->config);
+
ctx->config = config;
+ ctx->keypair = config->keypair;
if ((ctx->flags & TLS_SERVER) != 0)
return (tls_configure_server(ctx));
diff --git a/lib/libtls/tls_internal.h b/lib/libtls/tls_internal.h
index 9e9443dbafd..f378ea5466b 100644
--- a/lib/libtls/tls_internal.h
+++ b/lib/libtls/tls_internal.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tls_internal.h,v 1.64 2017/08/10 18:18:30 jsing Exp $ */
+/* $OpenBSD: tls_internal.h,v 1.65 2017/09/20 17:05:17 jsing Exp $ */
/*
* Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org>
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
@@ -157,12 +157,16 @@ struct tls_ocsp {
struct tls_sni_ctx {
struct tls_sni_ctx *next;
+ struct tls_keypair *keypair;
+
SSL_CTX *ssl_ctx;
X509 *ssl_cert;
};
struct tls {
struct tls_config *config;
+ struct tls_keypair *keypair;
+
struct tls_error error;
uint32_t flags;
diff --git a/lib/libtls/tls_ocsp.c b/lib/libtls/tls_ocsp.c
index 4e2dba34870..a8835edc8ff 100644
--- a/lib/libtls/tls_ocsp.c
+++ b/lib/libtls/tls_ocsp.c
@@ -331,32 +331,32 @@ tls_ocsp_verify_cb(SSL *ssl, void *arg)
int
tls_ocsp_stapling_cb(SSL *ssl, void *arg)
{
- struct tls *ctx;
- unsigned char *ocsp_staple = NULL;
int ret = SSL_TLSEXT_ERR_ALERT_FATAL;
+ unsigned char *ocsp_staple = NULL;
+ struct tls *ctx;
if ((ctx = SSL_get_app_data(ssl)) == NULL)
goto err;
- if (ctx->config->keypair == NULL ||
- ctx->config->keypair->ocsp_staple == NULL ||
- ctx->config->keypair->ocsp_staple_len == 0)
+ if (ctx->keypair == NULL || ctx->keypair->ocsp_staple == NULL ||
+ ctx->keypair->ocsp_staple_len == 0)
return SSL_TLSEXT_ERR_NOACK;
- if ((ocsp_staple = malloc(ctx->config->keypair->ocsp_staple_len)) ==
- NULL)
+ if ((ocsp_staple = malloc(ctx->keypair->ocsp_staple_len)) == NULL)
goto err;
- memcpy(ocsp_staple, ctx->config->keypair->ocsp_staple,
- ctx->config->keypair->ocsp_staple_len);
+ memcpy(ocsp_staple, ctx->keypair->ocsp_staple,
+ ctx->keypair->ocsp_staple_len);
+
if (SSL_set_tlsext_status_ocsp_resp(ctx->ssl_conn, ocsp_staple,
- ctx->config->keypair->ocsp_staple_len) != 1)
+ ctx->keypair->ocsp_staple_len) != 1)
goto err;
ret = SSL_TLSEXT_ERR_OK;
err:
if (ret != SSL_TLSEXT_ERR_OK)
free(ocsp_staple);
+
return ret;
}
@@ -364,7 +364,7 @@ tls_ocsp_stapling_cb(SSL *ssl, void *arg)
* Public API
*/
-/* Retrieve OCSP URL from peer certificate, if present */
+/* Retrieve OCSP URL from peer certificate, if present. */
const char *
tls_peer_ocsp_url(struct tls *ctx)
{
diff --git a/lib/libtls/tls_server.c b/lib/libtls/tls_server.c
index 2622e4464f4..e1011769f63 100644
--- a/lib/libtls/tls_server.c
+++ b/lib/libtls/tls_server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tls_server.c,v 1.41 2017/08/10 18:18:30 jsing Exp $ */
+/* $OpenBSD: tls_server.c,v 1.42 2017/09/20 17:05:17 jsing Exp $ */
/*
* Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
*
@@ -50,7 +50,9 @@ tls_server_conn(struct tls *ctx)
conn_ctx->flags |= TLS_SERVER_CONN;
ctx->config->refcount++;
+
conn_ctx->config = ctx->config;
+ conn_ctx->keypair = ctx->config->keypair;
return (conn_ctx);
}
@@ -112,6 +114,7 @@ tls_servername_cb(SSL *ssl, int *al, void *arg)
&match) == -1)
goto err;
if (match) {
+ conn_ctx->keypair = sni_ctx->keypair;
SSL_set_SSL_CTX(conn_ctx->ssl_conn, sni_ctx->ssl_ctx);
return (SSL_TLSEXT_ERR_OK);
}
@@ -341,6 +344,7 @@ tls_configure_server_sni(struct tls *ctx)
tls_set_errorx(ctx, "out of memory");
goto err;
}
+ (*sni_ctx)->keypair = kp;
if (tls_configure_server_ssl(ctx, &(*sni_ctx)->ssl_ctx, kp) == -1)
goto err;
if (tls_keypair_load_cert(kp, &ctx->error,