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 764ce9ee71b91219c684c82319507783bf41c6f5..a84dbc2070a23fcdde613661d396232d97a9c11c 100644 |
--- a/net/socket/ssl_client_socket_openssl.cc |
+++ b/net/socket/ssl_client_socket_openssl.cc |
@@ -403,6 +403,27 @@ std::string SSLClientSocketOpenSSL::GetSessionCacheKey() const { |
std::string result = host_and_port_.ToString(); |
result.append("/"); |
result.append(ssl_session_cache_shard_); |
+ |
+ // Shard the session cache based on maximum protocol version. This causes |
+ // fallback connections to use a separate session cache. |
+ result.append("/"); |
+ switch (ssl_config_.version_max) { |
+ case SSL_PROTOCOL_VERSION_SSL3: |
+ result.append("ssl3"); |
+ break; |
+ case SSL_PROTOCOL_VERSION_TLS1: |
+ result.append("tls1"); |
+ break; |
+ case SSL_PROTOCOL_VERSION_TLS1_1: |
+ result.append("tls1.1"); |
+ break; |
+ case SSL_PROTOCOL_VERSION_TLS1_2: |
+ result.append("tls1.2"); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ |
return result; |
} |