summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeck <>2020-05-19 01:30:34 +0000
committerbeck <>2020-05-19 01:30:34 +0000
commit0286c965db48149ae18c03e50dcc7965dfa5887e (patch)
tree8f5ae09863670d19a22fed1e3b31bc81cd7c0353
parente73b818448057ce4fec815b7f2b2770ece5877f7 (diff)
downloadopenbsd-0286c965db48149ae18c03e50dcc7965dfa5887e.tar.gz
openbsd-0286c965db48149ae18c03e50dcc7965dfa5887e.tar.bz2
openbsd-0286c965db48149ae18c03e50dcc7965dfa5887e.zip
Add support for TLS 1.3 server to send certificate status
messages with oscp staples. ok jsing@ tb@
-rw-r--r--src/lib/libssl/ssl_tlsext.c24
-rw-r--r--src/lib/libssl/tls13_client.c6
-rw-r--r--src/lib/libssl/tls13_internal.h5
-rw-r--r--src/lib/libssl/tls13_lib.c12
-rw-r--r--src/lib/libssl/tls13_server.c6
5 files changed, 38 insertions, 15 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 814eb7c5cf..1ec8ac00ef 100644
--- a/src/lib/libssl/ssl_tlsext.c
+++ b/src/lib/libssl/ssl_tlsext.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.c,v 1.68 2020/05/13 17:55:34 jsing Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.69 2020/05/19 01:30:34 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -909,12 +909,34 @@ tlsext_ocsp_server_parse(SSL *s, CBS *cbs, int *alert)
909int 909int
910tlsext_ocsp_server_needs(SSL *s) 910tlsext_ocsp_server_needs(SSL *s)
911{ 911{
912 if (s->version >= TLS1_3_VERSION &&
913 s->ctx->internal->tlsext_status_cb != NULL) {
914 s->internal->tlsext_status_expected = 0;
915 if (s->ctx->internal->tlsext_status_cb(s,
916 s->ctx->internal->tlsext_status_arg) == SSL_TLSEXT_ERR_OK &&
917 s->internal->tlsext_ocsp_resp_len > 0)
918 s->internal->tlsext_status_expected = 1;
919 }
912 return s->internal->tlsext_status_expected; 920 return s->internal->tlsext_status_expected;
913} 921}
914 922
915int 923int
916tlsext_ocsp_server_build(SSL *s, CBB *cbb) 924tlsext_ocsp_server_build(SSL *s, CBB *cbb)
917{ 925{
926 CBB ocsp_response;
927
928 if (s->version >= TLS1_3_VERSION) {
929 if (!CBB_add_u8(cbb, TLSEXT_STATUSTYPE_ocsp))
930 return 0;
931 if (!CBB_add_u24_length_prefixed(cbb, &ocsp_response))
932 return 0;
933 if (!CBB_add_bytes(&ocsp_response,
934 s->internal->tlsext_ocsp_resp,
935 s->internal->tlsext_ocsp_resp_len))
936 return 0;
937 if (!CBB_flush(cbb))
938 return 0;
939 }
918 return 1; 940 return 1;
919} 941}
920 942
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c
index 652953f2bb..a17b2bd47f 100644
--- a/src/lib/libssl/tls13_client.c
+++ b/src/lib/libssl/tls13_client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_client.c,v 1.61 2020/05/17 14:26:15 jsing Exp $ */ 1/* $OpenBSD: tls13_client.c,v 1.62 2020/05/19 01:30:34 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -847,12 +847,12 @@ tls13_client_certificate_send(struct tls13_ctx *ctx, CBB *cbb)
847 if (cpk->x509 == NULL) 847 if (cpk->x509 == NULL)
848 goto done; 848 goto done;
849 849
850 if (!tls13_cert_add(&cert_list, cpk->x509)) 850 if (!tls13_cert_add(ctx, &cert_list, cpk->x509, tlsext_client_build))
851 goto err; 851 goto err;
852 852
853 for (i = 0; i < sk_X509_num(chain); i++) { 853 for (i = 0; i < sk_X509_num(chain); i++) {
854 cert = sk_X509_value(chain, i); 854 cert = sk_X509_value(chain, i);
855 if (!tls13_cert_add(&cert_list, cert)) 855 if (!tls13_cert_add(ctx, &cert_list, cert, tlsext_client_build))
856 goto err; 856 goto err;
857 } 857 }
858 858
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h
index 98cbf4c8a7..7e188981f4 100644
--- a/src/lib/libssl/tls13_internal.h
+++ b/src/lib/libssl/tls13_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_internal.h,v 1.80 2020/05/16 14:42:35 jsing Exp $ */ 1/* $OpenBSD: tls13_internal.h,v 1.81 2020/05/19 01:30:34 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org>
@@ -380,8 +380,9 @@ int tls13_server_finished_send(struct tls13_ctx *ctx, CBB *cbb);
380int tls13_server_finished_sent(struct tls13_ctx *ctx); 380int tls13_server_finished_sent(struct tls13_ctx *ctx);
381 381
382void tls13_error_clear(struct tls13_error *error); 382void tls13_error_clear(struct tls13_error *error);
383int tls13_cert_add(struct tls13_ctx *ctx, CBB *cbb, X509 *cert,
384 int(*build_extensions)(SSL *s, CBB *cbb, uint16_t msg_type));
383 385
384int tls13_cert_add(CBB *cbb, X509 *cert);
385int tls13_synthetic_handshake_message(struct tls13_ctx *ctx); 386int tls13_synthetic_handshake_message(struct tls13_ctx *ctx);
386 387
387int tls13_error_set(struct tls13_error *error, int code, int subcode, 388int tls13_error_set(struct tls13_error *error, int code, int subcode,
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c
index 3527539095..60b4a389b7 100644
--- a/src/lib/libssl/tls13_lib.c
+++ b/src/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_lib.c,v 1.45 2020/05/17 19:07:15 beck Exp $ */ 1/* $OpenBSD: tls13_lib.c,v 1.46 2020/05/19 01:30:34 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org>
@@ -21,6 +21,7 @@
21#include <openssl/evp.h> 21#include <openssl/evp.h>
22 22
23#include "ssl_locl.h" 23#include "ssl_locl.h"
24#include "ssl_tlsext.h"
24#include "tls13_internal.h" 25#include "tls13_internal.h"
25 26
26/* 27/*
@@ -410,9 +411,10 @@ tls13_ctx_free(struct tls13_ctx *ctx)
410} 411}
411 412
412int 413int
413tls13_cert_add(CBB *cbb, X509 *cert) 414tls13_cert_add(struct tls13_ctx *ctx, CBB *cbb, X509 *cert,
415 int(*build_extensions)(SSL *s, CBB *cbb, uint16_t msg_type))
414{ 416{
415 CBB cert_data, cert_exts; 417 CBB cert_data;
416 uint8_t *data; 418 uint8_t *data;
417 int cert_len; 419 int cert_len;
418 420
@@ -425,10 +427,8 @@ tls13_cert_add(CBB *cbb, X509 *cert)
425 return 0; 427 return 0;
426 if (i2d_X509(cert, &data) != cert_len) 428 if (i2d_X509(cert, &data) != cert_len)
427 return 0; 429 return 0;
428 430 if (!build_extensions(ctx->ssl, cbb, SSL_TLSEXT_MSG_CT))
429 if (!CBB_add_u16_length_prefixed(cbb, &cert_exts))
430 return 0; 431 return 0;
431
432 if (!CBB_flush(cbb)) 432 if (!CBB_flush(cbb))
433 return 0; 433 return 0;
434 434
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c
index 4e40aa7ba3..ea14cfa683 100644
--- a/src/lib/libssl/tls13_server.c
+++ b/src/lib/libssl/tls13_server.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_server.c,v 1.47 2020/05/16 14:40:53 jsing Exp $ */ 1/* $OpenBSD: tls13_server.c,v 1.48 2020/05/19 01:30:34 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
@@ -454,12 +454,12 @@ tls13_server_certificate_send(struct tls13_ctx *ctx, CBB *cbb)
454 if (!CBB_add_u24_length_prefixed(cbb, &cert_list)) 454 if (!CBB_add_u24_length_prefixed(cbb, &cert_list))
455 goto err; 455 goto err;
456 456
457 if (!tls13_cert_add(&cert_list, cpk->x509)) 457 if (!tls13_cert_add(ctx, &cert_list, cpk->x509, tlsext_server_build))
458 goto err; 458 goto err;
459 459
460 for (i = 0; i < sk_X509_num(chain); i++) { 460 for (i = 0; i < sk_X509_num(chain); i++) {
461 cert = sk_X509_value(chain, i); 461 cert = sk_X509_value(chain, i);
462 if (!tls13_cert_add(&cert_list, cert)) 462 if (!tls13_cert_add(ctx, &cert_list, cert, tlsext_server_build))
463 goto err; 463 goto err;
464 } 464 }
465 465