Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Side by Side Diff: net/http/http_network_transaction.cc

Issue 25547003: net: remove TLS fallback for Google properties. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 // cipher suite defined only for higher protocol versions (such as 1233 // cipher suite defined only for higher protocol versions (such as
1234 // an SSL 3.0 server that chose a TLS-only cipher suite). Fall 1234 // an SSL 3.0 server that chose a TLS-only cipher suite). Fall
1235 // back to the next lower version and retry. 1235 // back to the next lower version and retry.
1236 // NOTE: if the SSLClientSocket class doesn't support TLS 1.1, 1236 // NOTE: if the SSLClientSocket class doesn't support TLS 1.1,
1237 // specifying TLS 1.1 in version_max will result in a TLS 1.0 1237 // specifying TLS 1.1 in version_max will result in a TLS 1.0
1238 // handshake, so falling back from TLS 1.1 to TLS 1.0 will simply 1238 // handshake, so falling back from TLS 1.1 to TLS 1.0 will simply
1239 // repeat the TLS 1.0 handshake. To avoid this problem, the default 1239 // repeat the TLS 1.0 handshake. To avoid this problem, the default
1240 // version_max should match the maximum protocol version supported 1240 // version_max should match the maximum protocol version supported
1241 // by the SSLClientSocket class. 1241 // by the SSLClientSocket class.
1242 version_max--; 1242 version_max--;
1243 1243 should_fallback = true;
1244 // Fallback to the lower SSL version.
1245 // While SSL 3.0 fallback should be eliminated because of security
1246 // reasons, there is a high risk of breaking the servers if this is
1247 // done in general.
1248 // For now SSL 3.0 fallback is disabled for Google servers first,
1249 // and will be expanded to other servers after enough experiences
1250 // have been gained showing that this experiment works well with
1251 // today's Internet.
1252 if (version_max > SSL_PROTOCOL_VERSION_SSL3 ||
1253 (server_ssl_config_.unrestricted_ssl3_fallback_enabled ||
1254 !TransportSecurityState::IsGooglePinnedProperty(
1255 request_->url.host(), true /* include SNI */))) {
1256 should_fallback = true;
1257 }
1258 } 1244 }
1259 break; 1245 break;
1260 case ERR_SSL_BAD_RECORD_MAC_ALERT: 1246 case ERR_SSL_BAD_RECORD_MAC_ALERT:
1261 if (version_max >= SSL_PROTOCOL_VERSION_TLS1_1 && 1247 if (version_max >= SSL_PROTOCOL_VERSION_TLS1_1 &&
1262 version_max > server_ssl_config_.version_min) { 1248 version_max > server_ssl_config_.version_min) {
1263 // Some broken SSL devices negotiate TLS 1.0 when sent a TLS 1.1 or 1249 // Some broken SSL devices negotiate TLS 1.0 when sent a TLS 1.1 or
1264 // 1.2 ClientHello, but then return a bad_record_mac alert. See 1250 // 1.2 ClientHello, but then return a bad_record_mac alert. See
1265 // crbug.com/260358. In order to make the fallback as minimal as 1251 // crbug.com/260358. In order to make the fallback as minimal as
1266 // possible, this fallback is only triggered for >= TLS 1.1. 1252 // possible, this fallback is only triggered for >= TLS 1.1.
1267 version_max--; 1253 version_max--;
1268 should_fallback = true; 1254 should_fallback = true;
1269 } 1255 }
1270 break; 1256 break;
1271 } 1257 }
1272 1258
1259 // While fallback should be eliminated because of security reasons,
1260 // there is a high risk of breaking the servers if this is done in
1261 // general.
1262 //
1263 // For now fallback is disabled for Google servers first, and will be
1264 // expanded to other servers after enough experiences have been gained
1265 // showing that this experiment works well with today's Internet.
1266 if (!server_ssl_config_.unrestricted_ssl3_fallback_enabled &&
wtc 2013/10/01 22:03:51 Nit: this comment should be updated to note that u
agl 2013/10/02 16:33:17 Done. I lean against updating the config option n
1267 TransportSecurityState::IsGooglePinnedProperty(request_->url.host(),
1268 true /* include SNI */)) {
1269 should_fallback = false;
1270 }
1271
1273 if (should_fallback) { 1272 if (should_fallback) {
1274 net_log_.AddEvent( 1273 net_log_.AddEvent(
1275 NetLog::TYPE_SSL_VERSION_FALLBACK, 1274 NetLog::TYPE_SSL_VERSION_FALLBACK,
1276 base::Bind(&NetLogSSLVersionFallbackCallback, 1275 base::Bind(&NetLogSSLVersionFallbackCallback,
1277 &request_->url, error, server_ssl_config_.version_max, 1276 &request_->url, error, server_ssl_config_.version_max,
1278 version_max)); 1277 version_max));
1279 server_ssl_config_.version_max = version_max; 1278 server_ssl_config_.version_max = version_max;
1280 server_ssl_config_.version_fallback = true; 1279 server_ssl_config_.version_fallback = true;
1281 ResetConnectionAndRequestForResend(); 1280 ResetConnectionAndRequestForResend();
1282 error = OK; 1281 error = OK;
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, 1478 description = base::StringPrintf("Unknown state 0x%08X (%u)", state,
1480 state); 1479 state);
1481 break; 1480 break;
1482 } 1481 }
1483 return description; 1482 return description;
1484 } 1483 }
1485 1484
1486 #undef STATE_CASE 1485 #undef STATE_CASE
1487 1486
1488 } // namespace net 1487 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698