From: Matt Caswell Date: Fri, 1 May 2020 08:17:40 +0000 (+0100) Subject: Don't offer or accept ciphersuites that we can't support X-Git-Tag: openssl-3.0.0-alpha2~72 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=4264ecd4cebf7cee4bd437f1739e9f4297ae5b70;p=oweals%2Fopenssl.git Don't offer or accept ciphersuites that we can't support We were not correctly detecting whether TLSv1.3 ciphersuites could actually be supported by the available provider implementations. For example a FIPS client would still offer CHACHA20-POLY1305 based ciphersuites even though it couldn't actually use them. Similarly on the server would try to use CHACHA20-POLY1305 and then fail the handshake. Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/11700) --- diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c index 9ee1fc7fa9..7b3a5e7c89 100644 --- a/ssl/ssl_ciph.c +++ b/ssl/ssl_ciph.c @@ -1596,8 +1596,16 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, /* Add TLSv1.3 ciphers first - we always prefer those if possible */ for (i = 0; i < sk_SSL_CIPHER_num(tls13_ciphersuites); i++) { - if (!sk_SSL_CIPHER_push(cipherstack, - sk_SSL_CIPHER_value(tls13_ciphersuites, i))) { + const SSL_CIPHER *sslc = sk_SSL_CIPHER_value(tls13_ciphersuites, i); + + /* Don't include any TLSv1.3 ciphers that are disabled */ + if ((sslc->algorithm_enc & disabled_enc) != 0 + || (ssl_cipher_table_mac[sslc->algorithm2 + & SSL_HANDSHAKE_MAC_MASK].mask + & disabled_mac_mask) != 0) + continue; + + if (!sk_SSL_CIPHER_push(cipherstack, sslc)) { sk_SSL_CIPHER_free(cipherstack); return NULL; }