Skip to content

Commit

Permalink
Modify is_tls13_capable() to take account of the servername cb
Browse files Browse the repository at this point in the history
A servername cb may change the available certificates, so if we have one
set then we cannot rely on the configured certificates to determine if we
are capable of negotiating TLSv1.3 or not.

Fixes #13291

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from #13305)
  • Loading branch information
mattcaswell committed Dec 10, 2020
1 parent 7da3894 commit e0b139b
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions ssl/statem/statem_lib.c
Expand Up @@ -1504,8 +1504,8 @@ static int ssl_method_error(const SSL *s, const SSL_METHOD *method)

/*
* Only called by servers. Returns 1 if the server has a TLSv1.3 capable
* certificate type, or has PSK or a certificate callback configured. Otherwise
* returns 0.
* certificate type, or has PSK or a certificate callback configured, or has
* a servername callback configured. Otherwise returns 0.
*/
static int is_tls13_capable(const SSL *s)
{
Expand All @@ -1515,6 +1515,17 @@ static int is_tls13_capable(const SSL *s)
EC_KEY *eckey;
#endif

if (!ossl_assert(s->ctx != NULL) || !ossl_assert(s->session_ctx != NULL))
return 0;

/*
* A servername callback can change the available certs, so if a servername
* cb is set then we just assume TLSv1.3 will be ok
*/
if (s->ctx->ext.servername_cb != NULL
|| s->session_ctx->ext.servername_cb != NULL)
return 1;

#ifndef OPENSSL_NO_PSK
if (s->psk_server_callback != NULL)
return 1;
Expand Down

0 comments on commit e0b139b

Please sign in to comment.