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

Side by Side Diff: chrome/browser/net/ssl_config_service_manager_pref.cc

Issue 14125003: Do not roll back to SSL 3.0 for Google properties. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup before sending for reviews. Created 7 years, 8 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
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 #include "chrome/browser/net/ssl_config_service_manager.h" 4 #include "chrome/browser/net/ssl_config_service_manager.h"
5 5
6 #include <algorithm> 6 #include <algorithm>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 continue; 57 continue;
58 } 58 }
59 cipher_suites.push_back(cipher_suite); 59 cipher_suites.push_back(cipher_suite);
60 } 60 }
61 std::sort(cipher_suites.begin(), cipher_suites.end()); 61 std::sort(cipher_suites.begin(), cipher_suites.end());
62 return cipher_suites; 62 return cipher_suites;
63 } 63 }
64 64
65 // Returns the string representation of an SSL protocol version. Returns an 65 // Returns the string representation of an SSL protocol version. Returns an
66 // empty string on error. 66 // empty string on error.
67 std::string SSLProtocolVersionToString(uint16 version) { 67 std::string SSLConfig::SSLProtocolVersionToString(uint16 version) {
Ryan Sleevi 2013/04/17 18:01:27 I believe you should revert these changes - it's n
thaidn_google 2013/04/17 20:14:40 Oh right. Good catch! This should be caught if I w
68 switch (version) { 68 switch (version) {
69 case net::SSL_PROTOCOL_VERSION_SSL3: 69 case net::SSL_PROTOCOL_VERSION_SSL3:
70 return "ssl3"; 70 return "ssl3";
71 case net::SSL_PROTOCOL_VERSION_TLS1: 71 case net::SSL_PROTOCOL_VERSION_TLS1:
72 return "tls1"; 72 return "tls1";
73 case net::SSL_PROTOCOL_VERSION_TLS1_1: 73 case net::SSL_PROTOCOL_VERSION_TLS1_1:
74 return "tls1.1"; 74 return "tls1.1";
75 case net::SSL_PROTOCOL_VERSION_TLS1_2: 75 case net::SSL_PROTOCOL_VERSION_TLS1_2:
76 return "tls1.2"; 76 return "tls1.2";
77 default: 77 default:
78 NOTREACHED(); 78 NOTREACHED();
79 return std::string(); 79 return std::string();
80 } 80 }
81 } 81 }
82 82
83 // Returns the SSL protocol version (as a uint16) represented by a string. 83 // Returns the SSL protocol version (as a uint16) represented by a string.
84 // Returns 0 if the string is invalid. 84 // Returns 0 if the string is invalid.
85 uint16 SSLProtocolVersionFromString(const std::string& version_str) { 85 uint16 SSLConfig::SSLProtocolVersionFromString(const std::string& version_str) {
86 uint16 version = 0; // Invalid. 86 uint16 version = 0; // Invalid.
87 if (version_str == "ssl3") { 87 if (version_str == "ssl3") {
88 version = net::SSL_PROTOCOL_VERSION_SSL3; 88 version = net::SSL_PROTOCOL_VERSION_SSL3;
89 } else if (version_str == "tls1") { 89 } else if (version_str == "tls1") {
90 version = net::SSL_PROTOCOL_VERSION_TLS1; 90 version = net::SSL_PROTOCOL_VERSION_TLS1;
91 } else if (version_str == "tls1.1") { 91 } else if (version_str == "tls1.1") {
92 version = net::SSL_PROTOCOL_VERSION_TLS1_1; 92 version = net::SSL_PROTOCOL_VERSION_TLS1_1;
93 } else if (version_str == "tls1.2") { 93 } else if (version_str == "tls1.2") {
94 version = net::SSL_PROTOCOL_VERSION_TLS1_2; 94 version = net::SSL_PROTOCOL_VERSION_TLS1_2;
95 } 95 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 173
174 PrefChangeRegistrar local_state_change_registrar_; 174 PrefChangeRegistrar local_state_change_registrar_;
175 PrefChangeRegistrar user_prefs_change_registrar_; 175 PrefChangeRegistrar user_prefs_change_registrar_;
176 176
177 // The local_state prefs (should only be accessed from UI thread) 177 // The local_state prefs (should only be accessed from UI thread)
178 BooleanPrefMember rev_checking_enabled_; 178 BooleanPrefMember rev_checking_enabled_;
179 StringPrefMember ssl_version_min_; 179 StringPrefMember ssl_version_min_;
180 StringPrefMember ssl_version_max_; 180 StringPrefMember ssl_version_max_;
181 BooleanPrefMember channel_id_enabled_; 181 BooleanPrefMember channel_id_enabled_;
182 BooleanPrefMember ssl_record_splitting_disabled_; 182 BooleanPrefMember ssl_record_splitting_disabled_;
183 BooleanPrefMember ssl_version_min_preloaded_disabled_;
183 184
184 // The cached list of disabled SSL cipher suites. 185 // The cached list of disabled SSL cipher suites.
185 std::vector<uint16> disabled_cipher_suites_; 186 std::vector<uint16> disabled_cipher_suites_;
186 187
187 // The user_prefs prefs (should only be accessed from UI thread). 188 // The user_prefs prefs (should only be accessed from UI thread).
188 // |have_user_prefs_| will be false if no user_prefs are associated with this 189 // |have_user_prefs_| will be false if no user_prefs are associated with this
189 // instance. 190 // instance.
190 bool have_user_prefs_; 191 bool have_user_prefs_;
191 BooleanPrefMember block_third_party_cookies_; 192 BooleanPrefMember block_third_party_cookies_;
192 193
(...skipping 19 matching lines...) Expand all
212 rev_checking_enabled_.Init( 213 rev_checking_enabled_.Init(
213 prefs::kCertRevocationCheckingEnabled, local_state, local_state_callback); 214 prefs::kCertRevocationCheckingEnabled, local_state, local_state_callback);
214 ssl_version_min_.Init( 215 ssl_version_min_.Init(
215 prefs::kSSLVersionMin, local_state, local_state_callback); 216 prefs::kSSLVersionMin, local_state, local_state_callback);
216 ssl_version_max_.Init( 217 ssl_version_max_.Init(
217 prefs::kSSLVersionMax, local_state, local_state_callback); 218 prefs::kSSLVersionMax, local_state, local_state_callback);
218 channel_id_enabled_.Init( 219 channel_id_enabled_.Init(
219 prefs::kEnableOriginBoundCerts, local_state, local_state_callback); 220 prefs::kEnableOriginBoundCerts, local_state, local_state_callback);
220 ssl_record_splitting_disabled_.Init( 221 ssl_record_splitting_disabled_.Init(
221 prefs::kDisableSSLRecordSplitting, local_state, local_state_callback); 222 prefs::kDisableSSLRecordSplitting, local_state, local_state_callback);
223 ssl_version_min_preloaded_disabled_.Init(
224 prefs::kDisableSSLVersionMinPreloaded, local_state, local_state_callback);
222 225
223 local_state_change_registrar_.Init(local_state); 226 local_state_change_registrar_.Init(local_state);
224 local_state_change_registrar_.Add( 227 local_state_change_registrar_.Add(
225 prefs::kCipherSuiteBlacklist, local_state_callback); 228 prefs::kCipherSuiteBlacklist, local_state_callback);
226 229
227 OnDisabledCipherSuitesChange(local_state); 230 OnDisabledCipherSuitesChange(local_state);
228 231
229 if (user_prefs) { 232 if (user_prefs) {
230 PrefChangeRegistrar::NamedChangeCallback user_prefs_callback = base::Bind( 233 PrefChangeRegistrar::NamedChangeCallback user_prefs_callback = base::Bind(
231 &SSLConfigServiceManagerPref::OnPreferenceChanged, 234 &SSLConfigServiceManagerPref::OnPreferenceChanged,
(...skipping 21 matching lines...) Expand all
253 std::string version_min_str = 256 std::string version_min_str =
254 SSLProtocolVersionToString(default_config.version_min); 257 SSLProtocolVersionToString(default_config.version_min);
255 std::string version_max_str = 258 std::string version_max_str =
256 SSLProtocolVersionToString(default_config.version_max); 259 SSLProtocolVersionToString(default_config.version_max);
257 registry->RegisterStringPref(prefs::kSSLVersionMin, version_min_str); 260 registry->RegisterStringPref(prefs::kSSLVersionMin, version_min_str);
258 registry->RegisterStringPref(prefs::kSSLVersionMax, version_max_str); 261 registry->RegisterStringPref(prefs::kSSLVersionMax, version_max_str);
259 registry->RegisterBooleanPref(prefs::kEnableOriginBoundCerts, 262 registry->RegisterBooleanPref(prefs::kEnableOriginBoundCerts,
260 default_config.channel_id_enabled); 263 default_config.channel_id_enabled);
261 registry->RegisterBooleanPref(prefs::kDisableSSLRecordSplitting, 264 registry->RegisterBooleanPref(prefs::kDisableSSLRecordSplitting,
262 !default_config.false_start_enabled); 265 !default_config.false_start_enabled);
266 registry->RegisterBooleanPref(
267 prefs::kDisableSSLVersionMinPreloaded,
268 default_config.ssl_version_min_preloaded_disabled);
263 registry->RegisterListPref(prefs::kCipherSuiteBlacklist); 269 registry->RegisterListPref(prefs::kCipherSuiteBlacklist);
264 } 270 }
265 271
266 net::SSLConfigService* SSLConfigServiceManagerPref::Get() { 272 net::SSLConfigService* SSLConfigServiceManagerPref::Get() {
267 return ssl_config_service_; 273 return ssl_config_service_;
268 } 274 }
269 275
270 void SSLConfigServiceManagerPref::OnPreferenceChanged( 276 void SSLConfigServiceManagerPref::OnPreferenceChanged(
271 PrefService* prefs, 277 PrefService* prefs,
272 const std::string& pref_name_in) { 278 const std::string& pref_name_in) {
(...skipping 18 matching lines...) Expand all
291 new_config)); 297 new_config));
292 } 298 }
293 299
294 void SSLConfigServiceManagerPref::GetSSLConfigFromPrefs( 300 void SSLConfigServiceManagerPref::GetSSLConfigFromPrefs(
295 net::SSLConfig* config) { 301 net::SSLConfig* config) {
296 config->rev_checking_enabled = rev_checking_enabled_.GetValue(); 302 config->rev_checking_enabled = rev_checking_enabled_.GetValue();
297 std::string version_min_str = ssl_version_min_.GetValue(); 303 std::string version_min_str = ssl_version_min_.GetValue();
298 std::string version_max_str = ssl_version_max_.GetValue(); 304 std::string version_max_str = ssl_version_max_.GetValue();
299 config->version_min = net::SSLConfigService::default_version_min(); 305 config->version_min = net::SSLConfigService::default_version_min();
300 config->version_max = net::SSLConfigService::default_version_max(); 306 config->version_max = net::SSLConfigService::default_version_max();
301 uint16 version_min = SSLProtocolVersionFromString(version_min_str); 307 uint16 version_min = SSLProtocolVersionFromString(
302 uint16 version_max = SSLProtocolVersionFromString(version_max_str); 308 version_min_str);
309 uint16 version_max = SSLProtocolVersionFromString(
310 version_max_str);
wtc 2013/04/17 19:49:50 Why reformat these two lines?
thaidn_google 2013/04/17 22:16:07 Done.
303 if (version_min) { 311 if (version_min) {
304 // TODO(wtc): get the minimum SSL protocol version supported by the 312 // TODO(wtc): get the minimum SSL protocol version supported by the
305 // SSLClientSocket class. Right now it happens to be the same as the 313 // SSLClientSocket class. Right now it happens to be the same as the
306 // default minimum SSL protocol version because we enable all supported 314 // default minimum SSL protocol version because we enable all supported
307 // versions by default. 315 // versions by default.
308 uint16 supported_version_min = config->version_min; 316 uint16 supported_version_min = config->version_min;
309 config->version_min = std::max(supported_version_min, version_min); 317 config->version_min = std::max(supported_version_min, version_min);
310 } 318 }
311 if (version_max) { 319 if (version_max) {
312 // TODO(wtc): get the maximum SSL protocol version supported by the 320 // TODO(wtc): get the maximum SSL protocol version supported by the
313 // SSLClientSocket class. 321 // SSLClientSocket class.
314 uint16 supported_version_max = config->version_max; 322 uint16 supported_version_max = config->version_max;
315 config->version_max = std::min(supported_version_max, version_max); 323 config->version_max = std::min(supported_version_max, version_max);
316 } 324 }
317 config->disabled_cipher_suites = disabled_cipher_suites_; 325 config->disabled_cipher_suites = disabled_cipher_suites_;
318 config->channel_id_enabled = channel_id_enabled_.GetValue(); 326 config->channel_id_enabled = channel_id_enabled_.GetValue();
319 if (have_user_prefs_ && 327 if (have_user_prefs_ &&
320 (cookies_disabled_ || block_third_party_cookies_.GetValue())) 328 (cookies_disabled_ || block_third_party_cookies_.GetValue()))
321 config->channel_id_enabled = false; 329 config->channel_id_enabled = false;
322 // disabling False Start also happens to disable record splitting. 330 // disabling False Start also happens to disable record splitting.
323 config->false_start_enabled = !ssl_record_splitting_disabled_.GetValue(); 331 config->false_start_enabled = !ssl_record_splitting_disabled_.GetValue();
332 config->ssl_version_min_preloaded_disabled =
333 ssl_version_min_preloaded_disabled_.GetValue();
324 SSLConfigServicePref::SetSSLConfigFlags(config); 334 SSLConfigServicePref::SetSSLConfigFlags(config);
325 } 335 }
326 336
327 void SSLConfigServiceManagerPref::OnDisabledCipherSuitesChange( 337 void SSLConfigServiceManagerPref::OnDisabledCipherSuitesChange(
328 PrefService* local_state) { 338 PrefService* local_state) {
329 const ListValue* value = local_state->GetList(prefs::kCipherSuiteBlacklist); 339 const ListValue* value = local_state->GetList(prefs::kCipherSuiteBlacklist);
330 disabled_cipher_suites_ = ParseCipherSuites(ListValueToStringVector(value)); 340 disabled_cipher_suites_ = ParseCipherSuites(ListValueToStringVector(value));
331 } 341 }
332 342
333 void SSLConfigServiceManagerPref::OnDefaultContentSettingsChange( 343 void SSLConfigServiceManagerPref::OnDefaultContentSettingsChange(
(...skipping 15 matching lines...) Expand all
349 // static 359 // static
350 SSLConfigServiceManager* SSLConfigServiceManager::CreateDefaultManager( 360 SSLConfigServiceManager* SSLConfigServiceManager::CreateDefaultManager(
351 PrefService* local_state, PrefService* user_prefs) { 361 PrefService* local_state, PrefService* user_prefs) {
352 return new SSLConfigServiceManagerPref(local_state, user_prefs); 362 return new SSLConfigServiceManagerPref(local_state, user_prefs);
353 } 363 }
354 364
355 // static 365 // static
356 void SSLConfigServiceManager::RegisterPrefs(PrefRegistrySimple* registry) { 366 void SSLConfigServiceManager::RegisterPrefs(PrefRegistrySimple* registry) {
357 SSLConfigServiceManagerPref::RegisterPrefs(registry); 367 SSLConfigServiceManagerPref::RegisterPrefs(registry);
358 } 368 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/net/ssl_config_service_manager_pref_unittest.cc » ('j') | chrome/common/chrome_switches.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698