OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 // | 49 // |
50 // Though cipher suites are sent in TLS as "uint8 CipherSuite[2]", in | 50 // Though cipher suites are sent in TLS as "uint8 CipherSuite[2]", in |
51 // big-endian form, they should be declared in host byte order, with the | 51 // big-endian form, they should be declared in host byte order, with the |
52 // first uint8 occupying the most significant byte. | 52 // first uint8 occupying the most significant byte. |
53 // Ex: To disable TLS_RSA_WITH_RC4_128_MD5, specify 0x0004, while to | 53 // Ex: To disable TLS_RSA_WITH_RC4_128_MD5, specify 0x0004, while to |
54 // disable TLS_ECDH_ECDSA_WITH_RC4_128_SHA, specify 0xC002. | 54 // disable TLS_ECDH_ECDSA_WITH_RC4_128_SHA, specify 0xC002. |
55 // | 55 // |
56 // TODO(rsleevi): Not implemented when using Schannel. | 56 // TODO(rsleevi): Not implemented when using Schannel. |
57 std::vector<uint16> disabled_cipher_suites; | 57 std::vector<uint16> disabled_cipher_suites; |
58 | 58 |
59 // True if we allow this connection to be MITM attacked. This sounds a little | |
60 // worse than it is: large networks sometimes MITM attack all SSL connections | |
61 // on egress. We want to know this because we might not have the end-to-end | |
62 // connection that we believe that we have based on the hostname. Therefore, | |
63 // certain certificate checks can't be performed and we can't use outside | |
64 // knowledge about whether the server has the renegotiation extension. | |
65 bool mitm_proxies_allowed; | |
66 | |
67 bool false_start_enabled; // True if we'll use TLS False Start. | 59 bool false_start_enabled; // True if we'll use TLS False Start. |
68 | 60 |
69 // TODO(wtc): move the following members to a new SSLParams structure. They | 61 // TODO(wtc): move the following members to a new SSLParams structure. They |
70 // are not SSL configuration settings. | 62 // are not SSL configuration settings. |
71 | 63 |
72 struct CertAndStatus { | 64 struct CertAndStatus { |
73 CertAndStatus(); | 65 CertAndStatus(); |
74 ~CertAndStatus(); | 66 ~CertAndStatus(); |
75 | 67 |
76 scoped_refptr<X509Certificate> cert; | 68 scoped_refptr<X509Certificate> cert; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 // Create an instance of SSLConfigService which retrieves the configuration | 120 // Create an instance of SSLConfigService which retrieves the configuration |
129 // from the system SSL configuration, or an instance of | 121 // from the system SSL configuration, or an instance of |
130 // SSLConfigServiceDefaults if the current system does not have a system SSL | 122 // SSLConfigServiceDefaults if the current system does not have a system SSL |
131 // configuration. Note: this does not handle SSLConfigService implementations | 123 // configuration. Note: this does not handle SSLConfigService implementations |
132 // that are not native to their platform, such as preference-backed ones. | 124 // that are not native to their platform, such as preference-backed ones. |
133 static SSLConfigService* CreateSystemSSLConfigService(); | 125 static SSLConfigService* CreateSystemSSLConfigService(); |
134 | 126 |
135 // May not be thread-safe, should only be called on the IO thread. | 127 // May not be thread-safe, should only be called on the IO thread. |
136 virtual void GetSSLConfig(SSLConfig* config) = 0; | 128 virtual void GetSSLConfig(SSLConfig* config) = 0; |
137 | 129 |
138 // Returns true if the given hostname is known to be 'strict'. This means | |
139 // that we will require the renegotiation extension and will always use TLS | |
140 // (no SSLv3 fallback). | |
141 // | |
142 // If you wish to add an element to this list, file a bug at | |
143 // http://crbug.com and email the link to agl AT chromium DOT org. | |
144 static bool IsKnownStrictTLSServer(const std::string& hostname); | |
145 | |
146 // Returns true if the given hostname is known to be incompatible with TLS | 130 // Returns true if the given hostname is known to be incompatible with TLS |
147 // False Start. | 131 // False Start. |
148 static bool IsKnownFalseStartIncompatibleServer(const std::string& hostname); | 132 static bool IsKnownFalseStartIncompatibleServer(const std::string& hostname); |
149 | 133 |
150 // Enables the acceptance of self-signed certificates which contain an | 134 // Enables the acceptance of self-signed certificates which contain an |
151 // embedded DNSSEC chain proving their validity. | 135 // embedded DNSSEC chain proving their validity. |
152 static void EnableDNSSEC(); | 136 static void EnableDNSSEC(); |
153 static bool dnssec_enabled(); | 137 static bool dnssec_enabled(); |
154 | 138 |
155 // Enables Snap Start, an experiemental SSL/TLS extension for zero round | 139 // Enables Snap Start, an experiemental SSL/TLS extension for zero round |
156 // trip handshakes. | 140 // trip handshakes. |
157 static void EnableSnapStart(); | 141 static void EnableSnapStart(); |
158 static bool snap_start_enabled(); | 142 static bool snap_start_enabled(); |
159 | 143 |
160 // Sets a global flag which allows SSL connections to be MITM attacked. See | |
161 // the comment about this flag in |SSLConfig|. | |
162 static void AllowMITMProxies(); | |
163 static bool mitm_proxies_allowed(); | |
164 | |
165 // Disables False Start in SSL connections. | 144 // Disables False Start in SSL connections. |
166 static void DisableFalseStart(); | 145 static void DisableFalseStart(); |
167 // True if we use False Start for SSL and TLS. | 146 // True if we use False Start for SSL and TLS. |
168 static bool false_start_enabled(); | 147 static bool false_start_enabled(); |
169 | 148 |
170 // Enables DNS side checks for certificates. | 149 // Enables DNS side checks for certificates. |
171 static void EnableDNSCertProvenanceChecking(); | 150 static void EnableDNSCertProvenanceChecking(); |
172 static bool dns_cert_provenance_checking_enabled(); | 151 static bool dns_cert_provenance_checking_enabled(); |
173 | 152 |
174 // Add an observer of this service. | 153 // Add an observer of this service. |
(...skipping 14 matching lines...) Expand all Loading... |
189 void ProcessConfigUpdate(const SSLConfig& orig_config, | 168 void ProcessConfigUpdate(const SSLConfig& orig_config, |
190 const SSLConfig& new_config); | 169 const SSLConfig& new_config); |
191 | 170 |
192 private: | 171 private: |
193 ObserverList<Observer> observer_list_; | 172 ObserverList<Observer> observer_list_; |
194 }; | 173 }; |
195 | 174 |
196 } // namespace net | 175 } // namespace net |
197 | 176 |
198 #endif // NET_BASE_SSL_CONFIG_SERVICE_H_ | 177 #endif // NET_BASE_SSL_CONFIG_SERVICE_H_ |
OLD | NEW |