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 |