Index: net/socket/ssl_client_socket_openssl.cc |
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc |
index 9d7289a04ff8650466e1248d5ccc19be5c73db42..9fc6454ea19e5579d011cc5d2a84310777343b33 100644 |
--- a/net/socket/ssl_client_socket_openssl.cc |
+++ b/net/socket/ssl_client_socket_openssl.cc |
@@ -883,10 +883,10 @@ int SSLClientSocketOpenSSL::Init() { |
STACK_OF(SSL_CIPHER)* ciphers = SSL_get_ciphers(ssl_); |
DCHECK(ciphers); |
// See SSLConfig::disabled_cipher_suites for description of the suites |
- // disabled by default. Note that !SHA256 and !SHA384 only remove HMAC-SHA256 |
+ // disabled by default. Note that SHA256 and SHA384 only select HMAC-SHA256 |
// and HMAC-SHA384 cipher suites, not GCM cipher suites with SHA256 or SHA384 |
// as the handshake hash. |
- std::string command("DEFAULT:!SHA256:!SHA384:!AESGCM+AES256:!aPSK"); |
+ std::string command("DEFAULT:!SHA256:-SHA384:!AESGCM+AES256:!aPSK"); |
// Walk through all the installed ciphers, seeing if any need to be |
// appended to the cipher removal |command|. |
for (size_t i = 0; i < sk_SSL_CIPHER_num(ciphers); ++i) { |
@@ -911,8 +911,15 @@ int SSLClientSocketOpenSSL::Init() { |
} |
} |
- if (!ssl_config_.enable_deprecated_cipher_suites) |
+ if (!ssl_config_.enable_deprecated_cipher_suites) { |
command.append(":!RC4"); |
+ } else { |
+ // Add TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 under a fallback. This is |
+ // believed to work around a bug in some out-of-date Microsoft IIS servers |
+ // which cause them to require the version downgrade |
+ // (https://crbug.com/433406). |
+ command.append(":ECDHE-RSA-AES256-SHA384"); |
+ } |
// Disable ECDSA cipher suites on platforms that do not support ECDSA |
// signed certificates, as servers may use the presence of such |