OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 #ifndef NET_BASE_SSL_CONFIG_SERVICE_H_ | 5 #ifndef NET_BASE_SSL_CONFIG_SERVICE_H_ |
6 #define NET_BASE_SSL_CONFIG_SERVICE_H_ | 6 #define NET_BASE_SSL_CONFIG_SERVICE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/observer_list.h" | 11 #include "base/observer_list.h" |
12 #include "base/ref_counted.h" | 12 #include "base/ref_counted.h" |
13 #include "net/base/x509_certificate.h" | 13 #include "net/base/x509_certificate.h" |
14 | 14 |
15 namespace net { | 15 namespace net { |
16 | 16 |
17 // A collection of SSL-related configuration settings. | 17 // A collection of SSL-related configuration settings. |
18 struct SSLConfig { | 18 struct SSLConfig { |
19 // Default to revocation checking. | 19 // Default to revocation checking. |
20 // Default to SSL 2.0 off, SSL 3.0 on, and TLS 1.0 on. | 20 // Default to SSL 2.0 off, SSL 3.0 on, and TLS 1.0 on. |
21 SSLConfig() | 21 SSLConfig(); |
22 : rev_checking_enabled(true), ssl2_enabled(false), ssl3_enabled(true), | 22 ~SSLConfig(); |
23 tls1_enabled(true), dnssec_enabled(false), mitm_proxies_allowed(false), | |
24 false_start_enabled(true), send_client_cert(false), | |
25 verify_ev_cert(false), ssl3_fallback(false) { | |
26 } | |
27 | 23 |
28 bool rev_checking_enabled; // True if server certificate revocation | 24 bool rev_checking_enabled; // True if server certificate revocation |
29 // checking is enabled. | 25 // checking is enabled. |
30 bool ssl2_enabled; // True if SSL 2.0 is enabled. | 26 bool ssl2_enabled; // True if SSL 2.0 is enabled. |
31 bool ssl3_enabled; // True if SSL 3.0 is enabled. | 27 bool ssl3_enabled; // True if SSL 3.0 is enabled. |
32 bool tls1_enabled; // True if TLS 1.0 is enabled. | 28 bool tls1_enabled; // True if TLS 1.0 is enabled. |
33 bool dnssec_enabled; // True if we'll accept DNSSEC chains in certificates. | 29 bool dnssec_enabled; // True if we'll accept DNSSEC chains in certificates. |
34 | 30 |
35 // True if we allow this connection to be MITM attacked. This sounds a little | 31 // True if we allow this connection to be MITM attacked. This sounds a little |
36 // worse than it is: large networks sometimes MITM attack all SSL connections | 32 // worse than it is: large networks sometimes MITM attack all SSL connections |
37 // on egress. We want to know this because we might not have the end-to-end | 33 // on egress. We want to know this because we might not have the end-to-end |
38 // connection that we believe that we have based on the hostname. Therefore, | 34 // connection that we believe that we have based on the hostname. Therefore, |
39 // certain certificate checks can't be performed and we can't use outside | 35 // certain certificate checks can't be performed and we can't use outside |
40 // knowledge about whether the server has the renegotiation extension. | 36 // knowledge about whether the server has the renegotiation extension. |
41 bool mitm_proxies_allowed; | 37 bool mitm_proxies_allowed; |
42 | 38 |
43 bool false_start_enabled; // True if we'll use TLS False Start. | 39 bool false_start_enabled; // True if we'll use TLS False Start. |
44 | 40 |
45 // TODO(wtc): move the following members to a new SSLParams structure. They | 41 // TODO(wtc): move the following members to a new SSLParams structure. They |
46 // are not SSL configuration settings. | 42 // are not SSL configuration settings. |
47 | 43 |
48 struct CertAndStatus { | 44 struct CertAndStatus { |
49 scoped_refptr<X509Certificate> cert; | 45 scoped_refptr<X509Certificate> cert; |
50 int cert_status; | 46 int cert_status; |
51 }; | 47 }; |
52 | 48 |
53 // Returns true if |cert| is one of the certs in |allowed_bad_certs|. | 49 // Returns true if |cert| is one of the certs in |allowed_bad_certs|. |
54 // TODO(wtc): Move this to a .cc file. ssl_config_service.cc is Windows | 50 bool IsAllowedBadCert(X509Certificate* cert) const; |
55 // only right now, so I can't move it there. | |
56 bool IsAllowedBadCert(X509Certificate* cert) const { | |
57 for (size_t i = 0; i < allowed_bad_certs.size(); ++i) { | |
58 if (cert == allowed_bad_certs[i].cert) | |
59 return true; | |
60 } | |
61 return false; | |
62 } | |
63 | 51 |
64 // Add any known-bad SSL certificate (with its cert status) to | 52 // Add any known-bad SSL certificate (with its cert status) to |
65 // |allowed_bad_certs| that should not trigger an ERR_CERT_* error when | 53 // |allowed_bad_certs| that should not trigger an ERR_CERT_* error when |
66 // calling SSLClientSocket::Connect. This would normally be done in | 54 // calling SSLClientSocket::Connect. This would normally be done in |
67 // response to the user explicitly accepting the bad certificate. | 55 // response to the user explicitly accepting the bad certificate. |
68 std::vector<CertAndStatus> allowed_bad_certs; | 56 std::vector<CertAndStatus> allowed_bad_certs; |
69 | 57 |
70 // True if we should send client_cert to the server. | 58 // True if we should send client_cert to the server. |
71 bool send_client_cert; | 59 bool send_client_cert; |
72 | 60 |
(...skipping 28 matching lines...) Expand all Loading... |
101 // rev_checking_enabled | 89 // rev_checking_enabled |
102 // ssl2_enabled | 90 // ssl2_enabled |
103 // ssl3_enabled | 91 // ssl3_enabled |
104 // tls1_enabled | 92 // tls1_enabled |
105 virtual void OnSSLConfigChanged() = 0; | 93 virtual void OnSSLConfigChanged() = 0; |
106 | 94 |
107 protected: | 95 protected: |
108 virtual ~Observer() {} | 96 virtual ~Observer() {} |
109 }; | 97 }; |
110 | 98 |
111 SSLConfigService() | 99 SSLConfigService(); |
112 : observer_list_(ObserverList<Observer>::NOTIFY_EXISTING_ONLY) {} | |
113 | 100 |
114 // Create an instance of SSLConfigService which retrieves the configuration | 101 // Create an instance of SSLConfigService which retrieves the configuration |
115 // from the system SSL configuration, or an instance of | 102 // from the system SSL configuration, or an instance of |
116 // SSLConfigServiceDefaults if the current system does not have a system SSL | 103 // SSLConfigServiceDefaults if the current system does not have a system SSL |
117 // configuration. Note: this does not handle SSLConfigService implementations | 104 // configuration. Note: this does not handle SSLConfigService implementations |
118 // that are not native to their platform, such as preference-backed ones. | 105 // that are not native to their platform, such as preference-backed ones. |
119 static SSLConfigService* CreateSystemSSLConfigService(); | 106 static SSLConfigService* CreateSystemSSLConfigService(); |
120 | 107 |
121 // May not be thread-safe, should only be called on the IO thread. | 108 // May not be thread-safe, should only be called on the IO thread. |
122 virtual void GetSSLConfig(SSLConfig* config) = 0; | 109 virtual void GetSSLConfig(SSLConfig* config) = 0; |
(...skipping 27 matching lines...) Expand all Loading... |
150 | 137 |
151 // Add an observer of this service. | 138 // Add an observer of this service. |
152 void AddObserver(Observer* observer); | 139 void AddObserver(Observer* observer); |
153 | 140 |
154 // Remove an observer of this service. | 141 // Remove an observer of this service. |
155 void RemoveObserver(Observer* observer); | 142 void RemoveObserver(Observer* observer); |
156 | 143 |
157 protected: | 144 protected: |
158 friend class base::RefCountedThreadSafe<SSLConfigService>; | 145 friend class base::RefCountedThreadSafe<SSLConfigService>; |
159 | 146 |
160 virtual ~SSLConfigService() {} | 147 virtual ~SSLConfigService(); |
161 | 148 |
162 // SetFlags sets the values of several flags based on global configuration. | 149 // SetFlags sets the values of several flags based on global configuration. |
163 static void SetSSLConfigFlags(SSLConfig*); | 150 static void SetSSLConfigFlags(SSLConfig*); |
164 | 151 |
165 // Process before/after config update. | 152 // Process before/after config update. |
166 void ProcessConfigUpdate(const SSLConfig& orig_config, | 153 void ProcessConfigUpdate(const SSLConfig& orig_config, |
167 const SSLConfig& new_config); | 154 const SSLConfig& new_config); |
168 | 155 |
169 private: | 156 private: |
170 ObserverList<Observer> observer_list_; | 157 ObserverList<Observer> observer_list_; |
171 }; | 158 }; |
172 | 159 |
173 } // namespace net | 160 } // namespace net |
174 | 161 |
175 #endif // NET_BASE_SSL_CONFIG_SERVICE_H_ | 162 #endif // NET_BASE_SSL_CONFIG_SERVICE_H_ |
OLD | NEW |