| 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 "net/cert/cert_verify_proc.h" | 5 #include "net/cert/cert_verify_proc.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 using base::HexEncode; | 36 using base::HexEncode; |
| 37 | 37 |
| 38 namespace net { | 38 namespace net { |
| 39 | 39 |
| 40 namespace { | 40 namespace { |
| 41 | 41 |
| 42 // A certificate for www.paypal.com with a NULL byte in the common name. | 42 // A certificate for www.paypal.com with a NULL byte in the common name. |
| 43 // From http://www.gossamer-threads.com/lists/fulldisc/full-disclosure/70363 | 43 // From http://www.gossamer-threads.com/lists/fulldisc/full-disclosure/70363 |
| 44 unsigned char paypal_null_fingerprint[] = { | 44 unsigned char paypal_null_fingerprint[] = { |
| 45 0x4c, 0x88, 0x9e, 0x28, 0xd7, 0x7a, 0x44, 0x1e, 0x13, 0xf2, 0x6a, 0xba, | 45 0x4c, 0x88, 0x9e, 0x28, 0xd7, 0x7a, 0x44, 0x1e, 0x13, 0xf2, |
| 46 0x1f, 0xe8, 0x1b, 0xd6, 0xab, 0x7b, 0xe8, 0xd7 | 46 0x6a, 0xba, 0x1f, 0xe8, 0x1b, 0xd6, 0xab, 0x7b, 0xe8, 0xd7}; |
| 47 }; | |
| 48 | 47 |
| 49 // Mock CertVerifyProc that will set |verify_result->is_issued_by_known_root| | 48 // Mock CertVerifyProc that will set |verify_result->is_issued_by_known_root| |
| 50 // for all certificates that are Verified. | 49 // for all certificates that are Verified. |
| 51 class WellKnownCaCertVerifyProc : public CertVerifyProc { | 50 class WellKnownCaCertVerifyProc : public CertVerifyProc { |
| 52 public: | 51 public: |
| 53 // Initialize a CertVerifyProc that will set | 52 // Initialize a CertVerifyProc that will set |
| 54 // |verify_result->is_issued_by_known_root| to |is_well_known|. | 53 // |verify_result->is_issued_by_known_root| to |is_well_known|. |
| 55 explicit WellKnownCaCertVerifyProc(bool is_well_known) | 54 explicit WellKnownCaCertVerifyProc(bool is_well_known) |
| 56 : is_well_known_(is_well_known) {} | 55 : is_well_known_(is_well_known) {} |
| 57 | 56 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 // http://crbug.com/361166 | 99 // http://crbug.com/361166 |
| 101 return false; | 100 return false; |
| 102 #endif | 101 #endif |
| 103 return true; | 102 return true; |
| 104 } | 103 } |
| 105 | 104 |
| 106 } // namespace | 105 } // namespace |
| 107 | 106 |
| 108 class CertVerifyProcTest : public testing::Test { | 107 class CertVerifyProcTest : public testing::Test { |
| 109 public: | 108 public: |
| 110 CertVerifyProcTest() | 109 CertVerifyProcTest() : verify_proc_(CertVerifyProc::CreateDefault()) {} |
| 111 : verify_proc_(CertVerifyProc::CreateDefault()) { | |
| 112 } | |
| 113 virtual ~CertVerifyProcTest() {} | 110 virtual ~CertVerifyProcTest() {} |
| 114 | 111 |
| 115 protected: | 112 protected: |
| 116 bool SupportsAdditionalTrustAnchors() { | 113 bool SupportsAdditionalTrustAnchors() { |
| 117 return verify_proc_->SupportsAdditionalTrustAnchors(); | 114 return verify_proc_->SupportsAdditionalTrustAnchors(); |
| 118 } | 115 } |
| 119 | 116 |
| 120 int Verify(X509Certificate* cert, | 117 int Verify(X509Certificate* cert, |
| 121 const std::string& hostname, | 118 const std::string& hostname, |
| 122 int flags, | 119 int flags, |
| 123 CRLSet* crl_set, | 120 CRLSet* crl_set, |
| 124 const CertificateList& additional_trust_anchors, | 121 const CertificateList& additional_trust_anchors, |
| 125 CertVerifyResult* verify_result) { | 122 CertVerifyResult* verify_result) { |
| 126 return verify_proc_->Verify(cert, hostname, flags, crl_set, | 123 return verify_proc_->Verify(cert, |
| 127 additional_trust_anchors, verify_result); | 124 hostname, |
| 125 flags, |
| 126 crl_set, |
| 127 additional_trust_anchors, |
| 128 verify_result); |
| 128 } | 129 } |
| 129 | 130 |
| 130 const CertificateList empty_cert_list_; | 131 const CertificateList empty_cert_list_; |
| 131 scoped_refptr<CertVerifyProc> verify_proc_; | 132 scoped_refptr<CertVerifyProc> verify_proc_; |
| 132 }; | 133 }; |
| 133 | 134 |
| 134 TEST_F(CertVerifyProcTest, DISABLED_WithoutRevocationChecking) { | 135 TEST_F(CertVerifyProcTest, DISABLED_WithoutRevocationChecking) { |
| 135 // Check that verification without revocation checking works. | 136 // Check that verification without revocation checking works. |
| 136 CertificateList certs = CreateCertificateListFromFile( | 137 CertificateList certs = |
| 137 GetTestCertsDirectory(), | 138 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 138 "googlenew.chain.pem", | 139 "googlenew.chain.pem", |
| 139 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); | 140 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); |
| 140 | 141 |
| 141 X509Certificate::OSCertHandles intermediates; | 142 X509Certificate::OSCertHandles intermediates; |
| 142 intermediates.push_back(certs[1]->os_cert_handle()); | 143 intermediates.push_back(certs[1]->os_cert_handle()); |
| 143 | 144 |
| 144 scoped_refptr<X509Certificate> google_full_chain = | 145 scoped_refptr<X509Certificate> google_full_chain = |
| 145 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 146 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), |
| 146 intermediates); | 147 intermediates); |
| 147 | 148 |
| 148 CertVerifyResult verify_result; | 149 CertVerifyResult verify_result; |
| 149 EXPECT_EQ(OK, | 150 EXPECT_EQ(OK, |
| 150 Verify(google_full_chain.get(), | 151 Verify(google_full_chain.get(), |
| 151 "www.google.com", | 152 "www.google.com", |
| 152 0 /* flags */, | 153 0 /* flags */, |
| 153 NULL, | 154 NULL, |
| 154 empty_cert_list_, | 155 empty_cert_list_, |
| 155 &verify_result)); | 156 &verify_result)); |
| 156 } | 157 } |
| 157 | 158 |
| 158 #if defined(OS_ANDROID) || defined(USE_OPENSSL_CERTS) | 159 #if defined(OS_ANDROID) || defined(USE_OPENSSL_CERTS) |
| 159 // TODO(jnd): http://crbug.com/117478 - EV verification is not yet supported. | 160 // TODO(jnd): http://crbug.com/117478 - EV verification is not yet supported. |
| 160 #define MAYBE_EVVerification DISABLED_EVVerification | 161 #define MAYBE_EVVerification DISABLED_EVVerification |
| 161 #else | 162 #else |
| 162 #define MAYBE_EVVerification EVVerification | 163 #define MAYBE_EVVerification EVVerification |
| 163 #endif | 164 #endif |
| 164 TEST_F(CertVerifyProcTest, MAYBE_EVVerification) { | 165 TEST_F(CertVerifyProcTest, MAYBE_EVVerification) { |
| 165 CertificateList certs = CreateCertificateListFromFile( | 166 CertificateList certs = |
| 166 GetTestCertsDirectory(), | 167 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 167 "comodo.chain.pem", | 168 "comodo.chain.pem", |
| 168 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); | 169 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); |
| 169 ASSERT_EQ(3U, certs.size()); | 170 ASSERT_EQ(3U, certs.size()); |
| 170 | 171 |
| 171 X509Certificate::OSCertHandles intermediates; | 172 X509Certificate::OSCertHandles intermediates; |
| 172 intermediates.push_back(certs[1]->os_cert_handle()); | 173 intermediates.push_back(certs[1]->os_cert_handle()); |
| 173 intermediates.push_back(certs[2]->os_cert_handle()); | 174 intermediates.push_back(certs[2]->os_cert_handle()); |
| 174 | 175 |
| 175 scoped_refptr<X509Certificate> comodo_chain = | 176 scoped_refptr<X509Certificate> comodo_chain = |
| 176 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 177 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), |
| 177 intermediates); | 178 intermediates); |
| 178 | 179 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 190 } | 191 } |
| 191 | 192 |
| 192 TEST_F(CertVerifyProcTest, PaypalNullCertParsing) { | 193 TEST_F(CertVerifyProcTest, PaypalNullCertParsing) { |
| 193 scoped_refptr<X509Certificate> paypal_null_cert( | 194 scoped_refptr<X509Certificate> paypal_null_cert( |
| 194 X509Certificate::CreateFromBytes( | 195 X509Certificate::CreateFromBytes( |
| 195 reinterpret_cast<const char*>(paypal_null_der), | 196 reinterpret_cast<const char*>(paypal_null_der), |
| 196 sizeof(paypal_null_der))); | 197 sizeof(paypal_null_der))); |
| 197 | 198 |
| 198 ASSERT_NE(static_cast<X509Certificate*>(NULL), paypal_null_cert); | 199 ASSERT_NE(static_cast<X509Certificate*>(NULL), paypal_null_cert); |
| 199 | 200 |
| 200 const SHA1HashValue& fingerprint = | 201 const SHA1HashValue& fingerprint = paypal_null_cert->fingerprint(); |
| 201 paypal_null_cert->fingerprint(); | |
| 202 for (size_t i = 0; i < 20; ++i) | 202 for (size_t i = 0; i < 20; ++i) |
| 203 EXPECT_EQ(paypal_null_fingerprint[i], fingerprint.data[i]); | 203 EXPECT_EQ(paypal_null_fingerprint[i], fingerprint.data[i]); |
| 204 | 204 |
| 205 int flags = 0; | 205 int flags = 0; |
| 206 CertVerifyResult verify_result; | 206 CertVerifyResult verify_result; |
| 207 int error = Verify(paypal_null_cert.get(), | 207 int error = Verify(paypal_null_cert.get(), |
| 208 "www.paypal.com", | 208 "www.paypal.com", |
| 209 flags, | 209 flags, |
| 210 NULL, | 210 NULL, |
| 211 empty_cert_list_, | 211 empty_cert_list_, |
| 212 &verify_result); | 212 &verify_result); |
| 213 #if defined(USE_NSS) || defined(OS_IOS) || defined(OS_ANDROID) | 213 #if defined(USE_NSS) || defined(OS_IOS) || defined(OS_ANDROID) |
| 214 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 214 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
| 215 #else | 215 #else |
| 216 // TOOD(bulach): investigate why macosx and win aren't returning | 216 // TOOD(bulach): investigate why macosx and win aren't returning |
| 217 // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID. | 217 // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID. |
| 218 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 218 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| 219 #endif | 219 #endif |
| 220 // Either the system crypto library should correctly report a certificate | 220 // Either the system crypto library should correctly report a certificate |
| 221 // name mismatch, or our certificate blacklist should cause us to report an | 221 // name mismatch, or our certificate blacklist should cause us to report an |
| 222 // invalid certificate. | 222 // invalid certificate. |
| 223 #if defined(USE_NSS) || defined(OS_WIN) || defined(OS_IOS) | 223 #if defined(USE_NSS) || defined(OS_WIN) || defined(OS_IOS) |
| 224 EXPECT_TRUE(verify_result.cert_status & | 224 EXPECT_TRUE(verify_result.cert_status & |
| 225 (CERT_STATUS_COMMON_NAME_INVALID | CERT_STATUS_INVALID)); | 225 (CERT_STATUS_COMMON_NAME_INVALID | CERT_STATUS_INVALID)); |
| 226 #endif | 226 #endif |
| 227 } | 227 } |
| 228 | 228 |
| 229 // A regression test for http://crbug.com/31497. | 229 // A regression test for http://crbug.com/31497. |
| 230 #if defined(OS_ANDROID) | 230 #if defined(OS_ANDROID) |
| 231 // Disabled on Android, as the Android verification libraries require an | 231 // Disabled on Android, as the Android verification libraries require an |
| 232 // explicit policy to be specified, even when anyPolicy is permitted. | 232 // explicit policy to be specified, even when anyPolicy is permitted. |
| 233 #define MAYBE_IntermediateCARequireExplicitPolicy \ | 233 #define MAYBE_IntermediateCARequireExplicitPolicy \ |
| 234 DISABLED_IntermediateCARequireExplicitPolicy | 234 DISABLED_IntermediateCARequireExplicitPolicy |
| 235 #else | 235 #else |
| 236 #define MAYBE_IntermediateCARequireExplicitPolicy \ | 236 #define MAYBE_IntermediateCARequireExplicitPolicy \ |
| 237 IntermediateCARequireExplicitPolicy | 237 IntermediateCARequireExplicitPolicy |
| 238 #endif | 238 #endif |
| 239 TEST_F(CertVerifyProcTest, MAYBE_IntermediateCARequireExplicitPolicy) { | 239 TEST_F(CertVerifyProcTest, MAYBE_IntermediateCARequireExplicitPolicy) { |
| 240 base::FilePath certs_dir = GetTestCertsDirectory(); | 240 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 241 | 241 |
| 242 CertificateList certs = CreateCertificateListFromFile( | 242 CertificateList certs = CreateCertificateListFromFile( |
| 243 certs_dir, "explicit-policy-chain.pem", | 243 certs_dir, "explicit-policy-chain.pem", X509Certificate::FORMAT_AUTO); |
| 244 X509Certificate::FORMAT_AUTO); | |
| 245 ASSERT_EQ(3U, certs.size()); | 244 ASSERT_EQ(3U, certs.size()); |
| 246 | 245 |
| 247 X509Certificate::OSCertHandles intermediates; | 246 X509Certificate::OSCertHandles intermediates; |
| 248 intermediates.push_back(certs[1]->os_cert_handle()); | 247 intermediates.push_back(certs[1]->os_cert_handle()); |
| 249 | 248 |
| 250 scoped_refptr<X509Certificate> cert = | 249 scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( |
| 251 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 250 certs[0]->os_cert_handle(), intermediates); |
| 252 intermediates); | |
| 253 ASSERT_TRUE(cert.get()); | 251 ASSERT_TRUE(cert.get()); |
| 254 | 252 |
| 255 ScopedTestRoot scoped_root(certs[2].get()); | 253 ScopedTestRoot scoped_root(certs[2].get()); |
| 256 | 254 |
| 257 int flags = 0; | 255 int flags = 0; |
| 258 CertVerifyResult verify_result; | 256 CertVerifyResult verify_result; |
| 259 int error = Verify(cert.get(), | 257 int error = Verify(cert.get(), |
| 260 "policy_test.example", | 258 "policy_test.example", |
| 261 flags, | 259 flags, |
| 262 NULL, | 260 NULL, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 281 scoped_refptr<X509Certificate> server_cert = | 279 scoped_refptr<X509Certificate> server_cert = |
| 282 ImportCertFromFile(certs_dir, "2029_globalsign_com_cert.pem"); | 280 ImportCertFromFile(certs_dir, "2029_globalsign_com_cert.pem"); |
| 283 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); | 281 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); |
| 284 | 282 |
| 285 scoped_refptr<X509Certificate> intermediate_cert = | 283 scoped_refptr<X509Certificate> intermediate_cert = |
| 286 ImportCertFromFile(certs_dir, "globalsign_ev_sha256_ca_cert.pem"); | 284 ImportCertFromFile(certs_dir, "globalsign_ev_sha256_ca_cert.pem"); |
| 287 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); | 285 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); |
| 288 | 286 |
| 289 X509Certificate::OSCertHandles intermediates; | 287 X509Certificate::OSCertHandles intermediates; |
| 290 intermediates.push_back(intermediate_cert->os_cert_handle()); | 288 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 291 scoped_refptr<X509Certificate> cert_chain = | 289 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( |
| 292 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), | 290 server_cert->os_cert_handle(), intermediates); |
| 293 intermediates); | |
| 294 | 291 |
| 295 CertVerifyResult verify_result; | 292 CertVerifyResult verify_result; |
| 296 int flags = CertVerifier::VERIFY_REV_CHECKING_ENABLED | | 293 int flags = |
| 297 CertVerifier::VERIFY_EV_CERT; | 294 CertVerifier::VERIFY_REV_CHECKING_ENABLED | CertVerifier::VERIFY_EV_CERT; |
| 298 int error = Verify(cert_chain.get(), | 295 int error = Verify(cert_chain.get(), |
| 299 "2029.globalsign.com", | 296 "2029.globalsign.com", |
| 300 flags, | 297 flags, |
| 301 NULL, | 298 NULL, |
| 302 empty_cert_list_, | 299 empty_cert_list_, |
| 303 &verify_result); | 300 &verify_result); |
| 304 if (error == OK) | 301 if (error == OK) |
| 305 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV); | 302 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV); |
| 306 else | 303 else |
| 307 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); | 304 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); |
| 308 } | 305 } |
| 309 | 306 |
| 310 // Test that verifying an ECDSA certificate doesn't crash on XP. (See | 307 // Test that verifying an ECDSA certificate doesn't crash on XP. (See |
| 311 // crbug.com/144466). | 308 // crbug.com/144466). |
| 312 TEST_F(CertVerifyProcTest, ECDSA_RSA) { | 309 TEST_F(CertVerifyProcTest, ECDSA_RSA) { |
| 313 base::FilePath certs_dir = GetTestCertsDirectory(); | 310 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 314 | 311 |
| 315 scoped_refptr<X509Certificate> cert = | 312 scoped_refptr<X509Certificate> cert = ImportCertFromFile( |
| 316 ImportCertFromFile(certs_dir, | 313 certs_dir, "prime256v1-ecdsa-ee-by-1024-rsa-intermediate.pem"); |
| 317 "prime256v1-ecdsa-ee-by-1024-rsa-intermediate.pem"); | |
| 318 | 314 |
| 319 CertVerifyResult verify_result; | 315 CertVerifyResult verify_result; |
| 320 Verify(cert.get(), "127.0.0.1", 0, NULL, empty_cert_list_, &verify_result); | 316 Verify(cert.get(), "127.0.0.1", 0, NULL, empty_cert_list_, &verify_result); |
| 321 | 317 |
| 322 // We don't check verify_result because the certificate is signed by an | 318 // We don't check verify_result because the certificate is signed by an |
| 323 // unknown CA and will be considered invalid on XP because of the ECDSA | 319 // unknown CA and will be considered invalid on XP because of the ECDSA |
| 324 // public key. | 320 // public key. |
| 325 } | 321 } |
| 326 | 322 |
| 327 // Currently, only RSA and DSA keys are checked for weakness, and our example | 323 // Currently, only RSA and DSA keys are checked for weakness, and our example |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 key_types.push_back("prime256v1-ecdsa"); | 358 key_types.push_back("prime256v1-ecdsa"); |
| 363 | 359 |
| 364 // Add the root that signed the intermediates for this test. | 360 // Add the root that signed the intermediates for this test. |
| 365 scoped_refptr<X509Certificate> root_cert = | 361 scoped_refptr<X509Certificate> root_cert = |
| 366 ImportCertFromFile(certs_dir, "2048-rsa-root.pem"); | 362 ImportCertFromFile(certs_dir, "2048-rsa-root.pem"); |
| 367 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert); | 363 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert); |
| 368 ScopedTestRoot scoped_root(root_cert.get()); | 364 ScopedTestRoot scoped_root(root_cert.get()); |
| 369 | 365 |
| 370 // Now test each chain. | 366 // Now test each chain. |
| 371 for (Strings::const_iterator ee_type = key_types.begin(); | 367 for (Strings::const_iterator ee_type = key_types.begin(); |
| 372 ee_type != key_types.end(); ++ee_type) { | 368 ee_type != key_types.end(); |
| 369 ++ee_type) { |
| 373 for (Strings::const_iterator signer_type = key_types.begin(); | 370 for (Strings::const_iterator signer_type = key_types.begin(); |
| 374 signer_type != key_types.end(); ++signer_type) { | 371 signer_type != key_types.end(); |
| 375 std::string basename = *ee_type + "-ee-by-" + *signer_type + | 372 ++signer_type) { |
| 376 "-intermediate.pem"; | 373 std::string basename = |
| 374 *ee_type + "-ee-by-" + *signer_type + "-intermediate.pem"; |
| 377 SCOPED_TRACE(basename); | 375 SCOPED_TRACE(basename); |
| 378 scoped_refptr<X509Certificate> ee_cert = | 376 scoped_refptr<X509Certificate> ee_cert = |
| 379 ImportCertFromFile(certs_dir, basename); | 377 ImportCertFromFile(certs_dir, basename); |
| 380 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert); | 378 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert); |
| 381 | 379 |
| 382 basename = *signer_type + "-intermediate.pem"; | 380 basename = *signer_type + "-intermediate.pem"; |
| 383 scoped_refptr<X509Certificate> intermediate = | 381 scoped_refptr<X509Certificate> intermediate = |
| 384 ImportCertFromFile(certs_dir, basename); | 382 ImportCertFromFile(certs_dir, basename); |
| 385 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate); | 383 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate); |
| 386 | 384 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 ASSERT_NE(static_cast<X509Certificate*>(NULL), extra_cert.get()); | 436 ASSERT_NE(static_cast<X509Certificate*>(NULL), extra_cert.get()); |
| 439 | 437 |
| 440 scoped_refptr<X509Certificate> root_cert = | 438 scoped_refptr<X509Certificate> root_cert = |
| 441 ImportCertFromFile(certs_dir, "cross-signed-root-sha1.pem"); | 439 ImportCertFromFile(certs_dir, "cross-signed-root-sha1.pem"); |
| 442 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert.get()); | 440 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert.get()); |
| 443 | 441 |
| 444 ScopedTestRoot scoped_root(root_cert.get()); | 442 ScopedTestRoot scoped_root(root_cert.get()); |
| 445 | 443 |
| 446 X509Certificate::OSCertHandles intermediates; | 444 X509Certificate::OSCertHandles intermediates; |
| 447 intermediates.push_back(extra_cert->os_cert_handle()); | 445 intermediates.push_back(extra_cert->os_cert_handle()); |
| 448 scoped_refptr<X509Certificate> cert_chain = | 446 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( |
| 449 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), | 447 server_cert->os_cert_handle(), intermediates); |
| 450 intermediates); | |
| 451 | 448 |
| 452 CertVerifyResult verify_result; | 449 CertVerifyResult verify_result; |
| 453 int flags = 0; | 450 int flags = 0; |
| 454 int error = Verify(cert_chain.get(), | 451 int error = Verify(cert_chain.get(), |
| 455 "127.0.0.1", | 452 "127.0.0.1", |
| 456 flags, | 453 flags, |
| 457 NULL, | 454 NULL, |
| 458 empty_cert_list_, | 455 empty_cert_list_, |
| 459 &verify_result); | 456 &verify_result); |
| 460 EXPECT_EQ(OK, error); | 457 EXPECT_EQ(OK, error); |
| 461 | 458 |
| 462 // The extra MD5 root should be discarded | 459 // The extra MD5 root should be discarded |
| 463 ASSERT_TRUE(verify_result.verified_cert.get()); | 460 ASSERT_TRUE(verify_result.verified_cert.get()); |
| 464 ASSERT_EQ(1u, | 461 ASSERT_EQ(1u, |
| 465 verify_result.verified_cert->GetIntermediateCertificates().size()); | 462 verify_result.verified_cert->GetIntermediateCertificates().size()); |
| 466 EXPECT_TRUE(X509Certificate::IsSameOSCert( | 463 EXPECT_TRUE(X509Certificate::IsSameOSCert( |
| 467 verify_result.verified_cert->GetIntermediateCertificates().front(), | 464 verify_result.verified_cert->GetIntermediateCertificates().front(), |
| 468 root_cert->os_cert_handle())); | 465 root_cert->os_cert_handle())); |
| 469 | 466 |
| 470 EXPECT_FALSE(verify_result.has_md5); | 467 EXPECT_FALSE(verify_result.has_md5); |
| 471 } | 468 } |
| 472 | 469 |
| 473 // Test for bug 94673. | 470 // Test for bug 94673. |
| 474 TEST_F(CertVerifyProcTest, GoogleDigiNotarTest) { | 471 TEST_F(CertVerifyProcTest, GoogleDigiNotarTest) { |
| 475 base::FilePath certs_dir = GetTestCertsDirectory(); | 472 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 476 | 473 |
| 477 scoped_refptr<X509Certificate> server_cert = | 474 scoped_refptr<X509Certificate> server_cert = |
| 478 ImportCertFromFile(certs_dir, "google_diginotar.pem"); | 475 ImportCertFromFile(certs_dir, "google_diginotar.pem"); |
| 479 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); | 476 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); |
| 480 | 477 |
| 481 scoped_refptr<X509Certificate> intermediate_cert = | 478 scoped_refptr<X509Certificate> intermediate_cert = |
| 482 ImportCertFromFile(certs_dir, "diginotar_public_ca_2025.pem"); | 479 ImportCertFromFile(certs_dir, "diginotar_public_ca_2025.pem"); |
| 483 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); | 480 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); |
| 484 | 481 |
| 485 X509Certificate::OSCertHandles intermediates; | 482 X509Certificate::OSCertHandles intermediates; |
| 486 intermediates.push_back(intermediate_cert->os_cert_handle()); | 483 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 487 scoped_refptr<X509Certificate> cert_chain = | 484 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( |
| 488 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), | 485 server_cert->os_cert_handle(), intermediates); |
| 489 intermediates); | |
| 490 | 486 |
| 491 CertVerifyResult verify_result; | 487 CertVerifyResult verify_result; |
| 492 int flags = CertVerifier::VERIFY_REV_CHECKING_ENABLED; | 488 int flags = CertVerifier::VERIFY_REV_CHECKING_ENABLED; |
| 493 int error = Verify(cert_chain.get(), | 489 int error = Verify(cert_chain.get(), |
| 494 "mail.google.com", | 490 "mail.google.com", |
| 495 flags, | 491 flags, |
| 496 NULL, | 492 NULL, |
| 497 empty_cert_list_, | 493 empty_cert_list_, |
| 498 &verify_result); | 494 &verify_result); |
| 499 EXPECT_NE(OK, error); | 495 EXPECT_NE(OK, error); |
| 500 | 496 |
| 501 // Now turn off revocation checking. Certificate verification should still | 497 // Now turn off revocation checking. Certificate verification should still |
| 502 // fail. | 498 // fail. |
| 503 flags = 0; | 499 flags = 0; |
| 504 error = Verify(cert_chain.get(), | 500 error = Verify(cert_chain.get(), |
| 505 "mail.google.com", | 501 "mail.google.com", |
| 506 flags, | 502 flags, |
| 507 NULL, | 503 NULL, |
| 508 empty_cert_list_, | 504 empty_cert_list_, |
| 509 &verify_result); | 505 &verify_result); |
| 510 EXPECT_NE(OK, error); | 506 EXPECT_NE(OK, error); |
| 511 } | 507 } |
| 512 | 508 |
| 513 TEST_F(CertVerifyProcTest, DigiNotarCerts) { | 509 TEST_F(CertVerifyProcTest, DigiNotarCerts) { |
| 514 static const char* const kDigiNotarFilenames[] = { | 510 static const char* const kDigiNotarFilenames[] = { |
| 515 "diginotar_root_ca.pem", | 511 "diginotar_root_ca.pem", "diginotar_cyber_ca.pem", |
| 516 "diginotar_cyber_ca.pem", | 512 "diginotar_services_1024_ca.pem", "diginotar_pkioverheid.pem", |
| 517 "diginotar_services_1024_ca.pem", | 513 "diginotar_pkioverheid_g2.pem", NULL, |
| 518 "diginotar_pkioverheid.pem", | |
| 519 "diginotar_pkioverheid_g2.pem", | |
| 520 NULL, | |
| 521 }; | 514 }; |
| 522 | 515 |
| 523 base::FilePath certs_dir = GetTestCertsDirectory(); | 516 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 524 | 517 |
| 525 for (size_t i = 0; kDigiNotarFilenames[i]; i++) { | 518 for (size_t i = 0; kDigiNotarFilenames[i]; i++) { |
| 526 scoped_refptr<X509Certificate> diginotar_cert = | 519 scoped_refptr<X509Certificate> diginotar_cert = |
| 527 ImportCertFromFile(certs_dir, kDigiNotarFilenames[i]); | 520 ImportCertFromFile(certs_dir, kDigiNotarFilenames[i]); |
| 528 std::string der_bytes; | 521 std::string der_bytes; |
| 529 ASSERT_TRUE(X509Certificate::GetDEREncoded( | 522 ASSERT_TRUE(X509Certificate::GetDEREncoded(diginotar_cert->os_cert_handle(), |
| 530 diginotar_cert->os_cert_handle(), &der_bytes)); | 523 &der_bytes)); |
| 531 | 524 |
| 532 base::StringPiece spki; | 525 base::StringPiece spki; |
| 533 ASSERT_TRUE(asn1::ExtractSPKIFromDERCert(der_bytes, &spki)); | 526 ASSERT_TRUE(asn1::ExtractSPKIFromDERCert(der_bytes, &spki)); |
| 534 | 527 |
| 535 std::string spki_sha1 = base::SHA1HashString(spki.as_string()); | 528 std::string spki_sha1 = base::SHA1HashString(spki.as_string()); |
| 536 | 529 |
| 537 HashValueVector public_keys; | 530 HashValueVector public_keys; |
| 538 HashValue hash(HASH_VALUE_SHA1); | 531 HashValue hash(HASH_VALUE_SHA1); |
| 539 ASSERT_EQ(hash.size(), spki_sha1.size()); | 532 ASSERT_EQ(hash.size(), spki_sha1.size()); |
| 540 memcpy(hash.data(), spki_sha1.data(), spki_sha1.size()); | 533 memcpy(hash.data(), spki_sha1.data(), spki_sha1.size()); |
| 541 public_keys.push_back(hash); | 534 public_keys.push_back(hash); |
| 542 | 535 |
| 543 EXPECT_TRUE(CertVerifyProc::IsPublicKeyBlacklisted(public_keys)) << | 536 EXPECT_TRUE(CertVerifyProc::IsPublicKeyBlacklisted(public_keys)) |
| 544 "Public key not blocked for " << kDigiNotarFilenames[i]; | 537 << "Public key not blocked for " << kDigiNotarFilenames[i]; |
| 545 } | 538 } |
| 546 } | 539 } |
| 547 | 540 |
| 548 TEST_F(CertVerifyProcTest, NameConstraintsOk) { | 541 TEST_F(CertVerifyProcTest, NameConstraintsOk) { |
| 549 CertificateList ca_cert_list = | 542 CertificateList ca_cert_list = |
| 550 CreateCertificateListFromFile(GetTestCertsDirectory(), | 543 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 551 "root_ca_cert.pem", | 544 "root_ca_cert.pem", |
| 552 X509Certificate::FORMAT_AUTO); | 545 X509Certificate::FORMAT_AUTO); |
| 553 ASSERT_EQ(1U, ca_cert_list.size()); | 546 ASSERT_EQ(1U, ca_cert_list.size()); |
| 554 ScopedTestRoot test_root(ca_cert_list[0]); | 547 ScopedTestRoot test_root(ca_cert_list[0]); |
| 555 | 548 |
| 556 CertificateList cert_list = CreateCertificateListFromFile( | 549 CertificateList cert_list = |
| 557 GetTestCertsDirectory(), "name_constraint_ok.crt", | 550 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 558 X509Certificate::FORMAT_AUTO); | 551 "name_constraint_ok.crt", |
| 552 X509Certificate::FORMAT_AUTO); |
| 559 ASSERT_EQ(1U, cert_list.size()); | 553 ASSERT_EQ(1U, cert_list.size()); |
| 560 | 554 |
| 561 X509Certificate::OSCertHandles intermediates; | 555 X509Certificate::OSCertHandles intermediates; |
| 562 scoped_refptr<X509Certificate> leaf = | 556 scoped_refptr<X509Certificate> leaf = X509Certificate::CreateFromHandle( |
| 563 X509Certificate::CreateFromHandle(cert_list[0]->os_cert_handle(), | 557 cert_list[0]->os_cert_handle(), intermediates); |
| 564 intermediates); | |
| 565 | 558 |
| 566 int flags = 0; | 559 int flags = 0; |
| 567 CertVerifyResult verify_result; | 560 CertVerifyResult verify_result; |
| 568 int error = Verify(leaf.get(), | 561 int error = Verify(leaf.get(), |
| 569 "test.example.com", | 562 "test.example.com", |
| 570 flags, | 563 flags, |
| 571 NULL, | 564 NULL, |
| 572 empty_cert_list_, | 565 empty_cert_list_, |
| 573 &verify_result); | 566 &verify_result); |
| 574 EXPECT_EQ(OK, error); | 567 EXPECT_EQ(OK, error); |
| 575 EXPECT_EQ(0U, verify_result.cert_status); | 568 EXPECT_EQ(0U, verify_result.cert_status); |
| 576 } | 569 } |
| 577 | 570 |
| 578 TEST_F(CertVerifyProcTest, NameConstraintsFailure) { | 571 TEST_F(CertVerifyProcTest, NameConstraintsFailure) { |
| 579 if (!SupportsReturningVerifiedChain()) { | 572 if (!SupportsReturningVerifiedChain()) { |
| 580 LOG(INFO) << "Skipping this test in this platform."; | 573 LOG(INFO) << "Skipping this test in this platform."; |
| 581 return; | 574 return; |
| 582 } | 575 } |
| 583 | 576 |
| 584 CertificateList ca_cert_list = | 577 CertificateList ca_cert_list = |
| 585 CreateCertificateListFromFile(GetTestCertsDirectory(), | 578 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 586 "root_ca_cert.pem", | 579 "root_ca_cert.pem", |
| 587 X509Certificate::FORMAT_AUTO); | 580 X509Certificate::FORMAT_AUTO); |
| 588 ASSERT_EQ(1U, ca_cert_list.size()); | 581 ASSERT_EQ(1U, ca_cert_list.size()); |
| 589 ScopedTestRoot test_root(ca_cert_list[0]); | 582 ScopedTestRoot test_root(ca_cert_list[0]); |
| 590 | 583 |
| 591 CertificateList cert_list = CreateCertificateListFromFile( | 584 CertificateList cert_list = |
| 592 GetTestCertsDirectory(), "name_constraint_bad.crt", | 585 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 593 X509Certificate::FORMAT_AUTO); | 586 "name_constraint_bad.crt", |
| 587 X509Certificate::FORMAT_AUTO); |
| 594 ASSERT_EQ(1U, cert_list.size()); | 588 ASSERT_EQ(1U, cert_list.size()); |
| 595 | 589 |
| 596 X509Certificate::OSCertHandles intermediates; | 590 X509Certificate::OSCertHandles intermediates; |
| 597 scoped_refptr<X509Certificate> leaf = | 591 scoped_refptr<X509Certificate> leaf = X509Certificate::CreateFromHandle( |
| 598 X509Certificate::CreateFromHandle(cert_list[0]->os_cert_handle(), | 592 cert_list[0]->os_cert_handle(), intermediates); |
| 599 intermediates); | |
| 600 | 593 |
| 601 int flags = 0; | 594 int flags = 0; |
| 602 CertVerifyResult verify_result; | 595 CertVerifyResult verify_result; |
| 603 int error = Verify(leaf.get(), | 596 int error = Verify(leaf.get(), |
| 604 "test.example.com", | 597 "test.example.com", |
| 605 flags, | 598 flags, |
| 606 NULL, | 599 NULL, |
| 607 empty_cert_list_, | 600 empty_cert_list_, |
| 608 &verify_result); | 601 &verify_result); |
| 609 EXPECT_EQ(ERR_CERT_NAME_CONSTRAINT_VIOLATION, error); | 602 EXPECT_EQ(ERR_CERT_NAME_CONSTRAINT_VIOLATION, error); |
| 610 EXPECT_EQ(CERT_STATUS_NAME_CONSTRAINT_VIOLATION, | 603 EXPECT_EQ(CERT_STATUS_NAME_CONSTRAINT_VIOLATION, |
| 611 verify_result.cert_status & CERT_STATUS_NAME_CONSTRAINT_VIOLATION); | 604 verify_result.cert_status & CERT_STATUS_NAME_CONSTRAINT_VIOLATION); |
| 612 } | 605 } |
| 613 | 606 |
| 614 TEST_F(CertVerifyProcTest, TestKnownRoot) { | 607 TEST_F(CertVerifyProcTest, TestKnownRoot) { |
| 615 if (!SupportsDetectingKnownRoots()) { | 608 if (!SupportsDetectingKnownRoots()) { |
| 616 LOG(INFO) << "Skipping this test in this platform."; | 609 LOG(INFO) << "Skipping this test in this platform."; |
| 617 return; | 610 return; |
| 618 } | 611 } |
| 619 | 612 |
| 620 base::FilePath certs_dir = GetTestCertsDirectory(); | 613 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 621 CertificateList certs = CreateCertificateListFromFile( | 614 CertificateList certs = CreateCertificateListFromFile( |
| 622 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO); | 615 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO); |
| 623 ASSERT_EQ(2U, certs.size()); | 616 ASSERT_EQ(2U, certs.size()); |
| 624 | 617 |
| 625 X509Certificate::OSCertHandles intermediates; | 618 X509Certificate::OSCertHandles intermediates; |
| 626 intermediates.push_back(certs[1]->os_cert_handle()); | 619 intermediates.push_back(certs[1]->os_cert_handle()); |
| 627 | 620 |
| 628 scoped_refptr<X509Certificate> cert_chain = | 621 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( |
| 629 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 622 certs[0]->os_cert_handle(), intermediates); |
| 630 intermediates); | |
| 631 | 623 |
| 632 int flags = 0; | 624 int flags = 0; |
| 633 CertVerifyResult verify_result; | 625 CertVerifyResult verify_result; |
| 634 // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug | 626 // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug |
| 635 // against agl. See also PublicKeyHashes. | 627 // against agl. See also PublicKeyHashes. |
| 636 int error = Verify(cert_chain.get(), | 628 int error = Verify(cert_chain.get(), |
| 637 "satveda.com", | 629 "satveda.com", |
| 638 flags, | 630 flags, |
| 639 NULL, | 631 NULL, |
| 640 empty_cert_list_, | 632 empty_cert_list_, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 652 } | 644 } |
| 653 | 645 |
| 654 base::FilePath certs_dir = GetTestCertsDirectory(); | 646 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 655 CertificateList certs = CreateCertificateListFromFile( | 647 CertificateList certs = CreateCertificateListFromFile( |
| 656 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO); | 648 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO); |
| 657 ASSERT_EQ(2U, certs.size()); | 649 ASSERT_EQ(2U, certs.size()); |
| 658 | 650 |
| 659 X509Certificate::OSCertHandles intermediates; | 651 X509Certificate::OSCertHandles intermediates; |
| 660 intermediates.push_back(certs[1]->os_cert_handle()); | 652 intermediates.push_back(certs[1]->os_cert_handle()); |
| 661 | 653 |
| 662 scoped_refptr<X509Certificate> cert_chain = | 654 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( |
| 663 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 655 certs[0]->os_cert_handle(), intermediates); |
| 664 intermediates); | |
| 665 int flags = 0; | 656 int flags = 0; |
| 666 CertVerifyResult verify_result; | 657 CertVerifyResult verify_result; |
| 667 | 658 |
| 668 // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug | 659 // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug |
| 669 // against agl. See also TestKnownRoot. | 660 // against agl. See also TestKnownRoot. |
| 670 int error = Verify(cert_chain.get(), | 661 int error = Verify(cert_chain.get(), |
| 671 "satveda.com", | 662 "satveda.com", |
| 672 flags, | 663 flags, |
| 673 NULL, | 664 NULL, |
| 674 empty_cert_list_, | 665 empty_cert_list_, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 &verify_result); | 715 &verify_result); |
| 725 #if defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID) | 716 #if defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID) |
| 726 // This certificate has two errors: "invalid key usage" and "untrusted CA". | 717 // This certificate has two errors: "invalid key usage" and "untrusted CA". |
| 727 // However, OpenSSL returns only one (the latter), and we can't detect | 718 // However, OpenSSL returns only one (the latter), and we can't detect |
| 728 // the other errors. | 719 // the other errors. |
| 729 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 720 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| 730 #else | 721 #else |
| 731 EXPECT_EQ(ERR_CERT_INVALID, error); | 722 EXPECT_EQ(ERR_CERT_INVALID, error); |
| 732 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID); | 723 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID); |
| 733 #endif | 724 #endif |
| 734 // TODO(wtc): fix http://crbug.com/75520 to get all the certificate errors | 725 // TODO(wtc): fix http://crbug.com/75520 to get all the certificate errors |
| 735 // from NSS. | 726 // from NSS. |
| 736 #if !defined(USE_NSS) && !defined(OS_IOS) && !defined(OS_ANDROID) | 727 #if !defined(USE_NSS) && !defined(OS_IOS) && !defined(OS_ANDROID) |
| 737 // The certificate is issued by an unknown CA. | 728 // The certificate is issued by an unknown CA. |
| 738 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); | 729 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); |
| 739 #endif | 730 #endif |
| 740 } | 731 } |
| 741 | 732 |
| 742 // Basic test for returning the chain in CertVerifyResult. Note that the | 733 // Basic test for returning the chain in CertVerifyResult. Note that the |
| 743 // returned chain may just be a reflection of the originally supplied chain; | 734 // returned chain may just be a reflection of the originally supplied chain; |
| 744 // that is, if any errors occur, the default chain returned is an exact copy | 735 // that is, if any errors occur, the default chain returned is an exact copy |
| 745 // of the certificate to be verified. The remaining VerifyReturn* tests are | 736 // of the certificate to be verified. The remaining VerifyReturn* tests are |
| 746 // used to ensure that the actual, verified chain is being returned by | 737 // used to ensure that the actual, verified chain is being returned by |
| 747 // Verify(). | 738 // Verify(). |
| 748 TEST_F(CertVerifyProcTest, VerifyReturnChainBasic) { | 739 TEST_F(CertVerifyProcTest, VerifyReturnChainBasic) { |
| 749 if (!SupportsReturningVerifiedChain()) { | 740 if (!SupportsReturningVerifiedChain()) { |
| 750 LOG(INFO) << "Skipping this test in this platform."; | 741 LOG(INFO) << "Skipping this test in this platform."; |
| 751 return; | 742 return; |
| 752 } | 743 } |
| 753 | 744 |
| 754 base::FilePath certs_dir = GetTestCertsDirectory(); | 745 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 755 CertificateList certs = CreateCertificateListFromFile( | 746 CertificateList certs = CreateCertificateListFromFile( |
| 756 certs_dir, "x509_verify_results.chain.pem", | 747 certs_dir, "x509_verify_results.chain.pem", X509Certificate::FORMAT_AUTO); |
| 757 X509Certificate::FORMAT_AUTO); | |
| 758 ASSERT_EQ(3U, certs.size()); | 748 ASSERT_EQ(3U, certs.size()); |
| 759 | 749 |
| 760 X509Certificate::OSCertHandles intermediates; | 750 X509Certificate::OSCertHandles intermediates; |
| 761 intermediates.push_back(certs[1]->os_cert_handle()); | 751 intermediates.push_back(certs[1]->os_cert_handle()); |
| 762 intermediates.push_back(certs[2]->os_cert_handle()); | 752 intermediates.push_back(certs[2]->os_cert_handle()); |
| 763 | 753 |
| 764 ScopedTestRoot scoped_root(certs[2].get()); | 754 ScopedTestRoot scoped_root(certs[2].get()); |
| 765 | 755 |
| 766 scoped_refptr<X509Certificate> google_full_chain = | 756 scoped_refptr<X509Certificate> google_full_chain = |
| 767 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 757 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), |
| (...skipping 29 matching lines...) Expand all Loading... |
| 797 // known public registry controlled domain information) issued by well-known | 787 // known public registry controlled domain information) issued by well-known |
| 798 // CAs are flagged appropriately, while certificates that are issued by | 788 // CAs are flagged appropriately, while certificates that are issued by |
| 799 // internal CAs are not flagged. | 789 // internal CAs are not flagged. |
| 800 TEST_F(CertVerifyProcTest, IntranetHostsRejected) { | 790 TEST_F(CertVerifyProcTest, IntranetHostsRejected) { |
| 801 if (!SupportsDetectingKnownRoots()) { | 791 if (!SupportsDetectingKnownRoots()) { |
| 802 LOG(INFO) << "Skipping this test in this platform."; | 792 LOG(INFO) << "Skipping this test in this platform."; |
| 803 return; | 793 return; |
| 804 } | 794 } |
| 805 | 795 |
| 806 CertificateList cert_list = CreateCertificateListFromFile( | 796 CertificateList cert_list = CreateCertificateListFromFile( |
| 807 GetTestCertsDirectory(), "ok_cert.pem", | 797 GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); |
| 808 X509Certificate::FORMAT_AUTO); | |
| 809 ASSERT_EQ(1U, cert_list.size()); | 798 ASSERT_EQ(1U, cert_list.size()); |
| 810 scoped_refptr<X509Certificate> cert(cert_list[0]); | 799 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 811 | 800 |
| 812 CertVerifyResult verify_result; | 801 CertVerifyResult verify_result; |
| 813 int error = 0; | 802 int error = 0; |
| 814 | 803 |
| 815 // Intranet names for public CAs should be flagged: | 804 // Intranet names for public CAs should be flagged: |
| 816 verify_proc_ = new WellKnownCaCertVerifyProc(true); | 805 verify_proc_ = new WellKnownCaCertVerifyProc(true); |
| 817 error = | 806 error = |
| 818 Verify(cert.get(), "intranet", 0, NULL, empty_cert_list_, &verify_result); | 807 Verify(cert.get(), "intranet", 0, NULL, empty_cert_list_, &verify_result); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 833 // of intermediate certificates are combined, it's possible that order may | 822 // of intermediate certificates are combined, it's possible that order may |
| 834 // not be maintained. | 823 // not be maintained. |
| 835 TEST_F(CertVerifyProcTest, VerifyReturnChainProperlyOrdered) { | 824 TEST_F(CertVerifyProcTest, VerifyReturnChainProperlyOrdered) { |
| 836 if (!SupportsReturningVerifiedChain()) { | 825 if (!SupportsReturningVerifiedChain()) { |
| 837 LOG(INFO) << "Skipping this test in this platform."; | 826 LOG(INFO) << "Skipping this test in this platform."; |
| 838 return; | 827 return; |
| 839 } | 828 } |
| 840 | 829 |
| 841 base::FilePath certs_dir = GetTestCertsDirectory(); | 830 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 842 CertificateList certs = CreateCertificateListFromFile( | 831 CertificateList certs = CreateCertificateListFromFile( |
| 843 certs_dir, "x509_verify_results.chain.pem", | 832 certs_dir, "x509_verify_results.chain.pem", X509Certificate::FORMAT_AUTO); |
| 844 X509Certificate::FORMAT_AUTO); | |
| 845 ASSERT_EQ(3U, certs.size()); | 833 ASSERT_EQ(3U, certs.size()); |
| 846 | 834 |
| 847 // Construct the chain out of order. | 835 // Construct the chain out of order. |
| 848 X509Certificate::OSCertHandles intermediates; | 836 X509Certificate::OSCertHandles intermediates; |
| 849 intermediates.push_back(certs[2]->os_cert_handle()); | 837 intermediates.push_back(certs[2]->os_cert_handle()); |
| 850 intermediates.push_back(certs[1]->os_cert_handle()); | 838 intermediates.push_back(certs[1]->os_cert_handle()); |
| 851 | 839 |
| 852 ScopedTestRoot scoped_root(certs[2].get()); | 840 ScopedTestRoot scoped_root(certs[2].get()); |
| 853 | 841 |
| 854 scoped_refptr<X509Certificate> google_full_chain = | 842 scoped_refptr<X509Certificate> google_full_chain = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 884 // Test that Verify() filters out certificates which are not related to | 872 // Test that Verify() filters out certificates which are not related to |
| 885 // or part of the certificate chain being verified. | 873 // or part of the certificate chain being verified. |
| 886 TEST_F(CertVerifyProcTest, VerifyReturnChainFiltersUnrelatedCerts) { | 874 TEST_F(CertVerifyProcTest, VerifyReturnChainFiltersUnrelatedCerts) { |
| 887 if (!SupportsReturningVerifiedChain()) { | 875 if (!SupportsReturningVerifiedChain()) { |
| 888 LOG(INFO) << "Skipping this test in this platform."; | 876 LOG(INFO) << "Skipping this test in this platform."; |
| 889 return; | 877 return; |
| 890 } | 878 } |
| 891 | 879 |
| 892 base::FilePath certs_dir = GetTestCertsDirectory(); | 880 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 893 CertificateList certs = CreateCertificateListFromFile( | 881 CertificateList certs = CreateCertificateListFromFile( |
| 894 certs_dir, "x509_verify_results.chain.pem", | 882 certs_dir, "x509_verify_results.chain.pem", X509Certificate::FORMAT_AUTO); |
| 895 X509Certificate::FORMAT_AUTO); | |
| 896 ASSERT_EQ(3U, certs.size()); | 883 ASSERT_EQ(3U, certs.size()); |
| 897 ScopedTestRoot scoped_root(certs[2].get()); | 884 ScopedTestRoot scoped_root(certs[2].get()); |
| 898 | 885 |
| 899 scoped_refptr<X509Certificate> unrelated_certificate = | 886 scoped_refptr<X509Certificate> unrelated_certificate = |
| 900 ImportCertFromFile(certs_dir, "duplicate_cn_1.pem"); | 887 ImportCertFromFile(certs_dir, "duplicate_cn_1.pem"); |
| 901 scoped_refptr<X509Certificate> unrelated_certificate2 = | 888 scoped_refptr<X509Certificate> unrelated_certificate2 = |
| 902 ImportCertFromFile(certs_dir, "aia-cert.pem"); | 889 ImportCertFromFile(certs_dir, "aia-cert.pem"); |
| 903 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_certificate); | 890 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_certificate); |
| 904 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_certificate2); | 891 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_certificate2); |
| 905 | 892 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 940 certs[2]->os_cert_handle())); | 927 certs[2]->os_cert_handle())); |
| 941 } | 928 } |
| 942 | 929 |
| 943 TEST_F(CertVerifyProcTest, AdditionalTrustAnchors) { | 930 TEST_F(CertVerifyProcTest, AdditionalTrustAnchors) { |
| 944 if (!SupportsAdditionalTrustAnchors()) { | 931 if (!SupportsAdditionalTrustAnchors()) { |
| 945 LOG(INFO) << "Skipping this test in this platform."; | 932 LOG(INFO) << "Skipping this test in this platform."; |
| 946 return; | 933 return; |
| 947 } | 934 } |
| 948 | 935 |
| 949 // |ca_cert| is the issuer of |cert|. | 936 // |ca_cert| is the issuer of |cert|. |
| 950 CertificateList ca_cert_list = CreateCertificateListFromFile( | 937 CertificateList ca_cert_list = |
| 951 GetTestCertsDirectory(), "root_ca_cert.pem", | 938 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 952 X509Certificate::FORMAT_AUTO); | 939 "root_ca_cert.pem", |
| 940 X509Certificate::FORMAT_AUTO); |
| 953 ASSERT_EQ(1U, ca_cert_list.size()); | 941 ASSERT_EQ(1U, ca_cert_list.size()); |
| 954 scoped_refptr<X509Certificate> ca_cert(ca_cert_list[0]); | 942 scoped_refptr<X509Certificate> ca_cert(ca_cert_list[0]); |
| 955 | 943 |
| 956 CertificateList cert_list = CreateCertificateListFromFile( | 944 CertificateList cert_list = CreateCertificateListFromFile( |
| 957 GetTestCertsDirectory(), "ok_cert.pem", | 945 GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); |
| 958 X509Certificate::FORMAT_AUTO); | |
| 959 ASSERT_EQ(1U, cert_list.size()); | 946 ASSERT_EQ(1U, cert_list.size()); |
| 960 scoped_refptr<X509Certificate> cert(cert_list[0]); | 947 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 961 | 948 |
| 962 // Verification of |cert| fails when |ca_cert| is not in the trust anchors | 949 // Verification of |cert| fails when |ca_cert| is not in the trust anchors |
| 963 // list. | 950 // list. |
| 964 int flags = 0; | 951 int flags = 0; |
| 965 CertVerifyResult verify_result; | 952 CertVerifyResult verify_result; |
| 966 int error = Verify( | 953 int error = Verify( |
| 967 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result); | 954 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result); |
| 968 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 955 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 990 // Tests that certificates issued by user-supplied roots are not flagged as | 977 // Tests that certificates issued by user-supplied roots are not flagged as |
| 991 // issued by a known root. This should pass whether or not the platform supports | 978 // issued by a known root. This should pass whether or not the platform supports |
| 992 // detecting known roots. | 979 // detecting known roots. |
| 993 TEST_F(CertVerifyProcTest, IsIssuedByKnownRootIgnoresTestRoots) { | 980 TEST_F(CertVerifyProcTest, IsIssuedByKnownRootIgnoresTestRoots) { |
| 994 // Load root_ca_cert.pem into the test root store. | 981 // Load root_ca_cert.pem into the test root store. |
| 995 TestRootCerts* root_certs = TestRootCerts::GetInstance(); | 982 TestRootCerts* root_certs = TestRootCerts::GetInstance(); |
| 996 root_certs->AddFromFile( | 983 root_certs->AddFromFile( |
| 997 GetTestCertsDirectory().AppendASCII("root_ca_cert.pem")); | 984 GetTestCertsDirectory().AppendASCII("root_ca_cert.pem")); |
| 998 | 985 |
| 999 CertificateList cert_list = CreateCertificateListFromFile( | 986 CertificateList cert_list = CreateCertificateListFromFile( |
| 1000 GetTestCertsDirectory(), "ok_cert.pem", | 987 GetTestCertsDirectory(), "ok_cert.pem", X509Certificate::FORMAT_AUTO); |
| 1001 X509Certificate::FORMAT_AUTO); | |
| 1002 ASSERT_EQ(1U, cert_list.size()); | 988 ASSERT_EQ(1U, cert_list.size()); |
| 1003 scoped_refptr<X509Certificate> cert(cert_list[0]); | 989 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 1004 | 990 |
| 1005 // Verification should pass. | 991 // Verification should pass. |
| 1006 int flags = 0; | 992 int flags = 0; |
| 1007 CertVerifyResult verify_result; | 993 CertVerifyResult verify_result; |
| 1008 int error = Verify( | 994 int error = Verify( |
| 1009 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result); | 995 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result); |
| 1010 EXPECT_EQ(OK, error); | 996 EXPECT_EQ(OK, error); |
| 1011 EXPECT_EQ(0U, verify_result.cert_status); | 997 EXPECT_EQ(0U, verify_result.cert_status); |
| 1012 // But should not be marked as a known root. | 998 // But should not be marked as a known root. |
| 1013 EXPECT_FALSE(verify_result.is_issued_by_known_root); | 999 EXPECT_FALSE(verify_result.is_issued_by_known_root); |
| 1014 | 1000 |
| 1015 root_certs->Clear(); | 1001 root_certs->Clear(); |
| 1016 EXPECT_TRUE(root_certs->IsEmpty()); | 1002 EXPECT_TRUE(root_certs->IsEmpty()); |
| 1017 } | 1003 } |
| 1018 | 1004 |
| 1019 #if defined(OS_MACOSX) && !defined(OS_IOS) | 1005 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 1020 // Tests that, on OS X, issues with a cross-certified Baltimore CyberTrust | 1006 // Tests that, on OS X, issues with a cross-certified Baltimore CyberTrust |
| 1021 // Root can be successfully worked around once Apple completes removing the | 1007 // Root can be successfully worked around once Apple completes removing the |
| 1022 // older GTE CyberTrust Root from its trusted root store. | 1008 // older GTE CyberTrust Root from its trusted root store. |
| 1023 // | 1009 // |
| 1024 // The issue is caused by servers supplying the cross-certified intermediate | 1010 // The issue is caused by servers supplying the cross-certified intermediate |
| 1025 // (necessary for certain mobile platforms), which OS X does not recognize | 1011 // (necessary for certain mobile platforms), which OS X does not recognize |
| 1026 // as already existing within its trust store. | 1012 // as already existing within its trust store. |
| 1027 TEST_F(CertVerifyProcTest, CybertrustGTERoot) { | 1013 TEST_F(CertVerifyProcTest, CybertrustGTERoot) { |
| 1028 CertificateList certs = CreateCertificateListFromFile( | 1014 CertificateList certs = |
| 1029 GetTestCertsDirectory(), | 1015 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 1030 "cybertrust_omniroot_chain.pem", | 1016 "cybertrust_omniroot_chain.pem", |
| 1031 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); | 1017 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); |
| 1032 ASSERT_EQ(2U, certs.size()); | 1018 ASSERT_EQ(2U, certs.size()); |
| 1033 | 1019 |
| 1034 X509Certificate::OSCertHandles intermediates; | 1020 X509Certificate::OSCertHandles intermediates; |
| 1035 intermediates.push_back(certs[1]->os_cert_handle()); | 1021 intermediates.push_back(certs[1]->os_cert_handle()); |
| 1036 | 1022 |
| 1037 scoped_refptr<X509Certificate> cybertrust_basic = | 1023 scoped_refptr<X509Certificate> cybertrust_basic = |
| 1038 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), | 1024 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), |
| 1039 intermediates); | 1025 intermediates); |
| 1040 ASSERT_TRUE(cybertrust_basic.get()); | 1026 ASSERT_TRUE(cybertrust_basic.get()); |
| 1041 | 1027 |
| 1042 scoped_refptr<X509Certificate> baltimore_root = | 1028 scoped_refptr<X509Certificate> baltimore_root = ImportCertFromFile( |
| 1043 ImportCertFromFile(GetTestCertsDirectory(), | 1029 GetTestCertsDirectory(), "cybertrust_baltimore_root.pem"); |
| 1044 "cybertrust_baltimore_root.pem"); | |
| 1045 ASSERT_TRUE(baltimore_root.get()); | 1030 ASSERT_TRUE(baltimore_root.get()); |
| 1046 | 1031 |
| 1047 ScopedTestRoot scoped_root(baltimore_root.get()); | 1032 ScopedTestRoot scoped_root(baltimore_root.get()); |
| 1048 | 1033 |
| 1049 // Ensure that ONLY the Baltimore CyberTrust Root is trusted. This | 1034 // Ensure that ONLY the Baltimore CyberTrust Root is trusted. This |
| 1050 // simulates Keychain removing support for the GTE CyberTrust Root. | 1035 // simulates Keychain removing support for the GTE CyberTrust Root. |
| 1051 TestRootCerts::GetInstance()->SetAllowSystemTrust(false); | 1036 TestRootCerts::GetInstance()->SetAllowSystemTrust(false); |
| 1052 base::ScopedClosureRunner reset_system_trust( | 1037 base::ScopedClosureRunner reset_system_trust( |
| 1053 base::Bind(&TestRootCerts::SetAllowSystemTrust, | 1038 base::Bind(&TestRootCerts::SetAllowSystemTrust, |
| 1054 base::Unretained(TestRootCerts::GetInstance()), | 1039 base::Unretained(TestRootCerts::GetInstance()), |
| 1055 true)); | 1040 true)); |
| 1056 | 1041 |
| 1057 // First, make sure a simple certificate chain from | 1042 // First, make sure a simple certificate chain from |
| 1058 // EE -> Public SureServer SV -> Baltimore CyberTrust | 1043 // EE -> Public SureServer SV -> Baltimore CyberTrust |
| 1059 // works. Only the first two certificates are included in the chain. | 1044 // works. Only the first two certificates are included in the chain. |
| 1060 int flags = 0; | 1045 int flags = 0; |
| 1061 CertVerifyResult verify_result; | 1046 CertVerifyResult verify_result; |
| 1062 int error = Verify(cybertrust_basic.get(), | 1047 int error = Verify(cybertrust_basic.get(), |
| 1063 "cacert.omniroot.com", | 1048 "cacert.omniroot.com", |
| 1064 flags, | 1049 flags, |
| 1065 NULL, | 1050 NULL, |
| 1066 empty_cert_list_, | 1051 empty_cert_list_, |
| 1067 &verify_result); | 1052 &verify_result); |
| 1068 EXPECT_EQ(OK, error); | 1053 EXPECT_EQ(OK, error); |
| 1069 EXPECT_EQ(0U, verify_result.cert_status); | 1054 EXPECT_EQ(0U, verify_result.cert_status); |
| 1070 | 1055 |
| 1071 // Attempt to verify with the first known cross-certified intermediate | 1056 // Attempt to verify with the first known cross-certified intermediate |
| 1072 // provided. | 1057 // provided. |
| 1073 scoped_refptr<X509Certificate> baltimore_intermediate_1 = | 1058 scoped_refptr<X509Certificate> baltimore_intermediate_1 = ImportCertFromFile( |
| 1074 ImportCertFromFile(GetTestCertsDirectory(), | 1059 GetTestCertsDirectory(), "cybertrust_baltimore_cross_certified_1.pem"); |
| 1075 "cybertrust_baltimore_cross_certified_1.pem"); | |
| 1076 ASSERT_TRUE(baltimore_intermediate_1.get()); | 1060 ASSERT_TRUE(baltimore_intermediate_1.get()); |
| 1077 | 1061 |
| 1078 X509Certificate::OSCertHandles intermediate_chain_1 = | 1062 X509Certificate::OSCertHandles intermediate_chain_1 = |
| 1079 cybertrust_basic->GetIntermediateCertificates(); | 1063 cybertrust_basic->GetIntermediateCertificates(); |
| 1080 intermediate_chain_1.push_back(baltimore_intermediate_1->os_cert_handle()); | 1064 intermediate_chain_1.push_back(baltimore_intermediate_1->os_cert_handle()); |
| 1081 | 1065 |
| 1082 scoped_refptr<X509Certificate> baltimore_chain_1 = | 1066 scoped_refptr<X509Certificate> baltimore_chain_1 = |
| 1083 X509Certificate::CreateFromHandle(cybertrust_basic->os_cert_handle(), | 1067 X509Certificate::CreateFromHandle(cybertrust_basic->os_cert_handle(), |
| 1084 intermediate_chain_1); | 1068 intermediate_chain_1); |
| 1085 error = Verify(baltimore_chain_1.get(), | 1069 error = Verify(baltimore_chain_1.get(), |
| 1086 "cacert.omniroot.com", | 1070 "cacert.omniroot.com", |
| 1087 flags, | 1071 flags, |
| 1088 NULL, | 1072 NULL, |
| 1089 empty_cert_list_, | 1073 empty_cert_list_, |
| 1090 &verify_result); | 1074 &verify_result); |
| 1091 EXPECT_EQ(OK, error); | 1075 EXPECT_EQ(OK, error); |
| 1092 EXPECT_EQ(0U, verify_result.cert_status); | 1076 EXPECT_EQ(0U, verify_result.cert_status); |
| 1093 | 1077 |
| 1094 // Attempt to verify with the second known cross-certified intermediate | 1078 // Attempt to verify with the second known cross-certified intermediate |
| 1095 // provided. | 1079 // provided. |
| 1096 scoped_refptr<X509Certificate> baltimore_intermediate_2 = | 1080 scoped_refptr<X509Certificate> baltimore_intermediate_2 = ImportCertFromFile( |
| 1097 ImportCertFromFile(GetTestCertsDirectory(), | 1081 GetTestCertsDirectory(), "cybertrust_baltimore_cross_certified_2.pem"); |
| 1098 "cybertrust_baltimore_cross_certified_2.pem"); | |
| 1099 ASSERT_TRUE(baltimore_intermediate_2.get()); | 1082 ASSERT_TRUE(baltimore_intermediate_2.get()); |
| 1100 | 1083 |
| 1101 X509Certificate::OSCertHandles intermediate_chain_2 = | 1084 X509Certificate::OSCertHandles intermediate_chain_2 = |
| 1102 cybertrust_basic->GetIntermediateCertificates(); | 1085 cybertrust_basic->GetIntermediateCertificates(); |
| 1103 intermediate_chain_2.push_back(baltimore_intermediate_2->os_cert_handle()); | 1086 intermediate_chain_2.push_back(baltimore_intermediate_2->os_cert_handle()); |
| 1104 | 1087 |
| 1105 scoped_refptr<X509Certificate> baltimore_chain_2 = | 1088 scoped_refptr<X509Certificate> baltimore_chain_2 = |
| 1106 X509Certificate::CreateFromHandle(cybertrust_basic->os_cert_handle(), | 1089 X509Certificate::CreateFromHandle(cybertrust_basic->os_cert_handle(), |
| 1107 intermediate_chain_2); | 1090 intermediate_chain_2); |
| 1108 error = Verify(baltimore_chain_2.get(), | 1091 error = Verify(baltimore_chain_2.get(), |
| 1109 "cacert.omniroot.com", | 1092 "cacert.omniroot.com", |
| 1110 flags, | 1093 flags, |
| 1111 NULL, | 1094 NULL, |
| 1112 empty_cert_list_, | 1095 empty_cert_list_, |
| 1113 &verify_result); | 1096 &verify_result); |
| 1114 EXPECT_EQ(OK, error); | 1097 EXPECT_EQ(OK, error); |
| 1115 EXPECT_EQ(0U, verify_result.cert_status); | 1098 EXPECT_EQ(0U, verify_result.cert_status); |
| 1116 | 1099 |
| 1117 // Attempt to verify when both a cross-certified intermediate AND | 1100 // Attempt to verify when both a cross-certified intermediate AND |
| 1118 // the legacy GTE root are provided. | 1101 // the legacy GTE root are provided. |
| 1119 scoped_refptr<X509Certificate> cybertrust_root = | 1102 scoped_refptr<X509Certificate> cybertrust_root = |
| 1120 ImportCertFromFile(GetTestCertsDirectory(), | 1103 ImportCertFromFile(GetTestCertsDirectory(), "cybertrust_gte_root.pem"); |
| 1121 "cybertrust_gte_root.pem"); | |
| 1122 ASSERT_TRUE(cybertrust_root.get()); | 1104 ASSERT_TRUE(cybertrust_root.get()); |
| 1123 | 1105 |
| 1124 intermediate_chain_2.push_back(cybertrust_root->os_cert_handle()); | 1106 intermediate_chain_2.push_back(cybertrust_root->os_cert_handle()); |
| 1125 scoped_refptr<X509Certificate> baltimore_chain_with_root = | 1107 scoped_refptr<X509Certificate> baltimore_chain_with_root = |
| 1126 X509Certificate::CreateFromHandle(cybertrust_basic->os_cert_handle(), | 1108 X509Certificate::CreateFromHandle(cybertrust_basic->os_cert_handle(), |
| 1127 intermediate_chain_2); | 1109 intermediate_chain_2); |
| 1128 error = Verify(baltimore_chain_with_root.get(), | 1110 error = Verify(baltimore_chain_with_root.get(), |
| 1129 "cacert.omniroot.com", | 1111 "cacert.omniroot.com", |
| 1130 flags, | 1112 flags, |
| 1131 NULL, | 1113 NULL, |
| 1132 empty_cert_list_, | 1114 empty_cert_list_, |
| 1133 &verify_result); | 1115 &verify_result); |
| 1134 EXPECT_EQ(OK, error); | 1116 EXPECT_EQ(OK, error); |
| 1135 EXPECT_EQ(0U, verify_result.cert_status); | 1117 EXPECT_EQ(0U, verify_result.cert_status); |
| 1136 | 1118 |
| 1137 TestRootCerts::GetInstance()->Clear(); | 1119 TestRootCerts::GetInstance()->Clear(); |
| 1138 EXPECT_TRUE(TestRootCerts::GetInstance()->IsEmpty()); | 1120 EXPECT_TRUE(TestRootCerts::GetInstance()->IsEmpty()); |
| 1139 } | 1121 } |
| 1140 #endif | 1122 #endif |
| 1141 | 1123 |
| 1142 #if defined(USE_NSS) || defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) | 1124 #if defined(USE_NSS) || defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) |
| 1143 static const uint8 kCRLSetLeafSPKIBlocked[] = { | 1125 static const uint8 kCRLSetLeafSPKIBlocked[] = { |
| 1144 0x8e, 0x00, 0x7b, 0x22, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, | 1126 0x8e, 0x00, 0x7b, 0x22, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, |
| 1145 0x30, 0x2c, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, | 1127 0x3a, 0x30, 0x2c, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, |
| 1146 0x65, 0x22, 0x3a, 0x22, 0x43, 0x52, 0x4c, 0x53, 0x65, 0x74, 0x22, 0x2c, 0x22, | 1128 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x43, 0x52, 0x4c, 0x53, 0x65, 0x74, |
| 1147 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, | 1129 0x22, 0x2c, 0x22, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, |
| 1148 0x44, 0x65, 0x6c, 0x74, 0x61, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x3a, 0x30, 0x2c, | 1130 0x3a, 0x30, 0x2c, 0x22, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x46, 0x72, 0x6f, |
| 1149 0x22, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, | 1131 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, |
| 1150 0x30, 0x2c, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b, | 1132 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x42, 0x6c, 0x6f, |
| 1151 0x49, 0x73, 0x22, 0x3a, 0x5b, 0x22, 0x43, 0x38, 0x4d, 0x4a, 0x46, 0x55, 0x55, | 1133 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b, 0x49, 0x73, 0x22, 0x3a, 0x5b, |
| 1152 0x5a, 0x38, 0x43, 0x79, 0x54, 0x2b, 0x4e, 0x57, 0x64, 0x68, 0x69, 0x7a, 0x51, | 1134 0x22, 0x43, 0x38, 0x4d, 0x4a, 0x46, 0x55, 0x55, 0x5a, 0x38, 0x43, 0x79, |
| 1153 0x68, 0x54, 0x49, 0x65, 0x46, 0x49, 0x37, 0x76, 0x41, 0x77, 0x7a, 0x64, 0x54, | 1135 0x54, 0x2b, 0x4e, 0x57, 0x64, 0x68, 0x69, 0x7a, 0x51, 0x68, 0x54, 0x49, |
| 1154 0x79, 0x52, 0x59, 0x45, 0x6e, 0x78, 0x6c, 0x33, 0x62, 0x67, 0x3d, 0x22, 0x5d, | 1136 0x65, 0x46, 0x49, 0x37, 0x76, 0x41, 0x77, 0x7a, 0x64, 0x54, 0x79, 0x52, |
| 1155 0x7d, | 1137 0x59, 0x45, 0x6e, 0x78, 0x6c, 0x33, 0x62, 0x67, 0x3d, 0x22, 0x5d, 0x7d, |
| 1156 }; | 1138 }; |
| 1157 | 1139 |
| 1158 static const uint8 kCRLSetLeafSerialBlocked[] = { | 1140 static const uint8 kCRLSetLeafSerialBlocked[] = { |
| 1159 0x60, 0x00, 0x7b, 0x22, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, | 1141 0x60, 0x00, 0x7b, 0x22, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, |
| 1160 0x30, 0x2c, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, | 1142 0x3a, 0x30, 0x2c, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, |
| 1161 0x65, 0x22, 0x3a, 0x22, 0x43, 0x52, 0x4c, 0x53, 0x65, 0x74, 0x22, 0x2c, 0x22, | 1143 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x43, 0x52, 0x4c, 0x53, 0x65, 0x74, |
| 1162 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, | 1144 0x22, 0x2c, 0x22, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, |
| 1163 0x44, 0x65, 0x6c, 0x74, 0x61, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x3a, 0x30, 0x2c, | 1145 0x3a, 0x30, 0x2c, 0x22, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x46, 0x72, 0x6f, |
| 1164 0x22, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, | 1146 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, |
| 1165 0x31, 0x2c, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b, | 1147 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, 0x31, 0x2c, 0x22, 0x42, 0x6c, 0x6f, |
| 1166 0x49, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0x0f, 0x87, 0xe4, 0xc7, 0x75, 0xea, | 1148 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b, 0x49, 0x73, 0x22, 0x3a, 0x5b, |
| 1167 0x46, 0x7e, 0xf3, 0xfd, 0x82, 0xb7, 0x46, 0x7b, 0x10, 0xda, 0xc5, 0xbf, 0xd8, | 1149 0x5d, 0x7d, 0x0f, 0x87, 0xe4, 0xc7, 0x75, 0xea, 0x46, 0x7e, 0xf3, 0xfd, |
| 1168 0xd1, 0x29, 0xb2, 0xc6, 0xac, 0x7f, 0x51, 0x42, 0x15, 0x28, 0x51, 0x06, 0x7f, | 1150 0x82, 0xb7, 0x46, 0x7b, 0x10, 0xda, 0xc5, 0xbf, 0xd8, 0xd1, 0x29, 0xb2, |
| 1169 0x01, 0x00, 0x00, 0x00, // number of serials | 1151 0xc6, 0xac, 0x7f, 0x51, 0x42, 0x15, 0x28, 0x51, 0x06, 0x7f, 0x01, 0x00, |
| 1170 0x01, 0xed, // serial 0xed | 1152 0x00, 0x00, // number of serials |
| 1153 0x01, 0xed, // serial 0xed |
| 1171 }; | 1154 }; |
| 1172 | 1155 |
| 1173 static const uint8 kCRLSetQUICSerialBlocked[] = { | 1156 static const uint8 kCRLSetQUICSerialBlocked[] = { |
| 1174 0x60, 0x00, 0x7b, 0x22, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, | 1157 0x60, 0x00, 0x7b, 0x22, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, |
| 1175 0x30, 0x2c, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, | 1158 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, |
| 1176 0x65, 0x22, 0x3a, 0x22, 0x43, 0x52, 0x4c, 0x53, 0x65, 0x74, 0x22, 0x2c, 0x22, | 1159 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x43, 0x52, 0x4c, |
| 1177 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, | 1160 0x53, 0x65, 0x74, 0x22, 0x2c, 0x22, 0x53, 0x65, 0x71, 0x75, 0x65, |
| 1178 0x44, 0x65, 0x6c, 0x74, 0x61, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x3a, 0x30, 0x2c, | 1161 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x30, 0x2c, 0x22, 0x44, 0x65, 0x6c, |
| 1179 0x22, 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3a, | 1162 0x74, 0x61, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x3a, 0x30, 0x2c, 0x22, |
| 1180 0x31, 0x2c, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b, | 1163 0x4e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x22, |
| 1181 0x49, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, | 1164 0x3a, 0x31, 0x2c, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, |
| 1182 // Issuer SPKI SHA-256 hash: | 1165 0x53, 0x50, 0x4b, 0x49, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, |
| 1183 0xe4, 0x3a, 0xa3, 0xdb, 0x98, 0x31, 0x61, 0x05, 0xdd, 0x57, 0x6d, 0xc6, 0x2f, | 1166 // Issuer SPKI SHA-256 hash: |
| 1184 0x71, 0x26, 0xba, 0xdd, 0xf4, 0x98, 0x3e, 0x62, 0x22, 0xf8, 0xf9, 0xe4, 0x18, | 1167 0xe4, 0x3a, 0xa3, 0xdb, 0x98, 0x31, 0x61, 0x05, 0xdd, 0x57, 0x6d, |
| 1185 0x62, 0x77, 0x79, 0xdb, 0x9b, 0x31, | 1168 0xc6, 0x2f, 0x71, 0x26, 0xba, 0xdd, 0xf4, 0x98, 0x3e, 0x62, 0x22, |
| 1186 0x01, 0x00, 0x00, 0x00, // number of serials | 1169 0xf8, 0xf9, 0xe4, 0x18, 0x62, 0x77, 0x79, 0xdb, 0x9b, 0x31, 0x01, |
| 1187 0x01, 0x03, // serial 3 | 1170 0x00, 0x00, 0x00, // number of serials |
| 1171 0x01, 0x03, // serial 3 |
| 1188 }; | 1172 }; |
| 1189 | 1173 |
| 1190 // Test that CRLSets are effective in making a certificate appear to be | 1174 // Test that CRLSets are effective in making a certificate appear to be |
| 1191 // revoked. | 1175 // revoked. |
| 1192 TEST_F(CertVerifyProcTest, CRLSet) { | 1176 TEST_F(CertVerifyProcTest, CRLSet) { |
| 1193 CertificateList ca_cert_list = | 1177 CertificateList ca_cert_list = |
| 1194 CreateCertificateListFromFile(GetTestCertsDirectory(), | 1178 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 1195 "root_ca_cert.pem", | 1179 "root_ca_cert.pem", |
| 1196 X509Certificate::FORMAT_AUTO); | 1180 X509Certificate::FORMAT_AUTO); |
| 1197 ASSERT_EQ(1U, ca_cert_list.size()); | 1181 ASSERT_EQ(1U, ca_cert_list.size()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1234 error = Verify(cert.get(), | 1218 error = Verify(cert.get(), |
| 1235 "127.0.0.1", | 1219 "127.0.0.1", |
| 1236 flags, | 1220 flags, |
| 1237 crl_set.get(), | 1221 crl_set.get(), |
| 1238 empty_cert_list_, | 1222 empty_cert_list_, |
| 1239 &verify_result); | 1223 &verify_result); |
| 1240 EXPECT_EQ(ERR_CERT_REVOKED, error); | 1224 EXPECT_EQ(ERR_CERT_REVOKED, error); |
| 1241 } | 1225 } |
| 1242 | 1226 |
| 1243 TEST_F(CertVerifyProcTest, CRLSetLeafSerial) { | 1227 TEST_F(CertVerifyProcTest, CRLSetLeafSerial) { |
| 1244 CertificateList ca_cert_list = | 1228 CertificateList ca_cert_list = CreateCertificateListFromFile( |
| 1245 CreateCertificateListFromFile(GetTestCertsDirectory(), | 1229 GetTestCertsDirectory(), "quic_root.crt", X509Certificate::FORMAT_AUTO); |
| 1246 "quic_root.crt", | |
| 1247 X509Certificate::FORMAT_AUTO); | |
| 1248 ASSERT_EQ(1U, ca_cert_list.size()); | 1230 ASSERT_EQ(1U, ca_cert_list.size()); |
| 1249 ScopedTestRoot test_root(ca_cert_list[0]); | 1231 ScopedTestRoot test_root(ca_cert_list[0]); |
| 1250 | 1232 |
| 1251 CertificateList intermediate_cert_list = | 1233 CertificateList intermediate_cert_list = |
| 1252 CreateCertificateListFromFile(GetTestCertsDirectory(), | 1234 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 1253 "quic_intermediate.crt", | 1235 "quic_intermediate.crt", |
| 1254 X509Certificate::FORMAT_AUTO); | 1236 X509Certificate::FORMAT_AUTO); |
| 1255 ASSERT_EQ(1U, intermediate_cert_list.size()); | 1237 ASSERT_EQ(1U, intermediate_cert_list.size()); |
| 1256 X509Certificate::OSCertHandles intermediates; | 1238 X509Certificate::OSCertHandles intermediates; |
| 1257 intermediates.push_back(intermediate_cert_list[0]->os_cert_handle()); | 1239 intermediates.push_back(intermediate_cert_list[0]->os_cert_handle()); |
| 1258 | 1240 |
| 1259 CertificateList cert_list = CreateCertificateListFromFile( | 1241 CertificateList cert_list = |
| 1260 GetTestCertsDirectory(), "quic_test.example.com.crt", | 1242 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 1261 X509Certificate::FORMAT_AUTO); | 1243 "quic_test.example.com.crt", |
| 1244 X509Certificate::FORMAT_AUTO); |
| 1262 ASSERT_EQ(1U, cert_list.size()); | 1245 ASSERT_EQ(1U, cert_list.size()); |
| 1263 | 1246 |
| 1264 scoped_refptr<X509Certificate> leaf = | 1247 scoped_refptr<X509Certificate> leaf = X509Certificate::CreateFromHandle( |
| 1265 X509Certificate::CreateFromHandle(cert_list[0]->os_cert_handle(), | 1248 cert_list[0]->os_cert_handle(), intermediates); |
| 1266 intermediates); | |
| 1267 | 1249 |
| 1268 int flags = 0; | 1250 int flags = 0; |
| 1269 CertVerifyResult verify_result; | 1251 CertVerifyResult verify_result; |
| 1270 int error = Verify(leaf.get(), | 1252 int error = Verify(leaf.get(), |
| 1271 "test.example.com", | 1253 "test.example.com", |
| 1272 flags, | 1254 flags, |
| 1273 NULL, | 1255 NULL, |
| 1274 empty_cert_list_, | 1256 empty_cert_list_, |
| 1275 &verify_result); | 1257 &verify_result); |
| 1276 EXPECT_EQ(OK, error); | 1258 EXPECT_EQ(OK, error); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 CertVerifyProcWeakDigestTest() {} | 1302 CertVerifyProcWeakDigestTest() {} |
| 1321 virtual ~CertVerifyProcWeakDigestTest() {} | 1303 virtual ~CertVerifyProcWeakDigestTest() {} |
| 1322 }; | 1304 }; |
| 1323 | 1305 |
| 1324 TEST_P(CertVerifyProcWeakDigestTest, Verify) { | 1306 TEST_P(CertVerifyProcWeakDigestTest, Verify) { |
| 1325 WeakDigestTestData data = GetParam(); | 1307 WeakDigestTestData data = GetParam(); |
| 1326 base::FilePath certs_dir = GetTestCertsDirectory(); | 1308 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 1327 | 1309 |
| 1328 ScopedTestRoot test_root; | 1310 ScopedTestRoot test_root; |
| 1329 if (data.root_cert_filename) { | 1311 if (data.root_cert_filename) { |
| 1330 scoped_refptr<X509Certificate> root_cert = | 1312 scoped_refptr<X509Certificate> root_cert = |
| 1331 ImportCertFromFile(certs_dir, data.root_cert_filename); | 1313 ImportCertFromFile(certs_dir, data.root_cert_filename); |
| 1332 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert); | 1314 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert); |
| 1333 test_root.Reset(root_cert.get()); | 1315 test_root.Reset(root_cert.get()); |
| 1334 } | 1316 } |
| 1335 | 1317 |
| 1336 scoped_refptr<X509Certificate> intermediate_cert = | 1318 scoped_refptr<X509Certificate> intermediate_cert = |
| 1337 ImportCertFromFile(certs_dir, data.intermediate_cert_filename); | 1319 ImportCertFromFile(certs_dir, data.intermediate_cert_filename); |
| 1338 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); | 1320 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); |
| 1339 scoped_refptr<X509Certificate> ee_cert = | 1321 scoped_refptr<X509Certificate> ee_cert = |
| 1340 ImportCertFromFile(certs_dir, data.ee_cert_filename); | 1322 ImportCertFromFile(certs_dir, data.ee_cert_filename); |
| 1341 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert); | 1323 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert); |
| 1342 | 1324 |
| 1343 X509Certificate::OSCertHandles intermediates; | 1325 X509Certificate::OSCertHandles intermediates; |
| 1344 intermediates.push_back(intermediate_cert->os_cert_handle()); | 1326 intermediates.push_back(intermediate_cert->os_cert_handle()); |
| 1345 | 1327 |
| 1346 scoped_refptr<X509Certificate> ee_chain = | 1328 scoped_refptr<X509Certificate> ee_chain = X509Certificate::CreateFromHandle( |
| 1347 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(), | 1329 ee_cert->os_cert_handle(), intermediates); |
| 1348 intermediates); | |
| 1349 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain); | 1330 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain); |
| 1350 | 1331 |
| 1351 int flags = 0; | 1332 int flags = 0; |
| 1352 CertVerifyResult verify_result; | 1333 CertVerifyResult verify_result; |
| 1353 int rv = Verify(ee_chain.get(), | 1334 int rv = Verify(ee_chain.get(), |
| 1354 "127.0.0.1", | 1335 "127.0.0.1", |
| 1355 flags, | 1336 flags, |
| 1356 NULL, | 1337 NULL, |
| 1357 empty_cert_list_, | 1338 empty_cert_list_, |
| 1358 &verify_result); | 1339 &verify_result); |
| 1359 EXPECT_EQ(data.expected_has_md5, verify_result.has_md5); | 1340 EXPECT_EQ(data.expected_has_md5, verify_result.has_md5); |
| 1360 EXPECT_EQ(data.expected_has_md4, verify_result.has_md4); | 1341 EXPECT_EQ(data.expected_has_md4, verify_result.has_md4); |
| 1361 EXPECT_EQ(data.expected_has_md2, verify_result.has_md2); | 1342 EXPECT_EQ(data.expected_has_md2, verify_result.has_md2); |
| 1362 EXPECT_FALSE(verify_result.is_issued_by_additional_trust_anchor); | 1343 EXPECT_FALSE(verify_result.is_issued_by_additional_trust_anchor); |
| 1363 | 1344 |
| 1364 // Ensure that MD4 and MD2 are tagged as invalid. | 1345 // Ensure that MD4 and MD2 are tagged as invalid. |
| 1365 if (data.expected_has_md4 || data.expected_has_md2) { | 1346 if (data.expected_has_md4 || data.expected_has_md2) { |
| 1366 EXPECT_EQ(CERT_STATUS_INVALID, | 1347 EXPECT_EQ(CERT_STATUS_INVALID, |
| 1367 verify_result.cert_status & CERT_STATUS_INVALID); | 1348 verify_result.cert_status & CERT_STATUS_INVALID); |
| 1368 } | 1349 } |
| 1369 | 1350 |
| 1370 // Ensure that MD5 is flagged as weak. | 1351 // Ensure that MD5 is flagged as weak. |
| 1371 if (data.expected_has_md5) { | 1352 if (data.expected_has_md5) { |
| 1372 EXPECT_EQ( | 1353 EXPECT_EQ(CERT_STATUS_WEAK_SIGNATURE_ALGORITHM, |
| 1373 CERT_STATUS_WEAK_SIGNATURE_ALGORITHM, | 1354 verify_result.cert_status & CERT_STATUS_WEAK_SIGNATURE_ALGORITHM); |
| 1374 verify_result.cert_status & CERT_STATUS_WEAK_SIGNATURE_ALGORITHM); | |
| 1375 } | 1355 } |
| 1376 | 1356 |
| 1377 // If a root cert is present, then check that the chain was rejected if any | 1357 // If a root cert is present, then check that the chain was rejected if any |
| 1378 // weak algorithms are present. This is only checked when a root cert is | 1358 // weak algorithms are present. This is only checked when a root cert is |
| 1379 // present because the error reported for incomplete chains with weak | 1359 // present because the error reported for incomplete chains with weak |
| 1380 // algorithms depends on which implementation was used to validate (NSS, | 1360 // algorithms depends on which implementation was used to validate (NSS, |
| 1381 // OpenSSL, CryptoAPI, Security.framework) and upon which weak algorithm | 1361 // OpenSSL, CryptoAPI, Security.framework) and upon which weak algorithm |
| 1382 // present (MD2, MD4, MD5). | 1362 // present (MD2, MD4, MD5). |
| 1383 if (data.root_cert_filename) { | 1363 if (data.root_cert_filename) { |
| 1384 if (data.expected_has_md4 || data.expected_has_md2) { | 1364 if (data.expected_has_md4 || data.expected_has_md2) { |
| 1385 EXPECT_EQ(ERR_CERT_INVALID, rv); | 1365 EXPECT_EQ(ERR_CERT_INVALID, rv); |
| 1386 } else if (data.expected_has_md5) { | 1366 } else if (data.expected_has_md5) { |
| 1387 EXPECT_EQ(ERR_CERT_WEAK_SIGNATURE_ALGORITHM, rv); | 1367 EXPECT_EQ(ERR_CERT_WEAK_SIGNATURE_ALGORITHM, rv); |
| 1388 } else { | 1368 } else { |
| 1389 EXPECT_EQ(OK, rv); | 1369 EXPECT_EQ(OK, rv); |
| 1390 } | 1370 } |
| 1391 } | 1371 } |
| 1392 } | 1372 } |
| 1393 | 1373 |
| 1394 // Unlike TEST/TEST_F, which are macros that expand to further macros, | 1374 // Unlike TEST/TEST_F, which are macros that expand to further macros, |
| 1395 // INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that | 1375 // INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that |
| 1396 // stringizes the arguments. As a result, macros passed as parameters (such as | 1376 // stringizes the arguments. As a result, macros passed as parameters (such as |
| 1397 // prefix or test_case_name) will not be expanded by the preprocessor. To work | 1377 // prefix or test_case_name) will not be expanded by the preprocessor. To work |
| 1398 // around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the | 1378 // around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the |
| 1399 // pre-processor will expand macros such as MAYBE_test_name before | 1379 // pre-processor will expand macros such as MAYBE_test_name before |
| 1400 // instantiating the test. | 1380 // instantiating the test. |
| 1401 #define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ | 1381 #define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ |
| 1402 INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) | 1382 INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) |
| 1403 | 1383 |
| 1404 // The signature algorithm of the root CA should not matter. | 1384 // The signature algorithm of the root CA should not matter. |
| 1405 const WeakDigestTestData kVerifyRootCATestData[] = { | 1385 const WeakDigestTestData kVerifyRootCATestData[] = { |
| 1406 { "weak_digest_md5_root.pem", "weak_digest_sha1_intermediate.pem", | 1386 {"weak_digest_md5_root.pem", "weak_digest_sha1_intermediate.pem", |
| 1407 "weak_digest_sha1_ee.pem", false, false, false }, | 1387 "weak_digest_sha1_ee.pem", false, false, false}, |
| 1408 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) | 1388 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) |
| 1409 // MD4 is not supported by OS X / NSS | 1389 // MD4 is not supported by OS X / NSS |
| 1410 { "weak_digest_md4_root.pem", "weak_digest_sha1_intermediate.pem", | 1390 {"weak_digest_md4_root.pem", "weak_digest_sha1_intermediate.pem", |
| 1411 "weak_digest_sha1_ee.pem", false, false, false }, | 1391 "weak_digest_sha1_ee.pem", false, false, false}, |
| 1412 #endif | 1392 #endif |
| 1413 { "weak_digest_md2_root.pem", "weak_digest_sha1_intermediate.pem", | 1393 {"weak_digest_md2_root.pem", "weak_digest_sha1_intermediate.pem", |
| 1414 "weak_digest_sha1_ee.pem", false, false, false }, | 1394 "weak_digest_sha1_ee.pem", false, false, false}, |
| 1415 }; | 1395 }; |
| 1416 INSTANTIATE_TEST_CASE_P(VerifyRoot, CertVerifyProcWeakDigestTest, | 1396 INSTANTIATE_TEST_CASE_P(VerifyRoot, |
| 1397 CertVerifyProcWeakDigestTest, |
| 1417 testing::ValuesIn(kVerifyRootCATestData)); | 1398 testing::ValuesIn(kVerifyRootCATestData)); |
| 1418 | 1399 |
| 1419 // The signature algorithm of intermediates should be properly detected. | 1400 // The signature algorithm of intermediates should be properly detected. |
| 1420 const WeakDigestTestData kVerifyIntermediateCATestData[] = { | 1401 const WeakDigestTestData kVerifyIntermediateCATestData[] = { |
| 1421 { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem", | 1402 {"weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem", |
| 1422 "weak_digest_sha1_ee.pem", true, false, false }, | 1403 "weak_digest_sha1_ee.pem", true, false, false}, |
| 1423 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) | 1404 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) |
| 1424 // MD4 is not supported by OS X / NSS | 1405 // MD4 is not supported by OS X / NSS |
| 1425 { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem", | 1406 {"weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem", |
| 1426 "weak_digest_sha1_ee.pem", false, true, false }, | 1407 "weak_digest_sha1_ee.pem", false, true, false}, |
| 1427 #endif | 1408 #endif |
| 1428 { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem", | 1409 {"weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem", |
| 1429 "weak_digest_sha1_ee.pem", false, false, true }, | 1410 "weak_digest_sha1_ee.pem", false, false, true}, |
| 1430 }; | 1411 }; |
| 1431 // Disabled on NSS - MD4 is not supported, and MD2 and MD5 are disabled. | 1412 // Disabled on NSS - MD4 is not supported, and MD2 and MD5 are disabled. |
| 1432 #if defined(USE_NSS) || defined(OS_IOS) | 1413 #if defined(USE_NSS) || defined(OS_IOS) |
| 1433 #define MAYBE_VerifyIntermediate DISABLED_VerifyIntermediate | 1414 #define MAYBE_VerifyIntermediate DISABLED_VerifyIntermediate |
| 1434 #else | 1415 #else |
| 1435 #define MAYBE_VerifyIntermediate VerifyIntermediate | 1416 #define MAYBE_VerifyIntermediate VerifyIntermediate |
| 1436 #endif | 1417 #endif |
| 1437 WRAPPED_INSTANTIATE_TEST_CASE_P( | 1418 WRAPPED_INSTANTIATE_TEST_CASE_P( |
| 1438 MAYBE_VerifyIntermediate, | 1419 MAYBE_VerifyIntermediate, |
| 1439 CertVerifyProcWeakDigestTest, | 1420 CertVerifyProcWeakDigestTest, |
| 1440 testing::ValuesIn(kVerifyIntermediateCATestData)); | 1421 testing::ValuesIn(kVerifyIntermediateCATestData)); |
| 1441 | 1422 |
| 1442 // The signature algorithm of end-entity should be properly detected. | 1423 // The signature algorithm of end-entity should be properly detected. |
| 1443 const WeakDigestTestData kVerifyEndEntityTestData[] = { | 1424 const WeakDigestTestData kVerifyEndEntityTestData[] = { |
| 1444 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", | 1425 {"weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", |
| 1445 "weak_digest_md5_ee.pem", true, false, false }, | 1426 "weak_digest_md5_ee.pem", true, false, false}, |
| 1446 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) | 1427 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) |
| 1447 // MD4 is not supported by OS X / NSS | 1428 // MD4 is not supported by OS X / NSS |
| 1448 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", | 1429 {"weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", |
| 1449 "weak_digest_md4_ee.pem", false, true, false }, | 1430 "weak_digest_md4_ee.pem", false, true, false}, |
| 1450 #endif | 1431 #endif |
| 1451 { "weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", | 1432 {"weak_digest_sha1_root.pem", "weak_digest_sha1_intermediate.pem", |
| 1452 "weak_digest_md2_ee.pem", false, false, true }, | 1433 "weak_digest_md2_ee.pem", false, false, true}, |
| 1453 }; | 1434 }; |
| 1454 // Disabled on NSS - NSS caches chains/signatures in such a way that cannot | 1435 // Disabled on NSS - NSS caches chains/signatures in such a way that cannot |
| 1455 // be cleared until NSS is cleanly shutdown, which is not presently supported | 1436 // be cleared until NSS is cleanly shutdown, which is not presently supported |
| 1456 // in Chromium. | 1437 // in Chromium. |
| 1457 #if defined(USE_NSS) || defined(OS_IOS) | 1438 #if defined(USE_NSS) || defined(OS_IOS) |
| 1458 #define MAYBE_VerifyEndEntity DISABLED_VerifyEndEntity | 1439 #define MAYBE_VerifyEndEntity DISABLED_VerifyEndEntity |
| 1459 #else | 1440 #else |
| 1460 #define MAYBE_VerifyEndEntity VerifyEndEntity | 1441 #define MAYBE_VerifyEndEntity VerifyEndEntity |
| 1461 #endif | 1442 #endif |
| 1462 WRAPPED_INSTANTIATE_TEST_CASE_P(MAYBE_VerifyEndEntity, | 1443 WRAPPED_INSTANTIATE_TEST_CASE_P(MAYBE_VerifyEndEntity, |
| 1463 CertVerifyProcWeakDigestTest, | 1444 CertVerifyProcWeakDigestTest, |
| 1464 testing::ValuesIn(kVerifyEndEntityTestData)); | 1445 testing::ValuesIn(kVerifyEndEntityTestData)); |
| 1465 | 1446 |
| 1466 // Incomplete chains should still report the status of the intermediate. | 1447 // Incomplete chains should still report the status of the intermediate. |
| 1467 const WeakDigestTestData kVerifyIncompleteIntermediateTestData[] = { | 1448 const WeakDigestTestData kVerifyIncompleteIntermediateTestData[] = { |
| 1468 { NULL, "weak_digest_md5_intermediate.pem", "weak_digest_sha1_ee.pem", | 1449 {NULL, "weak_digest_md5_intermediate.pem", "weak_digest_sha1_ee.pem", true, |
| 1469 true, false, false }, | 1450 false, false}, |
| 1470 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) | 1451 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) |
| 1471 // MD4 is not supported by OS X / NSS | 1452 // MD4 is not supported by OS X / NSS |
| 1472 { NULL, "weak_digest_md4_intermediate.pem", "weak_digest_sha1_ee.pem", | 1453 {NULL, "weak_digest_md4_intermediate.pem", "weak_digest_sha1_ee.pem", false, |
| 1473 false, true, false }, | 1454 true, false}, |
| 1474 #endif | 1455 #endif |
| 1475 { NULL, "weak_digest_md2_intermediate.pem", "weak_digest_sha1_ee.pem", | 1456 {NULL, "weak_digest_md2_intermediate.pem", "weak_digest_sha1_ee.pem", false, |
| 1476 false, false, true }, | 1457 false, true}, |
| 1477 }; | 1458 }; |
| 1478 // Disabled on NSS - libpkix does not return constructed chains on error, | 1459 // Disabled on NSS - libpkix does not return constructed chains on error, |
| 1479 // preventing us from detecting/inspecting the verified chain. | 1460 // preventing us from detecting/inspecting the verified chain. |
| 1480 #if defined(USE_NSS) || defined(OS_IOS) | 1461 #if defined(USE_NSS) || defined(OS_IOS) |
| 1481 #define MAYBE_VerifyIncompleteIntermediate \ | 1462 #define MAYBE_VerifyIncompleteIntermediate DISABLED_VerifyIncompleteIntermediate |
| 1482 DISABLED_VerifyIncompleteIntermediate | |
| 1483 #else | 1463 #else |
| 1484 #define MAYBE_VerifyIncompleteIntermediate VerifyIncompleteIntermediate | 1464 #define MAYBE_VerifyIncompleteIntermediate VerifyIncompleteIntermediate |
| 1485 #endif | 1465 #endif |
| 1486 WRAPPED_INSTANTIATE_TEST_CASE_P( | 1466 WRAPPED_INSTANTIATE_TEST_CASE_P( |
| 1487 MAYBE_VerifyIncompleteIntermediate, | 1467 MAYBE_VerifyIncompleteIntermediate, |
| 1488 CertVerifyProcWeakDigestTest, | 1468 CertVerifyProcWeakDigestTest, |
| 1489 testing::ValuesIn(kVerifyIncompleteIntermediateTestData)); | 1469 testing::ValuesIn(kVerifyIncompleteIntermediateTestData)); |
| 1490 | 1470 |
| 1491 // Incomplete chains should still report the status of the end-entity. | 1471 // Incomplete chains should still report the status of the end-entity. |
| 1492 const WeakDigestTestData kVerifyIncompleteEETestData[] = { | 1472 const WeakDigestTestData kVerifyIncompleteEETestData[] = { |
| 1493 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md5_ee.pem", | 1473 {NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md5_ee.pem", true, |
| 1494 true, false, false }, | 1474 false, false}, |
| 1495 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) | 1475 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) |
| 1496 // MD4 is not supported by OS X / NSS | 1476 // MD4 is not supported by OS X / NSS |
| 1497 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md4_ee.pem", | 1477 {NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md4_ee.pem", false, |
| 1498 false, true, false }, | 1478 true, false}, |
| 1499 #endif | 1479 #endif |
| 1500 { NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md2_ee.pem", | 1480 {NULL, "weak_digest_sha1_intermediate.pem", "weak_digest_md2_ee.pem", false, |
| 1501 false, false, true }, | 1481 false, true}, |
| 1502 }; | 1482 }; |
| 1503 // Disabled on NSS - libpkix does not return constructed chains on error, | 1483 // Disabled on NSS - libpkix does not return constructed chains on error, |
| 1504 // preventing us from detecting/inspecting the verified chain. | 1484 // preventing us from detecting/inspecting the verified chain. |
| 1505 #if defined(USE_NSS) || defined(OS_IOS) | 1485 #if defined(USE_NSS) || defined(OS_IOS) |
| 1506 #define MAYBE_VerifyIncompleteEndEntity DISABLED_VerifyIncompleteEndEntity | 1486 #define MAYBE_VerifyIncompleteEndEntity DISABLED_VerifyIncompleteEndEntity |
| 1507 #else | 1487 #else |
| 1508 #define MAYBE_VerifyIncompleteEndEntity VerifyIncompleteEndEntity | 1488 #define MAYBE_VerifyIncompleteEndEntity VerifyIncompleteEndEntity |
| 1509 #endif | 1489 #endif |
| 1510 WRAPPED_INSTANTIATE_TEST_CASE_P( | 1490 WRAPPED_INSTANTIATE_TEST_CASE_P(MAYBE_VerifyIncompleteEndEntity, |
| 1511 MAYBE_VerifyIncompleteEndEntity, | 1491 CertVerifyProcWeakDigestTest, |
| 1512 CertVerifyProcWeakDigestTest, | 1492 testing::ValuesIn(kVerifyIncompleteEETestData)); |
| 1513 testing::ValuesIn(kVerifyIncompleteEETestData)); | |
| 1514 | 1493 |
| 1515 // Differing algorithms between the intermediate and the EE should still be | 1494 // Differing algorithms between the intermediate and the EE should still be |
| 1516 // reported. | 1495 // reported. |
| 1517 const WeakDigestTestData kVerifyMixedTestData[] = { | 1496 const WeakDigestTestData kVerifyMixedTestData[] = { |
| 1518 { "weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem", | 1497 {"weak_digest_sha1_root.pem", "weak_digest_md5_intermediate.pem", |
| 1519 "weak_digest_md2_ee.pem", true, false, true }, | 1498 "weak_digest_md2_ee.pem", true, false, true}, |
| 1520 { "weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem", | 1499 {"weak_digest_sha1_root.pem", "weak_digest_md2_intermediate.pem", |
| 1521 "weak_digest_md5_ee.pem", true, false, true }, | 1500 "weak_digest_md5_ee.pem", true, false, true}, |
| 1522 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) | 1501 #if defined(USE_OPENSSL_CERTS) || defined(OS_WIN) |
| 1523 // MD4 is not supported by OS X / NSS | 1502 // MD4 is not supported by OS X / NSS |
| 1524 { "weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem", | 1503 {"weak_digest_sha1_root.pem", "weak_digest_md4_intermediate.pem", |
| 1525 "weak_digest_md2_ee.pem", false, true, true }, | 1504 "weak_digest_md2_ee.pem", false, true, true}, |
| 1526 #endif | 1505 #endif |
| 1527 }; | 1506 }; |
| 1528 // NSS does not support MD4 and does not enable MD2 by default, making all | 1507 // NSS does not support MD4 and does not enable MD2 by default, making all |
| 1529 // permutations invalid. | 1508 // permutations invalid. |
| 1530 #if defined(USE_NSS) || defined(OS_IOS) | 1509 #if defined(USE_NSS) || defined(OS_IOS) |
| 1531 #define MAYBE_VerifyMixed DISABLED_VerifyMixed | 1510 #define MAYBE_VerifyMixed DISABLED_VerifyMixed |
| 1532 #else | 1511 #else |
| 1533 #define MAYBE_VerifyMixed VerifyMixed | 1512 #define MAYBE_VerifyMixed VerifyMixed |
| 1534 #endif | 1513 #endif |
| 1535 WRAPPED_INSTANTIATE_TEST_CASE_P( | 1514 WRAPPED_INSTANTIATE_TEST_CASE_P(MAYBE_VerifyMixed, |
| 1536 MAYBE_VerifyMixed, | 1515 CertVerifyProcWeakDigestTest, |
| 1537 CertVerifyProcWeakDigestTest, | 1516 testing::ValuesIn(kVerifyMixedTestData)); |
| 1538 testing::ValuesIn(kVerifyMixedTestData)); | |
| 1539 | 1517 |
| 1540 // For the list of valid hostnames, see | 1518 // For the list of valid hostnames, see |
| 1541 // net/cert/data/ssl/certificates/subjectAltName_sanity_check.pem | 1519 // net/cert/data/ssl/certificates/subjectAltName_sanity_check.pem |
| 1542 static const struct CertVerifyProcNameData { | 1520 static const struct CertVerifyProcNameData { |
| 1543 const char* hostname; | 1521 const char* hostname; |
| 1544 bool valid; // Whether or not |hostname| matches a subjectAltName. | 1522 bool valid; // Whether or not |hostname| matches a subjectAltName. |
| 1545 } kVerifyNameData[] = { | 1523 } kVerifyNameData[] = { |
| 1546 { "127.0.0.1", false }, // Don't match the common name | 1524 {"127.0.0.1", false}, // Don't match the common name |
| 1547 { "127.0.0.2", true }, // Matches the iPAddress SAN (IPv4) | 1525 {"127.0.0.2", true}, // Matches the iPAddress SAN (IPv4) |
| 1548 { "FE80:0:0:0:0:0:0:1", true }, // Matches the iPAddress SAN (IPv6) | 1526 {"FE80:0:0:0:0:0:0:1", true}, // Matches the iPAddress SAN (IPv6) |
| 1549 { "[FE80:0:0:0:0:0:0:1]", false }, // Should not match the iPAddress SAN | 1527 {"[FE80:0:0:0:0:0:0:1]", false}, // Should not match the iPAddress SAN |
| 1550 { "FE80::1", true }, // Compressed form matches the iPAddress SAN (IPv6) | 1528 {"FE80::1", true}, // Compressed form matches the iPAddress SAN (IPv6) |
| 1551 { "::127.0.0.2", false }, // IPv6 mapped form should NOT match iPAddress SAN | 1529 {"::127.0.0.2", |
| 1552 { "test.example", true }, // Matches the dNSName SAN | 1530 false}, // IPv6 mapped form should NOT match iPAddress SAN |
| 1553 { "test.example.", true }, // Matches the dNSName SAN (trailing . ignored) | 1531 {"test.example", true}, // Matches the dNSName SAN |
| 1554 { "www.test.example", false }, // Should not match the dNSName SAN | 1532 {"test.example.", true}, // Matches the dNSName SAN (trailing . ignored) |
| 1555 { "test..example", false }, // Should not match the dNSName SAN | 1533 {"www.test.example", false}, // Should not match the dNSName SAN |
| 1556 { "test.example..", false }, // Should not match the dNSName SAN | 1534 {"test..example", false}, // Should not match the dNSName SAN |
| 1557 { ".test.example.", false }, // Should not match the dNSName SAN | 1535 {"test.example..", false}, // Should not match the dNSName SAN |
| 1558 { ".test.example", false }, // Should not match the dNSName SAN | 1536 {".test.example.", false}, // Should not match the dNSName SAN |
| 1537 {".test.example", false}, // Should not match the dNSName SAN |
| 1559 }; | 1538 }; |
| 1560 | 1539 |
| 1561 // GTest 'magic' pretty-printer, so that if/when a test fails, it knows how | 1540 // GTest 'magic' pretty-printer, so that if/when a test fails, it knows how |
| 1562 // to output the parameter that was passed. Without this, it will simply | 1541 // to output the parameter that was passed. Without this, it will simply |
| 1563 // attempt to print out the first twenty bytes of the object, which depending | 1542 // attempt to print out the first twenty bytes of the object, which depending |
| 1564 // on platform and alignment, may result in an invalid read. | 1543 // on platform and alignment, may result in an invalid read. |
| 1565 void PrintTo(const CertVerifyProcNameData& data, std::ostream* os) { | 1544 void PrintTo(const CertVerifyProcNameData& data, std::ostream* os) { |
| 1566 *os << "Hostname: " << data.hostname << "; valid=" << data.valid; | 1545 *os << "Hostname: " << data.hostname << "; valid=" << data.valid; |
| 1567 } | 1546 } |
| 1568 | 1547 |
| 1569 class CertVerifyProcNameTest | 1548 class CertVerifyProcNameTest |
| 1570 : public CertVerifyProcTest, | 1549 : public CertVerifyProcTest, |
| 1571 public testing::WithParamInterface<CertVerifyProcNameData> { | 1550 public testing::WithParamInterface<CertVerifyProcNameData> { |
| 1572 public: | 1551 public: |
| 1573 CertVerifyProcNameTest() {} | 1552 CertVerifyProcNameTest() {} |
| 1574 virtual ~CertVerifyProcNameTest() {} | 1553 virtual ~CertVerifyProcNameTest() {} |
| 1575 }; | 1554 }; |
| 1576 | 1555 |
| 1577 TEST_P(CertVerifyProcNameTest, VerifyCertName) { | 1556 TEST_P(CertVerifyProcNameTest, VerifyCertName) { |
| 1578 CertVerifyProcNameData data = GetParam(); | 1557 CertVerifyProcNameData data = GetParam(); |
| 1579 | 1558 |
| 1580 CertificateList cert_list = CreateCertificateListFromFile( | 1559 CertificateList cert_list = |
| 1581 GetTestCertsDirectory(), "subjectAltName_sanity_check.pem", | 1560 CreateCertificateListFromFile(GetTestCertsDirectory(), |
| 1582 X509Certificate::FORMAT_AUTO); | 1561 "subjectAltName_sanity_check.pem", |
| 1562 X509Certificate::FORMAT_AUTO); |
| 1583 ASSERT_EQ(1U, cert_list.size()); | 1563 ASSERT_EQ(1U, cert_list.size()); |
| 1584 scoped_refptr<X509Certificate> cert(cert_list[0]); | 1564 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 1585 | 1565 |
| 1586 ScopedTestRoot scoped_root(cert.get()); | 1566 ScopedTestRoot scoped_root(cert.get()); |
| 1587 | 1567 |
| 1588 CertVerifyResult verify_result; | 1568 CertVerifyResult verify_result; |
| 1589 int error = Verify(cert.get(), data.hostname, 0, NULL, empty_cert_list_, | 1569 int error = Verify( |
| 1590 &verify_result); | 1570 cert.get(), data.hostname, 0, NULL, empty_cert_list_, &verify_result); |
| 1591 if (data.valid) { | 1571 if (data.valid) { |
| 1592 EXPECT_EQ(OK, error); | 1572 EXPECT_EQ(OK, error); |
| 1593 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); | 1573 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); |
| 1594 } else { | 1574 } else { |
| 1595 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 1575 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
| 1596 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); | 1576 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); |
| 1597 } | 1577 } |
| 1598 } | 1578 } |
| 1599 | 1579 |
| 1600 WRAPPED_INSTANTIATE_TEST_CASE_P( | 1580 WRAPPED_INSTANTIATE_TEST_CASE_P(VerifyName, |
| 1601 VerifyName, | 1581 CertVerifyProcNameTest, |
| 1602 CertVerifyProcNameTest, | 1582 testing::ValuesIn(kVerifyNameData)); |
| 1603 testing::ValuesIn(kVerifyNameData)); | |
| 1604 | 1583 |
| 1605 } // namespace net | 1584 } // namespace net |
| OLD | NEW |