Disable encrypt them mac for SSL 3.0 and stream ciphers (RC4 only).
Reviewed-by: Tim Hudson <tjh@openssl.org>
This commit is contained in:
parent
e0fdea3e49
commit
f3014206a2
26
ssl/t1_lib.c
26
ssl/t1_lib.c
@ -1485,8 +1485,11 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, unsigned c
|
|||||||
if (!custom_ext_add(s, 0, &ret, limit, al))
|
if (!custom_ext_add(s, 0, &ret, limit, al))
|
||||||
return NULL;
|
return NULL;
|
||||||
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
||||||
s2n(TLSEXT_TYPE_encrypt_then_mac,ret);
|
if (s->version != SSL3_VERSION)
|
||||||
s2n(0,ret);
|
{
|
||||||
|
s2n(TLSEXT_TYPE_encrypt_then_mac,ret);
|
||||||
|
s2n(0,ret);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Add padding to workaround bugs in F5 terminators.
|
/* Add padding to workaround bugs in F5 terminators.
|
||||||
@ -1719,10 +1722,12 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, unsigned c
|
|||||||
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
||||||
if (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC)
|
if (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC)
|
||||||
{
|
{
|
||||||
/* Don't use encrypt_then_mac if AEAD: might want
|
/* Don't use encrypt_then_mac if AEAD, RC4 or SSL 3.0:
|
||||||
* to disable for other ciphersuites too.
|
* might want to disable for other cases too.
|
||||||
*/
|
*/
|
||||||
if (s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD)
|
if (s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD
|
||||||
|
|| s->s3->tmp.new_cipher->algorithm_enc == SSL_RC4
|
||||||
|
|| s->version == SSL3_VERSION)
|
||||||
s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
|
s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2436,7 +2441,10 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char
|
|||||||
}
|
}
|
||||||
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
||||||
else if (type == TLSEXT_TYPE_encrypt_then_mac)
|
else if (type == TLSEXT_TYPE_encrypt_then_mac)
|
||||||
s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
|
{
|
||||||
|
if (s->version != SSL3_VERSION)
|
||||||
|
s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
/* If this ClientHello extension was unhandled and this is
|
/* If this ClientHello extension was unhandled and this is
|
||||||
* a nonresumed connection, check whether the extension is a
|
* a nonresumed connection, check whether the extension is a
|
||||||
@ -2777,8 +2785,10 @@ static int ssl_scan_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char
|
|||||||
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
#ifdef TLSEXT_TYPE_encrypt_then_mac
|
||||||
else if (type == TLSEXT_TYPE_encrypt_then_mac)
|
else if (type == TLSEXT_TYPE_encrypt_then_mac)
|
||||||
{
|
{
|
||||||
/* Ignore if inappropriate ciphersuite */
|
/* Ignore if inappropriate ciphersuite or SSL 3.0 */
|
||||||
if (s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD)
|
if (s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD
|
||||||
|
&& s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4
|
||||||
|
&& s->version != SSL3_VERSION)
|
||||||
s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
|
s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user