summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_clnt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_clnt.c')
-rw-r--r--src/lib/libssl/ssl_clnt.c36
1 files changed, 4 insertions, 32 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c
index 1319684868..0e50285898 100644
--- a/src/lib/libssl/ssl_clnt.c
+++ b/src/lib/libssl/ssl_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_clnt.c,v 1.152 2022/08/15 10:45:25 tb Exp $ */ 1/* $OpenBSD: ssl_clnt.c,v 1.153 2022/08/17 07:39:19 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -1090,8 +1090,6 @@ ssl3_get_server_certificate(SSL *s)
1090 STACK_OF(X509) *certs = NULL; 1090 STACK_OF(X509) *certs = NULL;
1091 X509 *cert = NULL; 1091 X509 *cert = NULL;
1092 const uint8_t *p; 1092 const uint8_t *p;
1093 EVP_PKEY *pkey;
1094 int cert_type;
1095 int al, ret; 1093 int al, ret;
1096 1094
1097 if ((ret = ssl3_get_message(s, SSL3_ST_CR_CERT_A, 1095 if ((ret = ssl3_get_message(s, SSL3_ST_CR_CERT_A,
@@ -1156,37 +1154,11 @@ ssl3_get_server_certificate(SSL *s)
1156 SSLerror(s, SSL_R_CERTIFICATE_VERIFY_FAILED); 1154 SSLerror(s, SSL_R_CERTIFICATE_VERIFY_FAILED);
1157 goto fatal_err; 1155 goto fatal_err;
1158 } 1156 }
1159 ERR_clear_error(); /* but we keep s->verify_result */
1160
1161 /*
1162 * Inconsistency alert: cert_chain does include the peer's
1163 * certificate, which we don't include in s3_srvr.c
1164 */
1165 cert = sk_X509_value(certs, 0);
1166 X509_up_ref(cert);
1167
1168 if ((pkey = X509_get0_pubkey(cert)) == NULL ||
1169 EVP_PKEY_missing_parameters(pkey)) {
1170 al = SSL3_AL_FATAL;
1171 SSLerror(s, SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS);
1172 goto fatal_err;
1173 }
1174 if ((cert_type = ssl_cert_type(pkey)) < 0) {
1175 al = SSL3_AL_FATAL;
1176 SSLerror(s, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1177 goto fatal_err;
1178 }
1179
1180 X509_free(s->session->peer_cert);
1181 X509_up_ref(cert);
1182 s->session->peer_cert = cert;
1183 s->session->peer_cert_type = cert_type;
1184
1185 s->session->verify_result = s->verify_result; 1157 s->session->verify_result = s->verify_result;
1158 ERR_clear_error();
1186 1159
1187 sk_X509_pop_free(s->session->cert_chain, X509_free); 1160 if (!tls_process_peer_certs(s, certs))
1188 s->session->cert_chain = certs; 1161 goto err;
1189 certs = NULL;
1190 1162
1191 ret = 1; 1163 ret = 1;
1192 1164