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

Side by Side Diff: net/base/cert_database.h

Issue 9940001: Fix imported server certs being distrusted in NSS 3.13. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fixes Created 8 years, 7 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 | Annotate | Revision Log
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 4
5 #ifndef NET_BASE_CERT_DATABASE_H_ 5 #ifndef NET_BASE_CERT_DATABASE_H_
6 #define NET_BASE_CERT_DATABASE_H_ 6 #define NET_BASE_CERT_DATABASE_H_
7 #pragma once 7 #pragma once
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 // Constants that define which usages a certificate is trusted for. 74 // Constants that define which usages a certificate is trusted for.
75 // They are used in combination with CertType to specify trust for each type 75 // They are used in combination with CertType to specify trust for each type
76 // of certificate. 76 // of certificate.
77 // For a CA_CERT, they specify that the CA is trusted for issuing server and 77 // For a CA_CERT, they specify that the CA is trusted for issuing server and
78 // client certs of each type. 78 // client certs of each type.
79 // For SERVER_CERT, only TRUSTED_SSL makes sense, and specifies the cert is 79 // For SERVER_CERT, only TRUSTED_SSL makes sense, and specifies the cert is
80 // trusted as a server. 80 // trusted as a server.
81 // For EMAIL_CERT, only TRUSTED_EMAIL makes sense, and specifies the cert is 81 // For EMAIL_CERT, only TRUSTED_EMAIL makes sense, and specifies the cert is
82 // trusted for email. 82 // trusted for email.
83 // EXPLICIT_DISTRUST specifies that the cert should not be trusted, regardless
84 // of whether it would otherwise inherit trust from the issuer chain.
wtc 2012/05/16 23:37:12 The difference between UNTRUSTED and EXPLICIT_DIST
mattm 2012/05/18 03:40:54 Done.
83 // NOTE: The actual constants are defined using an enum instead of static 85 // NOTE: The actual constants are defined using an enum instead of static
84 // consts due to compilation/linkage constraints with template functions. 86 // consts due to compilation/linkage constraints with template functions.
85 typedef uint32 TrustBits; 87 typedef uint32 TrustBits;
86 enum { 88 enum {
87 UNTRUSTED = 0, 89 UNTRUSTED = 0,
88 TRUSTED_SSL = 1 << 0, 90 TRUSTED_SSL = 1 << 0,
89 TRUSTED_EMAIL = 1 << 1, 91 TRUSTED_EMAIL = 1 << 1,
90 TRUSTED_OBJ_SIGN = 1 << 2, 92 TRUSTED_OBJ_SIGN = 1 << 2,
93 EXPLICIT_DISTRUST = 1 << 3,
91 }; 94 };
92 95
93 CertDatabase(); 96 CertDatabase();
94 97
95 // Check whether this is a valid user cert that we have the private key for. 98 // Check whether this is a valid user cert that we have the private key for.
96 // Returns OK or a network error code such as ERR_CERT_CONTAINS_ERRORS. 99 // Returns OK or a network error code such as ERR_CERT_CONTAINS_ERRORS.
97 int CheckUserCert(X509Certificate* cert); 100 int CheckUserCert(X509Certificate* cert);
98 101
99 // Store user (client) certificate. Assumes CheckUserCert has already passed. 102 // Store user (client) certificate. Assumes CheckUserCert has already passed.
100 // Returns OK, or ERR_ADD_USER_CERT_FAILED if there was a problem saving to 103 // Returns OK, or ERR_ADD_USER_CERT_FAILED if there was a problem saving to
101 // the platform cert database, or possibly other network error codes. 104 // the platform cert database, or possibly other network error codes.
102 int AddUserCert(X509Certificate* cert); 105 int AddUserCert(X509Certificate* cert);
103 106
104 #if defined(USE_NSS) || defined(USE_OPENSSL) 107 #if defined(USE_NSS)
105 // Get a list of unique certificates in the certificate database (one 108 // Get a list of unique certificates in the certificate database (one
106 // instance of all certificates). 109 // instance of all certificates).
107 void ListCerts(CertificateList* certs); 110 void ListCerts(CertificateList* certs);
108 111
109 // Get the default module for public key data. 112 // Get the default module for public key data.
110 // The returned pointer must be stored in a scoped_refptr<CryptoModule>. 113 // The returned pointer must be stored in a scoped_refptr<CryptoModule>.
111 CryptoModule* GetPublicModule() const; 114 CryptoModule* GetPublicModule() const;
112 115
113 // Get the default module for private key or mixed private/public key data. 116 // Get the default module for private key or mixed private/public key data.
114 // The returned pointer must be stored in a scoped_refptr<CryptoModule>. 117 // The returned pointer must be stored in a scoped_refptr<CryptoModule>.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 // will be listed in |not_imported|. 151 // will be listed in |not_imported|.
149 // Returns false if there is an internal error, otherwise true is returned and 152 // Returns false if there is an internal error, otherwise true is returned and
150 // |not_imported| should be checked for any certificates that were not 153 // |not_imported| should be checked for any certificates that were not
151 // imported. 154 // imported.
152 bool ImportCACerts(const CertificateList& certificates, 155 bool ImportCACerts(const CertificateList& certificates,
153 TrustBits trust_bits, 156 TrustBits trust_bits,
154 ImportCertFailureList* not_imported); 157 ImportCertFailureList* not_imported);
155 158
156 // Import server certificate. The first cert should be the server cert. Any 159 // Import server certificate. The first cert should be the server cert. Any
157 // additional certs should be intermediate/CA certs and will be imported but 160 // additional certs should be intermediate/CA certs and will be imported but
158 // not given any trust. 161 // not given any trust.
wtc 2012/05/16 23:37:12 The new trust_bits parameter should be documented.
mattm 2012/05/18 03:40:54 When using the "import" option in the server tab o
159 // Any certificates that could not be imported will be listed in 162 // Any certificates that could not be imported will be listed in
160 // |not_imported|. 163 // |not_imported|.
161 // Returns false if there is an internal error, otherwise true is returned and 164 // Returns false if there is an internal error, otherwise true is returned and
162 // |not_imported| should be checked for any certificates that were not 165 // |not_imported| should be checked for any certificates that were not
163 // imported. 166 // imported.
164 bool ImportServerCert(const CertificateList& certificates, 167 bool ImportServerCert(const CertificateList& certificates,
168 TrustBits trust_bits,
165 ImportCertFailureList* not_imported); 169 ImportCertFailureList* not_imported);
166 170
167 // Get trust bits for certificate. 171 // Get trust bits for certificate.
168 TrustBits GetCertTrust(const X509Certificate* cert, CertType type) const; 172 TrustBits GetCertTrust(const X509Certificate* cert, CertType type) const;
169 173
170 // IsUntrusted returns true if |cert| is specifically untrusted. These 174 // IsUntrusted returns true if |cert| is specifically untrusted. These
171 // certificates are stored in the database for the specific purpose of 175 // certificates are stored in the database for the specific purpose of
172 // rejecting them. 176 // rejecting them.
173 bool IsUntrusted(const X509Certificate* cert) const; 177 bool IsUntrusted(const X509Certificate* cert) const;
174 178
(...skipping 26 matching lines...) Expand all
201 static void NotifyObserversOfUserCertAdded(const X509Certificate* cert); 205 static void NotifyObserversOfUserCertAdded(const X509Certificate* cert);
202 static void NotifyObserversOfUserCertRemoved(const X509Certificate* cert); 206 static void NotifyObserversOfUserCertRemoved(const X509Certificate* cert);
203 static void NotifyObserversOfCertTrustChanged(const X509Certificate* cert); 207 static void NotifyObserversOfCertTrustChanged(const X509Certificate* cert);
204 208
205 DISALLOW_COPY_AND_ASSIGN(CertDatabase); 209 DISALLOW_COPY_AND_ASSIGN(CertDatabase);
206 }; 210 };
207 211
208 } // namespace net 212 } // namespace net
209 213
210 #endif // NET_BASE_CERT_DATABASE_H_ 214 #endif // NET_BASE_CERT_DATABASE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698