Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "chrome/browser/net/transport_security_persister.h" | 5 #include "chrome/browser/net/transport_security_persister.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 71 const char kExpiry[] = "expiry"; | 71 const char kExpiry[] = "expiry"; |
| 72 const char kDynamicSPKIHashesExpiry[] = "dynamic_spki_hashes_expiry"; | 72 const char kDynamicSPKIHashesExpiry[] = "dynamic_spki_hashes_expiry"; |
| 73 const char kStaticSPKIHashes[] = "static_spki_hashes"; | 73 const char kStaticSPKIHashes[] = "static_spki_hashes"; |
| 74 const char kPreloadedSPKIHashes[] = "preloaded_spki_hashes"; | 74 const char kPreloadedSPKIHashes[] = "preloaded_spki_hashes"; |
| 75 const char kDynamicSPKIHashes[] = "dynamic_spki_hashes"; | 75 const char kDynamicSPKIHashes[] = "dynamic_spki_hashes"; |
| 76 const char kForceHTTPS[] = "force-https"; | 76 const char kForceHTTPS[] = "force-https"; |
| 77 const char kStrict[] = "strict"; | 77 const char kStrict[] = "strict"; |
| 78 const char kDefault[] = "default"; | 78 const char kDefault[] = "default"; |
| 79 const char kPinningOnly[] = "pinning-only"; | 79 const char kPinningOnly[] = "pinning-only"; |
| 80 const char kCreated[] = "created"; | 80 const char kCreated[] = "created"; |
| 81 const char kSSLVersionMin[] = "ssl_version_min"; | |
| 82 const char kSSLVersion30[] = "sslv3.0"; | |
|
agl
2013/04/11 13:48:57
We already have a convention for these strings I'm
| |
| 83 const char kTLSVersion10[] = "tlsv1.0"; | |
| 84 const char kTLSVersion11[] = "tlsv1.1"; | |
| 85 const char kTLSVersion12[] = "tlsv1.2"; | |
| 81 | 86 |
| 82 } // namespace | 87 } // namespace |
| 83 | 88 |
| 84 class TransportSecurityPersister::Loader { | 89 class TransportSecurityPersister::Loader { |
| 85 public: | 90 public: |
| 86 Loader(const base::WeakPtr<TransportSecurityPersister>& persister, | 91 Loader(const base::WeakPtr<TransportSecurityPersister>& persister, |
| 87 const base::FilePath& path) | 92 const base::FilePath& path) |
| 88 : persister_(persister), | 93 : persister_(persister), |
| 89 path_(path), | 94 path_(path), |
| 90 state_valid_(false) { | 95 state_valid_(false) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 state.domain_state(); | 172 state.domain_state(); |
| 168 | 173 |
| 169 DictionaryValue* serialized = new DictionaryValue; | 174 DictionaryValue* serialized = new DictionaryValue; |
| 170 serialized->SetBoolean(kIncludeSubdomains, | 175 serialized->SetBoolean(kIncludeSubdomains, |
| 171 domain_state.include_subdomains); | 176 domain_state.include_subdomains); |
| 172 serialized->SetDouble(kCreated, domain_state.created.ToDoubleT()); | 177 serialized->SetDouble(kCreated, domain_state.created.ToDoubleT()); |
| 173 serialized->SetDouble(kExpiry, domain_state.upgrade_expiry.ToDoubleT()); | 178 serialized->SetDouble(kExpiry, domain_state.upgrade_expiry.ToDoubleT()); |
| 174 serialized->SetDouble(kDynamicSPKIHashesExpiry, | 179 serialized->SetDouble(kDynamicSPKIHashesExpiry, |
| 175 domain_state.dynamic_spki_hashes_expiry.ToDoubleT()); | 180 domain_state.dynamic_spki_hashes_expiry.ToDoubleT()); |
| 176 | 181 |
| 182 switch (domain_state.ssl_version_min) { | |
| 183 case net::SSL_CONNECTION_VERSION_SSL3: | |
| 184 serialized->SetString(kSSLVersionMin, "sslv3.0"); | |
| 185 break; | |
| 186 case net::SSL_CONNECTION_VERSION_TLS1: | |
| 187 serialized->SetString(kSSLVersionMin, "tlsv1.0"); | |
| 188 break; | |
| 189 case net::SSL_CONNECTION_VERSION_TLS1_1: | |
| 190 serialized->SetString(kSSLVersionMin, "tlsv1.1"); | |
| 191 break; | |
| 192 case net::SSL_CONNECTION_VERSION_TLS1_2: | |
| 193 serialized->SetString(kSSLVersionMin, "tlsv1.2"); | |
| 194 break; | |
| 195 default: | |
| 196 NOTREACHED() << "DomainState with unknown ssl_version_min"; | |
| 197 delete serialized; | |
| 198 continue; | |
| 199 } | |
| 200 | |
| 177 switch (domain_state.upgrade_mode) { | 201 switch (domain_state.upgrade_mode) { |
| 178 case TransportSecurityState::DomainState::MODE_FORCE_HTTPS: | 202 case TransportSecurityState::DomainState::MODE_FORCE_HTTPS: |
| 179 serialized->SetString(kMode, kForceHTTPS); | 203 serialized->SetString(kMode, kForceHTTPS); |
| 180 break; | 204 break; |
| 181 case TransportSecurityState::DomainState::MODE_DEFAULT: | 205 case TransportSecurityState::DomainState::MODE_DEFAULT: |
| 182 serialized->SetString(kMode, kDefault); | 206 serialized->SetString(kMode, kDefault); |
| 183 break; | 207 break; |
| 184 default: | 208 default: |
| 185 NOTREACHED() << "DomainState with unknown mode"; | 209 NOTREACHED() << "DomainState with unknown mode"; |
| 186 delete serialized; | 210 delete serialized; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 const ListValue* pins_list = NULL; | 286 const ListValue* pins_list = NULL; |
| 263 // preloaded_spki_hashes is a legacy synonym for static_spki_hashes. | 287 // preloaded_spki_hashes is a legacy synonym for static_spki_hashes. |
| 264 if (parsed->GetList(kStaticSPKIHashes, &pins_list)) | 288 if (parsed->GetList(kStaticSPKIHashes, &pins_list)) |
| 265 SPKIHashesFromListValue(*pins_list, &domain_state.static_spki_hashes); | 289 SPKIHashesFromListValue(*pins_list, &domain_state.static_spki_hashes); |
| 266 else if (parsed->GetList(kPreloadedSPKIHashes, &pins_list)) | 290 else if (parsed->GetList(kPreloadedSPKIHashes, &pins_list)) |
| 267 SPKIHashesFromListValue(*pins_list, &domain_state.static_spki_hashes); | 291 SPKIHashesFromListValue(*pins_list, &domain_state.static_spki_hashes); |
| 268 | 292 |
| 269 if (parsed->GetList(kDynamicSPKIHashes, &pins_list)) | 293 if (parsed->GetList(kDynamicSPKIHashes, &pins_list)) |
| 270 SPKIHashesFromListValue(*pins_list, &domain_state.dynamic_spki_hashes); | 294 SPKIHashesFromListValue(*pins_list, &domain_state.dynamic_spki_hashes); |
| 271 | 295 |
| 296 std::string ssl_version_min; | |
| 297 if (parsed->GetString(kSSLVersionMin, &ssl_version_min)) { | |
| 298 if (ssl_version_min == kSSLVersion30) { | |
| 299 domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_SSL3; | |
| 300 } else if (ssl_version_min == kTLSVersion10) { | |
| 301 domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_TLS1; | |
| 302 } else if (ssl_version_min == kTLSVersion11) { | |
| 303 domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_TLS1_1; | |
| 304 } else if (ssl_version_min == kTLSVersion12) { | |
| 305 domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_TLS1_2; | |
| 306 } | |
| 307 } | |
| 308 | |
| 272 if (mode_string == kForceHTTPS || mode_string == kStrict) { | 309 if (mode_string == kForceHTTPS || mode_string == kStrict) { |
| 273 domain_state.upgrade_mode = | 310 domain_state.upgrade_mode = |
| 274 TransportSecurityState::DomainState::MODE_FORCE_HTTPS; | 311 TransportSecurityState::DomainState::MODE_FORCE_HTTPS; |
| 275 } else if (mode_string == kDefault || mode_string == kPinningOnly) { | 312 } else if (mode_string == kDefault || mode_string == kPinningOnly) { |
| 276 domain_state.upgrade_mode = | 313 domain_state.upgrade_mode = |
| 277 TransportSecurityState::DomainState::MODE_DEFAULT; | 314 TransportSecurityState::DomainState::MODE_DEFAULT; |
| 278 } else { | 315 } else { |
| 279 LOG(WARNING) << "Unknown TransportSecurityState mode string " | 316 LOG(WARNING) << "Unknown TransportSecurityState mode string " |
| 280 << mode_string << " found for entry " << i.key() | 317 << mode_string << " found for entry " << i.key() |
| 281 << "; skipping entry"; | 318 << "; skipping entry"; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 321 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 358 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 322 | 359 |
| 323 bool dirty = false; | 360 bool dirty = false; |
| 324 if (!LoadEntries(state, &dirty)) { | 361 if (!LoadEntries(state, &dirty)) { |
| 325 LOG(ERROR) << "Failed to deserialize state: " << state; | 362 LOG(ERROR) << "Failed to deserialize state: " << state; |
| 326 return; | 363 return; |
| 327 } | 364 } |
| 328 if (dirty) | 365 if (dirty) |
| 329 StateIsDirty(transport_security_state_); | 366 StateIsDirty(transport_security_state_); |
| 330 } | 367 } |
| OLD | NEW |