diff options
Diffstat (limited to 'src/lib/libssl/tls13_server.c')
| -rw-r--r-- | src/lib/libssl/tls13_server.c | 28 |
1 files changed, 3 insertions, 25 deletions
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c index 5aee5f1a93..8f225433f0 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.100 2022/07/24 14:16:29 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_server.c,v 1.101 2022/08/17 07:39:19 jsing 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> |
| @@ -860,9 +860,7 @@ tls13_client_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 860 | struct stack_st_X509 *certs = NULL; | 860 | struct stack_st_X509 *certs = NULL; |
| 861 | SSL *s = ctx->ssl; | 861 | SSL *s = ctx->ssl; |
| 862 | X509 *cert = NULL; | 862 | X509 *cert = NULL; |
| 863 | EVP_PKEY *pkey; | ||
| 864 | const uint8_t *p; | 863 | const uint8_t *p; |
| 865 | int cert_type; | ||
| 866 | int ret = 0; | 864 | int ret = 0; |
| 867 | 865 | ||
| 868 | if (!CBS_get_u8_length_prefixed(cbs, &cert_request_context)) | 866 | if (!CBS_get_u8_length_prefixed(cbs, &cert_request_context)) |
| @@ -911,31 +909,11 @@ tls13_client_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 911 | "failed to verify peer certificate", NULL); | 909 | "failed to verify peer certificate", NULL); |
| 912 | goto err; | 910 | goto err; |
| 913 | } | 911 | } |
| 912 | s->session->verify_result = s->verify_result; | ||
| 914 | ERR_clear_error(); | 913 | ERR_clear_error(); |
| 915 | 914 | ||
| 916 | /* | 915 | if (!tls_process_peer_certs(s, certs)) |
| 917 | * Achtung! Due to API inconsistency, a client includes the peer's leaf | ||
| 918 | * certificate in the stored certificate chain, while a server does not. | ||
| 919 | */ | ||
| 920 | cert = sk_X509_shift(certs); | ||
| 921 | |||
| 922 | if ((pkey = X509_get0_pubkey(cert)) == NULL) | ||
| 923 | goto err; | 916 | goto err; |
| 924 | if (EVP_PKEY_missing_parameters(pkey)) | ||
| 925 | goto err; | ||
| 926 | if ((cert_type = ssl_cert_type(pkey)) < 0) | ||
| 927 | goto err; | ||
| 928 | |||
| 929 | X509_up_ref(cert); | ||
| 930 | X509_free(s->session->peer_cert); | ||
| 931 | s->session->peer_cert = cert; | ||
| 932 | s->session->peer_cert_type = cert_type; | ||
| 933 | |||
| 934 | s->session->verify_result = s->verify_result; | ||
| 935 | |||
| 936 | sk_X509_pop_free(s->session->cert_chain, X509_free); | ||
| 937 | s->session->cert_chain = certs; | ||
| 938 | certs = NULL; | ||
| 939 | 917 | ||
| 940 | ctx->handshake_stage.hs_type |= WITH_CCV; | 918 | ctx->handshake_stage.hs_type |= WITH_CCV; |
| 941 | ret = 1; | 919 | ret = 1; |
