From: David Benjamin Date: Sun, 6 Mar 2016 00:49:20 +0000 (-0500) Subject: Don't send signature algorithms when client_version is below TLS 1.2. X-Git-Tag: OpenSSL_1_1_0-pre6~891 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f7aa318552c4ef62d902c480b59bd7c4513c0009;p=oweals%2Fopenssl.git Don't send signature algorithms when client_version is below TLS 1.2. Per RFC 5246, Note: this extension is not meaningful for TLS versions prior to 1.2. Clients MUST NOT offer it if they are offering prior versions. However, even if clients do offer it, the rules specified in [TLSEXT] require servers to ignore extensions they do not understand. Although second sentence would suggest that there would be no interop problems in always offering the extension, WebRTC has reported issues with Bouncy Castle on < TLS 1.2 ClientHellos that still include signature_algorithms. See also https://bugs.chromium.org/p/webrtc/issues/detail?id=4223 RT#4390 Reviewed-by: Matt Caswell Reviewed-by: Stephen Henson --- diff --git a/ssl/ssl_locl.h b/ssl/ssl_locl.h index 50e0d3900a..983c36be6d 100644 --- a/ssl/ssl_locl.h +++ b/ssl/ssl_locl.h @@ -453,6 +453,12 @@ # define SSL_CLIENT_USE_TLS1_2_CIPHERS(s) \ ((!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION) || \ (SSL_IS_DTLS(s) && DTLS_VERSION_GE(s->client_version, DTLS1_2_VERSION))) +/* + * Determine if a client should send signature algorithms extension: + * as with TLS1.2 cipher we can't rely on method flags. + */ +# define SSL_CLIENT_USE_SIGALGS(s) \ + SSL_CLIENT_USE_TLS1_2_CIPHERS(s) # ifdef TLSEXT_TYPE_encrypt_then_mac # define SSL_USE_ETM(s) (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC) diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c index 0a66c09cb2..6363348d54 100644 --- a/ssl/t1_lib.c +++ b/ssl/t1_lib.c @@ -1331,7 +1331,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, } skip_ext: - if (SSL_USE_SIGALGS(s)) { + if (SSL_CLIENT_USE_SIGALGS(s)) { size_t salglen; const unsigned char *salg; unsigned char *etmp;