Skip to content

Commit 89dd854

Browse files
committed
Fix strict client chain check with TLS-1.3
When TLS-1.3 is used and the server does not send any CA names the ca_dn will be NULL. sk_X509_NAME_num() returns -1 on null argument. Reviewed-by: Todd Short <[email protected]> Reviewed-by: Matt Caswell <[email protected]> (Merged from openssl#17986)
1 parent 336d92e commit 89dd854

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

ssl/t1_lib.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2870,22 +2870,20 @@ int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
28702870

28712871
ca_dn = s->s3.tmp.peer_ca_names;
28722872

2873-
if (!sk_X509_NAME_num(ca_dn))
2873+
if (ca_dn == NULL
2874+
|| sk_X509_NAME_num(ca_dn) == 0
2875+
|| ssl_check_ca_name(ca_dn, x))
28742876
rv |= CERT_PKEY_ISSUER_NAME;
2875-
2876-
if (!(rv & CERT_PKEY_ISSUER_NAME)) {
2877-
if (ssl_check_ca_name(ca_dn, x))
2878-
rv |= CERT_PKEY_ISSUER_NAME;
2879-
}
2880-
if (!(rv & CERT_PKEY_ISSUER_NAME)) {
2877+
else
28812878
for (i = 0; i < sk_X509_num(chain); i++) {
28822879
X509 *xtmp = sk_X509_value(chain, i);
2880+
28832881
if (ssl_check_ca_name(ca_dn, xtmp)) {
28842882
rv |= CERT_PKEY_ISSUER_NAME;
28852883
break;
28862884
}
28872885
}
2888-
}
2886+
28892887
if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
28902888
goto end;
28912889
} else

0 commit comments

Comments
 (0)