| Index: net/http/http_network_transaction.cc
|
| diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
|
| index d9397e4cfbc30dd4f8eab5fb3cf1e5233b277590..745452c454ebc1c143d64cd7060e7161288f0761 100644
|
| --- a/net/http/http_network_transaction.cc
|
| +++ b/net/http/http_network_transaction.cc
|
| @@ -1379,6 +1379,26 @@ int HttpNetworkTransaction::HandleSSLHandshakeError(int error) {
|
| should_fallback = true;
|
| }
|
| break;
|
| + case ERR_CONNECTION_RESET:
|
| + if (version_max >= SSL_PROTOCOL_VERSION_TLS1_1 &&
|
| + version_max > server_ssl_config_.version_min) {
|
| + // Some network devices that inspect application-layer packets seem to
|
| + // inject TCP reset packets to break the connections when they see TLS
|
| + // 1.1 in ClientHello or ServerHello. See http://crbug.com/130293.
|
| + //
|
| + // Only allow ERR_CONNECTION_RESET to trigger a fallback from TLS 1.1 or
|
| + // 1.2. We don't lose much in this fallback because the explicit IV for
|
| + // CBC mode in TLS 1.1 is approximated by record splitting in TLS
|
| + // 1.0. The fallback will be more painful for TLS 1.2 when we have GCM
|
| + // support.
|
| + //
|
| + // ERR_CONNECTION_RESET is a common network error, so we don't want it
|
| + // to trigger a version fallback in general, especially the TLS 1.0 ->
|
| + // SSL 3.0 fallback, which would drop TLS extensions.
|
| + version_max--;
|
| + should_fallback = true;
|
| + }
|
| + break;
|
| case ERR_SSL_INAPPROPRIATE_FALLBACK:
|
| // The server told us that we should not have fallen back. A buggy server
|
| // could trigger ERR_SSL_INAPPROPRIATE_FALLBACK with the initial
|
|
|