diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libtls/tls.c | 5 | ||||
| -rw-r--r-- | src/lib/libtls/tls_internal.h | 6 | ||||
| -rw-r--r-- | src/lib/libtls/tls_ocsp.c | 22 | ||||
| -rw-r--r-- | src/lib/libtls/tls_server.c | 6 |
4 files changed, 25 insertions, 14 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index d4e8d0114f..f07c4c6deb 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls.c,v 1.70 2017/08/28 13:58:02 beck Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.71 2017/09/20 17:05:17 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -235,6 +235,7 @@ tls_new(void) | |||
| 235 | return (NULL); | 235 | return (NULL); |
| 236 | 236 | ||
| 237 | tls_reset(ctx); | 237 | tls_reset(ctx); |
| 238 | |||
| 238 | if (tls_configure(ctx, tls_config_default) == -1) { | 239 | if (tls_configure(ctx, tls_config_default) == -1) { |
| 239 | free(ctx); | 240 | free(ctx); |
| 240 | return NULL; | 241 | return NULL; |
| @@ -252,7 +253,9 @@ tls_configure(struct tls *ctx, struct tls_config *config) | |||
| 252 | config->refcount++; | 253 | config->refcount++; |
| 253 | 254 | ||
| 254 | tls_config_free(ctx->config); | 255 | tls_config_free(ctx->config); |
| 256 | |||
| 255 | ctx->config = config; | 257 | ctx->config = config; |
| 258 | ctx->keypair = config->keypair; | ||
| 256 | 259 | ||
| 257 | if ((ctx->flags & TLS_SERVER) != 0) | 260 | if ((ctx->flags & TLS_SERVER) != 0) |
| 258 | return (tls_configure_server(ctx)); | 261 | return (tls_configure_server(ctx)); |
diff --git a/src/lib/libtls/tls_internal.h b/src/lib/libtls/tls_internal.h index 9e9443dbaf..f378ea5466 100644 --- a/src/lib/libtls/tls_internal.h +++ b/src/lib/libtls/tls_internal.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls_internal.h,v 1.64 2017/08/10 18:18:30 jsing Exp $ */ | 1 | /* $OpenBSD: tls_internal.h,v 1.65 2017/09/20 17:05:17 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> | 3 | * Copyright (c) 2014 Jeremie Courreges-Anglas <jca@openbsd.org> |
| 4 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 4 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| @@ -157,12 +157,16 @@ struct tls_ocsp { | |||
| 157 | struct tls_sni_ctx { | 157 | struct tls_sni_ctx { |
| 158 | struct tls_sni_ctx *next; | 158 | struct tls_sni_ctx *next; |
| 159 | 159 | ||
| 160 | struct tls_keypair *keypair; | ||
| 161 | |||
| 160 | SSL_CTX *ssl_ctx; | 162 | SSL_CTX *ssl_ctx; |
| 161 | X509 *ssl_cert; | 163 | X509 *ssl_cert; |
| 162 | }; | 164 | }; |
| 163 | 165 | ||
| 164 | struct tls { | 166 | struct tls { |
| 165 | struct tls_config *config; | 167 | struct tls_config *config; |
| 168 | struct tls_keypair *keypair; | ||
| 169 | |||
| 166 | struct tls_error error; | 170 | struct tls_error error; |
| 167 | 171 | ||
| 168 | uint32_t flags; | 172 | uint32_t flags; |
diff --git a/src/lib/libtls/tls_ocsp.c b/src/lib/libtls/tls_ocsp.c index 4e2dba3487..a8835edc8f 100644 --- a/src/lib/libtls/tls_ocsp.c +++ b/src/lib/libtls/tls_ocsp.c | |||
| @@ -331,32 +331,32 @@ tls_ocsp_verify_cb(SSL *ssl, void *arg) | |||
| 331 | int | 331 | int |
| 332 | tls_ocsp_stapling_cb(SSL *ssl, void *arg) | 332 | tls_ocsp_stapling_cb(SSL *ssl, void *arg) |
| 333 | { | 333 | { |
| 334 | struct tls *ctx; | ||
| 335 | unsigned char *ocsp_staple = NULL; | ||
| 336 | int ret = SSL_TLSEXT_ERR_ALERT_FATAL; | 334 | int ret = SSL_TLSEXT_ERR_ALERT_FATAL; |
| 335 | unsigned char *ocsp_staple = NULL; | ||
| 336 | struct tls *ctx; | ||
| 337 | 337 | ||
| 338 | if ((ctx = SSL_get_app_data(ssl)) == NULL) | 338 | if ((ctx = SSL_get_app_data(ssl)) == NULL) |
| 339 | goto err; | 339 | goto err; |
| 340 | 340 | ||
| 341 | if (ctx->config->keypair == NULL || | 341 | if (ctx->keypair == NULL || ctx->keypair->ocsp_staple == NULL || |
| 342 | ctx->config->keypair->ocsp_staple == NULL || | 342 | ctx->keypair->ocsp_staple_len == 0) |
| 343 | ctx->config->keypair->ocsp_staple_len == 0) | ||
| 344 | return SSL_TLSEXT_ERR_NOACK; | 343 | return SSL_TLSEXT_ERR_NOACK; |
| 345 | 344 | ||
| 346 | if ((ocsp_staple = malloc(ctx->config->keypair->ocsp_staple_len)) == | 345 | if ((ocsp_staple = malloc(ctx->keypair->ocsp_staple_len)) == NULL) |
| 347 | NULL) | ||
| 348 | goto err; | 346 | goto err; |
| 349 | 347 | ||
| 350 | memcpy(ocsp_staple, ctx->config->keypair->ocsp_staple, | 348 | memcpy(ocsp_staple, ctx->keypair->ocsp_staple, |
| 351 | ctx->config->keypair->ocsp_staple_len); | 349 | ctx->keypair->ocsp_staple_len); |
| 350 | |||
| 352 | if (SSL_set_tlsext_status_ocsp_resp(ctx->ssl_conn, ocsp_staple, | 351 | if (SSL_set_tlsext_status_ocsp_resp(ctx->ssl_conn, ocsp_staple, |
| 353 | ctx->config->keypair->ocsp_staple_len) != 1) | 352 | ctx->keypair->ocsp_staple_len) != 1) |
| 354 | goto err; | 353 | goto err; |
| 355 | 354 | ||
| 356 | ret = SSL_TLSEXT_ERR_OK; | 355 | ret = SSL_TLSEXT_ERR_OK; |
| 357 | err: | 356 | err: |
| 358 | if (ret != SSL_TLSEXT_ERR_OK) | 357 | if (ret != SSL_TLSEXT_ERR_OK) |
| 359 | free(ocsp_staple); | 358 | free(ocsp_staple); |
| 359 | |||
| 360 | return ret; | 360 | return ret; |
| 361 | } | 361 | } |
| 362 | 362 | ||
| @@ -364,7 +364,7 @@ tls_ocsp_stapling_cb(SSL *ssl, void *arg) | |||
| 364 | * Public API | 364 | * Public API |
| 365 | */ | 365 | */ |
| 366 | 366 | ||
| 367 | /* Retrieve OCSP URL from peer certificate, if present */ | 367 | /* Retrieve OCSP URL from peer certificate, if present. */ |
| 368 | const char * | 368 | const char * |
| 369 | tls_peer_ocsp_url(struct tls *ctx) | 369 | tls_peer_ocsp_url(struct tls *ctx) |
| 370 | { | 370 | { |
diff --git a/src/lib/libtls/tls_server.c b/src/lib/libtls/tls_server.c index 2622e4464f..e1011769f6 100644 --- a/src/lib/libtls/tls_server.c +++ b/src/lib/libtls/tls_server.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls_server.c,v 1.41 2017/08/10 18:18:30 jsing Exp $ */ | 1 | /* $OpenBSD: tls_server.c,v 1.42 2017/09/20 17:05:17 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -50,7 +50,9 @@ tls_server_conn(struct tls *ctx) | |||
| 50 | conn_ctx->flags |= TLS_SERVER_CONN; | 50 | conn_ctx->flags |= TLS_SERVER_CONN; |
| 51 | 51 | ||
| 52 | ctx->config->refcount++; | 52 | ctx->config->refcount++; |
| 53 | |||
| 53 | conn_ctx->config = ctx->config; | 54 | conn_ctx->config = ctx->config; |
| 55 | conn_ctx->keypair = ctx->config->keypair; | ||
| 54 | 56 | ||
| 55 | return (conn_ctx); | 57 | return (conn_ctx); |
| 56 | } | 58 | } |
| @@ -112,6 +114,7 @@ tls_servername_cb(SSL *ssl, int *al, void *arg) | |||
| 112 | &match) == -1) | 114 | &match) == -1) |
| 113 | goto err; | 115 | goto err; |
| 114 | if (match) { | 116 | if (match) { |
| 117 | conn_ctx->keypair = sni_ctx->keypair; | ||
| 115 | SSL_set_SSL_CTX(conn_ctx->ssl_conn, sni_ctx->ssl_ctx); | 118 | SSL_set_SSL_CTX(conn_ctx->ssl_conn, sni_ctx->ssl_ctx); |
| 116 | return (SSL_TLSEXT_ERR_OK); | 119 | return (SSL_TLSEXT_ERR_OK); |
| 117 | } | 120 | } |
| @@ -341,6 +344,7 @@ tls_configure_server_sni(struct tls *ctx) | |||
| 341 | tls_set_errorx(ctx, "out of memory"); | 344 | tls_set_errorx(ctx, "out of memory"); |
| 342 | goto err; | 345 | goto err; |
| 343 | } | 346 | } |
| 347 | (*sni_ctx)->keypair = kp; | ||
| 344 | if (tls_configure_server_ssl(ctx, &(*sni_ctx)->ssl_ctx, kp) == -1) | 348 | if (tls_configure_server_ssl(ctx, &(*sni_ctx)->ssl_ctx, kp) == -1) |
| 345 | goto err; | 349 | goto err; |
| 346 | if (tls_keypair_load_cert(kp, &ctx->error, | 350 | if (tls_keypair_load_cert(kp, &ctx->error, |
