| 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 <cert.h> | 5 #include <cert.h> |
| 6 #include <pk11pub.h> | 6 #include <pk11pub.h> |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 | 9 |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| 11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
| 13 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
| 14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
| 15 #include "base/string16.h" | 15 #include "base/string16.h" |
| 16 #include "base/string_util.h" | 16 #include "base/string_util.h" |
| 17 #include "base/utf_string_conversions.h" | 17 #include "base/utf_string_conversions.h" |
| 18 #include "crypto/nss_util.h" | 18 #include "crypto/nss_util.h" |
| 19 #include "crypto/nss_util_internal.h" | 19 #include "crypto/nss_util_internal.h" |
| 20 #include "crypto/scoped_nss_types.h" | 20 #include "crypto/scoped_nss_types.h" |
| 21 #include "net/base/cert_database.h" | 21 #include "net/base/cert_database.h" |
| 22 #include "net/base/cert_status_flags.h" | 22 #include "net/base/cert_status_flags.h" |
| 23 #include "net/base/cert_test_util.h" |
| 23 #include "net/base/cert_verify_proc.h" | 24 #include "net/base/cert_verify_proc.h" |
| 24 #include "net/base/cert_verify_result.h" | 25 #include "net/base/cert_verify_result.h" |
| 25 #include "net/base/crypto_module.h" | 26 #include "net/base/crypto_module.h" |
| 26 #include "net/base/net_errors.h" | 27 #include "net/base/net_errors.h" |
| 27 #include "net/base/x509_certificate.h" | 28 #include "net/base/x509_certificate.h" |
| 28 #include "net/third_party/mozilla_security_manager/nsNSSCertTrust.h" | 29 #include "net/third_party/mozilla_security_manager/nsNSSCertTrust.h" |
| 29 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" | 30 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" |
| 30 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 31 | 32 |
| 32 namespace psm = mozilla_security_manager; | 33 namespace psm = mozilla_security_manager; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 protected: | 71 protected: |
| 71 static std::string ReadTestFile(const std::string& name) { | 72 static std::string ReadTestFile(const std::string& name) { |
| 72 std::string result; | 73 std::string result; |
| 73 FilePath cert_path = GetTestCertsDirectory().AppendASCII(name); | 74 FilePath cert_path = GetTestCertsDirectory().AppendASCII(name); |
| 74 EXPECT_TRUE(file_util::ReadFileToString(cert_path, &result)); | 75 EXPECT_TRUE(file_util::ReadFileToString(cert_path, &result)); |
| 75 return result; | 76 return result; |
| 76 } | 77 } |
| 77 | 78 |
| 78 static bool ReadCertIntoList(const std::string& name, | 79 static bool ReadCertIntoList(const std::string& name, |
| 79 CertificateList* certs) { | 80 CertificateList* certs) { |
| 80 std::string cert_data = ReadTestFile(name); | 81 scoped_refptr<X509Certificate> cert( |
| 81 if (cert_data.empty()) | 82 ImportCertFromFile(GetTestCertsDirectory(), name)); |
| 82 return false; | 83 if (!cert.get()) |
| 83 | |
| 84 X509Certificate* cert = X509Certificate::CreateFromBytes( | |
| 85 cert_data.data(), cert_data.size()); | |
| 86 if (!cert) | |
| 87 return false; | 84 return false; |
| 88 | 85 |
| 89 certs->push_back(cert); | 86 certs->push_back(cert); |
| 90 return true; | 87 return true; |
| 91 } | 88 } |
| 92 | 89 |
| 93 static CertificateList ListCertsInSlot(PK11SlotInfo* slot) { | 90 static CertificateList ListCertsInSlot(PK11SlotInfo* slot) { |
| 94 CertificateList result; | 91 CertificateList result; |
| 95 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); | 92 CERTCertList* cert_list = PK11_ListCertsInSlot(slot); |
| 96 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); | 93 for (CERTCertListNode* node = CERT_LIST_HEAD(cert_list); |
| 97 !CERT_LIST_END(node, cert_list); | 94 !CERT_LIST_END(node, cert_list); |
| 98 node = CERT_LIST_NEXT(node)) { | 95 node = CERT_LIST_NEXT(node)) { |
| 99 result.push_back(X509Certificate::CreateFromHandle( | 96 result.push_back(X509Certificate::CreateFromHandle( |
| 100 node->cert, X509Certificate::OSCertHandles())); | 97 node->cert, X509Certificate::OSCertHandles())); |
| 101 } | 98 } |
| 102 CERT_DestroyCertList(cert_list); | 99 CERT_DestroyCertList(cert_list); |
| 103 | 100 |
| 104 // Sort the result so that test comparisons can be deterministic. | 101 // Sort the result so that test comparisons can be deterministic. |
| 105 std::sort(result.begin(), result.end(), X509Certificate::LessThan()); | 102 std::sort(result.begin(), result.end(), X509Certificate::LessThan()); |
| 106 return result; | 103 return result; |
| 107 } | 104 } |
| 108 | 105 |
| 109 scoped_refptr<CryptoModule> slot_; | 106 scoped_refptr<CryptoModule> slot_; |
| 110 CertDatabase cert_db_; | 107 CertDatabase cert_db_; |
| 111 | 108 |
| 112 private: | 109 private: |
| 113 // Returns a FilePath object representing the src/net/data/ssl/certificates | |
| 114 // directory in the source tree. | |
| 115 static FilePath GetTestCertsDirectory() { | |
| 116 FilePath certs_dir; | |
| 117 PathService::Get(base::DIR_SOURCE_ROOT, &certs_dir); | |
| 118 certs_dir = certs_dir.AppendASCII("net"); | |
| 119 certs_dir = certs_dir.AppendASCII("data"); | |
| 120 certs_dir = certs_dir.AppendASCII("ssl"); | |
| 121 certs_dir = certs_dir.AppendASCII("certificates"); | |
| 122 return certs_dir; | |
| 123 } | |
| 124 | |
| 125 static bool CleanupSlotContents(PK11SlotInfo* slot) { | 110 static bool CleanupSlotContents(PK11SlotInfo* slot) { |
| 126 CertDatabase cert_db; | 111 CertDatabase cert_db; |
| 127 bool ok = true; | 112 bool ok = true; |
| 128 CertificateList certs = ListCertsInSlot(slot); | 113 CertificateList certs = ListCertsInSlot(slot); |
| 129 for (size_t i = 0; i < certs.size(); ++i) { | 114 for (size_t i = 0; i < certs.size(); ++i) { |
| 130 if (!cert_db.DeleteCertAndKey(certs[i])) | 115 if (!cert_db.DeleteCertAndKey(certs[i])) |
| 131 ok = false; | 116 ok = false; |
| 132 } | 117 } |
| 133 return ok; | 118 return ok; |
| 134 } | 119 } |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 pkcs12_data, | 247 pkcs12_data, |
| 263 string16(), | 248 string16(), |
| 264 true, // is_extractable | 249 true, // is_extractable |
| 265 NULL)); | 250 NULL)); |
| 266 | 251 |
| 267 // Test db should still be empty. | 252 // Test db should still be empty. |
| 268 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 253 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 269 } | 254 } |
| 270 | 255 |
| 271 TEST_F(CertDatabaseNSSTest, ImportCACert_SSLTrust) { | 256 TEST_F(CertDatabaseNSSTest, ImportCACert_SSLTrust) { |
| 272 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 257 CertificateList certs = CreateCertificateListFromFile( |
| 273 | 258 GetTestCertsDirectory(), "root_ca_cert.crt", |
| 274 CertificateList certs = | 259 X509Certificate::FORMAT_AUTO); |
| 275 X509Certificate::CreateCertificateListFromBytes( | |
| 276 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | |
| 277 ASSERT_EQ(1U, certs.size()); | 260 ASSERT_EQ(1U, certs.size()); |
| 278 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 261 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 279 | 262 |
| 280 // Import it. | 263 // Import it. |
| 281 CertDatabase::ImportCertFailureList failed; | 264 CertDatabase::ImportCertFailureList failed; |
| 282 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, | 265 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, |
| 283 &failed)); | 266 &failed)); |
| 284 | 267 |
| 285 EXPECT_EQ(0U, failed.size()); | 268 EXPECT_EQ(0U, failed.size()); |
| 286 | 269 |
| 287 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 270 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 288 ASSERT_EQ(1U, cert_list.size()); | 271 ASSERT_EQ(1U, cert_list.size()); |
| 289 scoped_refptr<X509Certificate> cert(cert_list[0]); | 272 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 290 EXPECT_EQ("Test CA", cert->subject().common_name); | 273 EXPECT_EQ("Test CA", cert->subject().common_name); |
| 291 | 274 |
| 292 EXPECT_EQ(CertDatabase::TRUSTED_SSL, | 275 EXPECT_EQ(CertDatabase::TRUSTED_SSL, |
| 293 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 276 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
| 294 | 277 |
| 295 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 278 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
| 296 EXPECT_TRUE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 279 EXPECT_TRUE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); |
| 297 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 280 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); |
| 298 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 281 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); |
| 299 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 282 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_TRUE, PR_TRUE)); |
| 300 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 283 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); |
| 301 } | 284 } |
| 302 | 285 |
| 303 TEST_F(CertDatabaseNSSTest, ImportCACert_EmailTrust) { | 286 TEST_F(CertDatabaseNSSTest, ImportCACert_EmailTrust) { |
| 304 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 287 CertificateList certs = CreateCertificateListFromFile( |
| 305 | 288 GetTestCertsDirectory(), "root_ca_cert.crt", |
| 306 CertificateList certs = | 289 X509Certificate::FORMAT_AUTO); |
| 307 X509Certificate::CreateCertificateListFromBytes( | |
| 308 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | |
| 309 ASSERT_EQ(1U, certs.size()); | 290 ASSERT_EQ(1U, certs.size()); |
| 310 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 291 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 311 | 292 |
| 312 // Import it. | 293 // Import it. |
| 313 CertDatabase::ImportCertFailureList failed; | 294 CertDatabase::ImportCertFailureList failed; |
| 314 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_EMAIL, | 295 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_EMAIL, |
| 315 &failed)); | 296 &failed)); |
| 316 | 297 |
| 317 EXPECT_EQ(0U, failed.size()); | 298 EXPECT_EQ(0U, failed.size()); |
| 318 | 299 |
| 319 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 300 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 320 ASSERT_EQ(1U, cert_list.size()); | 301 ASSERT_EQ(1U, cert_list.size()); |
| 321 scoped_refptr<X509Certificate> cert(cert_list[0]); | 302 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 322 EXPECT_EQ("Test CA", cert->subject().common_name); | 303 EXPECT_EQ("Test CA", cert->subject().common_name); |
| 323 | 304 |
| 324 EXPECT_EQ(CertDatabase::TRUSTED_EMAIL, | 305 EXPECT_EQ(CertDatabase::TRUSTED_EMAIL, |
| 325 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 306 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
| 326 | 307 |
| 327 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 308 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
| 328 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 309 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); |
| 329 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 310 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); |
| 330 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 311 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); |
| 331 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 312 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); |
| 332 } | 313 } |
| 333 | 314 |
| 334 TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { | 315 TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { |
| 335 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 316 CertificateList certs = CreateCertificateListFromFile( |
| 336 | 317 GetTestCertsDirectory(), "root_ca_cert.crt", |
| 337 CertificateList certs = | 318 X509Certificate::FORMAT_AUTO); |
| 338 X509Certificate::CreateCertificateListFromBytes( | |
| 339 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | |
| 340 ASSERT_EQ(1U, certs.size()); | 319 ASSERT_EQ(1U, certs.size()); |
| 341 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 320 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 342 | 321 |
| 343 // Import it. | 322 // Import it. |
| 344 CertDatabase::ImportCertFailureList failed; | 323 CertDatabase::ImportCertFailureList failed; |
| 345 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_OBJ_SIGN, | 324 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_OBJ_SIGN, |
| 346 &failed)); | 325 &failed)); |
| 347 | 326 |
| 348 EXPECT_EQ(0U, failed.size()); | 327 EXPECT_EQ(0U, failed.size()); |
| 349 | 328 |
| 350 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 329 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 351 ASSERT_EQ(1U, cert_list.size()); | 330 ASSERT_EQ(1U, cert_list.size()); |
| 352 scoped_refptr<X509Certificate> cert(cert_list[0]); | 331 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 353 EXPECT_EQ("Test CA", cert->subject().common_name); | 332 EXPECT_EQ("Test CA", cert->subject().common_name); |
| 354 | 333 |
| 355 EXPECT_EQ(CertDatabase::TRUSTED_OBJ_SIGN, | 334 EXPECT_EQ(CertDatabase::TRUSTED_OBJ_SIGN, |
| 356 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 335 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
| 357 | 336 |
| 358 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 337 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); |
| 359 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 338 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); |
| 360 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 339 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); |
| 361 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 340 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); |
| 362 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 341 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); |
| 363 } | 342 } |
| 364 | 343 |
| 365 TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { | 344 TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { |
| 366 std::string cert_data = ReadTestFile("google.single.pem"); | 345 CertificateList certs = CreateCertificateListFromFile( |
| 367 | 346 GetTestCertsDirectory(), "google.single.pem", |
| 368 CertificateList certs = | 347 X509Certificate::FORMAT_AUTO); |
| 369 X509Certificate::CreateCertificateListFromBytes( | |
| 370 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | |
| 371 ASSERT_EQ(1U, certs.size()); | 348 ASSERT_EQ(1U, certs.size()); |
| 372 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 349 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 373 | 350 |
| 374 // Import it. | 351 // Import it. |
| 375 CertDatabase::ImportCertFailureList failed; | 352 CertDatabase::ImportCertFailureList failed; |
| 376 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, | 353 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_SSL, |
| 377 &failed)); | 354 &failed)); |
| 378 ASSERT_EQ(1U, failed.size()); | 355 ASSERT_EQ(1U, failed.size()); |
| 379 // Note: this compares pointers directly. It's okay in this case because | 356 // Note: this compares pointers directly. It's okay in this case because |
| 380 // ImportCACerts returns the same pointers that were passed in. In the | 357 // ImportCACerts returns the same pointers that were passed in. In the |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 // ASSERT_EQ(3U, cert_list.size()); | 465 // ASSERT_EQ(3U, cert_list.size()); |
| 489 // EXPECT_EQ("DOD CA-13", cert_list[0]->subject().common_name); | 466 // EXPECT_EQ("DOD CA-13", cert_list[0]->subject().common_name); |
| 490 // EXPECT_EQ("DoD Root CA 2", cert_list[1]->subject().common_name); | 467 // EXPECT_EQ("DoD Root CA 2", cert_list[1]->subject().common_name); |
| 491 // EXPECT_EQ("DOD CA-17", cert_list[2]->subject().common_name); | 468 // EXPECT_EQ("DOD CA-17", cert_list[2]->subject().common_name); |
| 492 ASSERT_EQ(2U, cert_list.size()); | 469 ASSERT_EQ(2U, cert_list.size()); |
| 493 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); | 470 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); |
| 494 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); | 471 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); |
| 495 } | 472 } |
| 496 | 473 |
| 497 TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) { | 474 TEST_F(CertDatabaseNSSTest, ImportCACertNotHierarchy) { |
| 498 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 475 CertificateList certs = CreateCertificateListFromFile( |
| 499 CertificateList certs = | 476 GetTestCertsDirectory(), "root_ca_cert.crt", |
| 500 X509Certificate::CreateCertificateListFromBytes( | 477 X509Certificate::FORMAT_AUTO); |
| 501 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | |
| 502 ASSERT_EQ(1U, certs.size()); | 478 ASSERT_EQ(1U, certs.size()); |
| 503 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); | 479 ASSERT_TRUE(ReadCertIntoList("dod_ca_13_cert.der", &certs)); |
| 504 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 480 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
| 505 | 481 |
| 506 // Import it. | 482 // Import it. |
| 507 CertDatabase::ImportCertFailureList failed; | 483 CertDatabase::ImportCertFailureList failed; |
| 508 EXPECT_TRUE(cert_db_.ImportCACerts( | 484 EXPECT_TRUE(cert_db_.ImportCACerts( |
| 509 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL | | 485 certs, CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL | |
| 510 CertDatabase::TRUSTED_OBJ_SIGN, &failed)); | 486 CertDatabase::TRUSTED_OBJ_SIGN, &failed)); |
| 511 | 487 |
| 512 ASSERT_EQ(2U, failed.size()); | 488 ASSERT_EQ(2U, failed.size()); |
| 513 // TODO(mattm): should check for net error equivalent of | 489 // TODO(mattm): should check for net error equivalent of |
| 514 // SEC_ERROR_UNKNOWN_ISSUER | 490 // SEC_ERROR_UNKNOWN_ISSUER |
| 515 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); | 491 EXPECT_EQ("DOD CA-13", failed[0].certificate->subject().common_name); |
| 516 EXPECT_EQ(ERR_FAILED, failed[0].net_error); | 492 EXPECT_EQ(ERR_FAILED, failed[0].net_error); |
| 517 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); | 493 EXPECT_EQ("DOD CA-17", failed[1].certificate->subject().common_name); |
| 518 EXPECT_EQ(ERR_FAILED, failed[1].net_error); | 494 EXPECT_EQ(ERR_FAILED, failed[1].net_error); |
| 519 | 495 |
| 520 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 496 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 521 ASSERT_EQ(1U, cert_list.size()); | 497 ASSERT_EQ(1U, cert_list.size()); |
| 522 EXPECT_EQ("Test CA", cert_list[0]->subject().common_name); | 498 EXPECT_EQ("Test CA", cert_list[0]->subject().common_name); |
| 523 } | 499 } |
| 524 | 500 |
| 525 // http://crbug.com/108009 - Disabled, as google.chain.pem is an expired | 501 // http://crbug.com/108009 - Disabled, as google.chain.pem is an expired |
| 526 // certificate. | 502 // certificate. |
| 527 TEST_F(CertDatabaseNSSTest, DISABLED_ImportServerCert) { | 503 TEST_F(CertDatabaseNSSTest, DISABLED_ImportServerCert) { |
| 528 // Need to import intermediate cert for the verify of google cert, otherwise | 504 // Need to import intermediate cert for the verify of google cert, otherwise |
| 529 // it will try to fetch it automatically with cert_pi_useAIACertFetch, which | 505 // it will try to fetch it automatically with cert_pi_useAIACertFetch, which |
| 530 // will cause OCSPCreateSession on the main thread, which is not allowed. | 506 // will cause OCSPCreateSession on the main thread, which is not allowed. |
| 531 std::string cert_data = ReadTestFile("google.chain.pem"); | 507 CertificateList certs = CreateCertificateListFromFile( |
| 532 CertificateList certs = | 508 GetTestCertsDirectory(), "google.chain.pem", |
| 533 X509Certificate::CreateCertificateListFromBytes( | 509 X509Certificate::FORMAT_AUTO); |
| 534 cert_data.data(), cert_data.size(), X509Certificate::FORMAT_AUTO); | |
| 535 ASSERT_EQ(2U, certs.size()); | 510 ASSERT_EQ(2U, certs.size()); |
| 536 | 511 |
| 537 CertDatabase::ImportCertFailureList failed; | 512 CertDatabase::ImportCertFailureList failed; |
| 538 EXPECT_TRUE(cert_db_.ImportServerCert(certs, &failed)); | 513 EXPECT_TRUE(cert_db_.ImportServerCert(certs, &failed)); |
| 539 | 514 |
| 540 EXPECT_EQ(0U, failed.size()); | 515 EXPECT_EQ(0U, failed.size()); |
| 541 | 516 |
| 542 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 517 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 543 ASSERT_EQ(2U, cert_list.size()); | 518 ASSERT_EQ(2U, cert_list.size()); |
| 544 scoped_refptr<X509Certificate> goog_cert(cert_list[0]); | 519 scoped_refptr<X509Certificate> goog_cert(cert_list[0]); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); | 568 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); |
| 594 | 569 |
| 595 verify_result.Reset(); | 570 verify_result.Reset(); |
| 596 error = verify_proc->Verify(puny_cert, "xn--wgv71a119e.com", flags, | 571 error = verify_proc->Verify(puny_cert, "xn--wgv71a119e.com", flags, |
| 597 NULL, &verify_result); | 572 NULL, &verify_result); |
| 598 EXPECT_EQ(OK, error); | 573 EXPECT_EQ(OK, error); |
| 599 EXPECT_EQ(0U, verify_result.cert_status); | 574 EXPECT_EQ(0U, verify_result.cert_status); |
| 600 } | 575 } |
| 601 | 576 |
| 602 } // namespace net | 577 } // namespace net |
| OLD | NEW |