mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
Fix supported_groups handing in TLSv1.2
In TLSv1.2 we should not attempt to use a supported_group value that is intended for use with TLSv1.3 - even if both the server and the client support it, e.g. the ffdhe groups are supported by OpenSSL for TLSv1.3 but not for TLSv1.2. Fixes #21081 Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Viktor Dukhovni <viktor@openssl.org> (Merged from https://github.com/openssl/openssl/pull/21295)
This commit is contained in:
parent
f41c7125f7
commit
01e765f054
25
ssl/t1_lib.c
25
ssl/t1_lib.c
@ -23,6 +23,7 @@
|
||||
#include "internal/nelem.h"
|
||||
#include "internal/sizes.h"
|
||||
#include "internal/tlsgroups.h"
|
||||
#include "internal/cryptlib.h"
|
||||
#include "ssl_local.h"
|
||||
#include <openssl/ct.h>
|
||||
|
||||
@ -600,6 +601,7 @@ uint16_t tls1_shared_group(SSL *s, int nmatch)
|
||||
const uint16_t *pref, *supp;
|
||||
size_t num_pref, num_supp, i;
|
||||
int k;
|
||||
SSL_CTX *ctx = s->ctx;
|
||||
|
||||
/* Can't do anything on client side */
|
||||
if (s->server == 0)
|
||||
@ -636,10 +638,29 @@ uint16_t tls1_shared_group(SSL *s, int nmatch)
|
||||
|
||||
for (k = 0, i = 0; i < num_pref; i++) {
|
||||
uint16_t id = pref[i];
|
||||
const TLS_GROUP_INFO *inf;
|
||||
|
||||
if (!tls1_in_list(id, supp, num_supp)
|
||||
|| !tls_group_allowed(s, id, SSL_SECOP_CURVE_SHARED))
|
||||
continue;
|
||||
|| !tls_group_allowed(s, id, SSL_SECOP_CURVE_SHARED))
|
||||
continue;
|
||||
inf = tls1_group_id_lookup(ctx, id);
|
||||
if (!ossl_assert(inf != NULL))
|
||||
return 0;
|
||||
if (SSL_IS_DTLS(s)) {
|
||||
if (inf->maxdtls == -1)
|
||||
continue;
|
||||
if ((inf->mindtls != 0 && DTLS_VERSION_LT(s->version, inf->mindtls))
|
||||
|| (inf->maxdtls != 0
|
||||
&& DTLS_VERSION_GT(s->version, inf->maxdtls)))
|
||||
continue;
|
||||
} else {
|
||||
if (inf->maxtls == -1)
|
||||
continue;
|
||||
if ((inf->mintls != 0 && s->version < inf->mintls)
|
||||
|| (inf->maxtls != 0 && s->version > inf->maxtls))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (nmatch == k)
|
||||
return id;
|
||||
k++;
|
||||
|
Loading…
Reference in New Issue
Block a user