Chromium Code Reviews| 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 <certdb.h> | |
| 6 #include <pk11pub.h> | 7 #include <pk11pub.h> |
| 7 | 8 |
| 8 #include <algorithm> | 9 #include <algorithm> |
| 9 | 10 |
| 10 #include "base/file_path.h" | 11 #include "base/file_path.h" |
| 11 #include "base/file_util.h" | 12 #include "base/file_util.h" |
| 12 #include "base/lazy_instance.h" | 13 #include "base/lazy_instance.h" |
| 13 #include "base/message_loop.h" | 14 #include "base/message_loop.h" |
| 14 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 15 #include "base/string16.h" | 16 #include "base/string16.h" |
| 16 #include "base/string_util.h" | 17 #include "base/string_util.h" |
| 17 #include "base/utf_string_conversions.h" | 18 #include "base/utf_string_conversions.h" |
| 18 #include "crypto/nss_util.h" | 19 #include "crypto/nss_util.h" |
| 19 #include "crypto/nss_util_internal.h" | 20 #include "crypto/nss_util_internal.h" |
| 20 #include "crypto/scoped_nss_types.h" | 21 #include "crypto/scoped_nss_types.h" |
| 21 #include "net/base/cert_database.h" | 22 #include "net/base/cert_database.h" |
| 22 #include "net/base/cert_status_flags.h" | 23 #include "net/base/cert_status_flags.h" |
| 23 #include "net/base/cert_test_util.h" | 24 #include "net/base/cert_test_util.h" |
| 24 #include "net/base/cert_verify_proc.h" | 25 #include "net/base/cert_verify_proc.h" |
| 25 #include "net/base/cert_verify_result.h" | 26 #include "net/base/cert_verify_result.h" |
| 26 #include "net/base/crypto_module.h" | 27 #include "net/base/crypto_module.h" |
| 27 #include "net/base/net_errors.h" | 28 #include "net/base/net_errors.h" |
| 28 #include "net/base/x509_certificate.h" | 29 #include "net/base/x509_certificate.h" |
| 29 #include "net/third_party/mozilla_security_manager/nsNSSCertTrust.h" | |
| 30 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" | 30 #include "net/third_party/mozilla_security_manager/nsNSSCertificateDB.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 | 32 |
| 33 namespace psm = mozilla_security_manager; | 33 // In NSS 3.13, CERTDB_VALID_PEER was renamed CERTDB_TERMINAL_RECORD. So we use |
| 34 // the new name of the macro. | |
| 35 #if !defined(CERTDB_TERMINAL_RECORD) | |
| 36 #define CERTDB_TERMINAL_RECORD CERTDB_VALID_PEER | |
| 37 #endif | |
| 34 | 38 |
| 35 namespace net { | 39 namespace net { |
| 36 | 40 |
| 37 // TODO(mattm): when https://bugzilla.mozilla.org/show_bug.cgi?id=588269 is | 41 // TODO(mattm): when https://bugzilla.mozilla.org/show_bug.cgi?id=588269 is |
| 38 // fixed, switch back to using a separate userdb for each test. | 42 // fixed, switch back to using a separate userdb for each test. |
| 39 // (When doing so, remember to add some standalone tests of DeleteCert since it | 43 // (When doing so, remember to add some standalone tests of DeleteCert since it |
| 40 // won't be tested by TearDown anymore.) | 44 // won't be tested by TearDown anymore.) |
| 41 class CertDatabaseNSSTest : public testing::Test { | 45 class CertDatabaseNSSTest : public testing::Test { |
| 42 public: | 46 public: |
| 43 static void SetUpTestCase() { | 47 static void SetUpTestCase() { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 104 } | 108 } |
| 105 | 109 |
| 106 scoped_refptr<CryptoModule> slot_; | 110 scoped_refptr<CryptoModule> slot_; |
| 107 CertDatabase cert_db_; | 111 CertDatabase cert_db_; |
| 108 | 112 |
| 109 private: | 113 private: |
| 110 static bool CleanupSlotContents(PK11SlotInfo* slot) { | 114 static bool CleanupSlotContents(PK11SlotInfo* slot) { |
| 111 CertDatabase cert_db; | 115 CertDatabase cert_db; |
| 112 bool ok = true; | 116 bool ok = true; |
| 113 CertificateList certs = ListCertsInSlot(slot); | 117 CertificateList certs = ListCertsInSlot(slot); |
| 118 CERTCertTrust default_trust = {0}; | |
| 114 for (size_t i = 0; i < certs.size(); ++i) { | 119 for (size_t i = 0; i < certs.size(); ++i) { |
| 120 // Reset cert trust values to defaults before deleting. Otherwise NSS (at | |
| 121 // least 3.12.9, but not 3.13.4) somehow seems to remember the trust which | |
| 122 // can break following tests. | |
|
wtc
2012/05/30 00:19:24
We should track down exactly which NSS change caus
wtc
2012/05/30 00:39:54
I happened to see this CERT_ChangeCertTrust call i
mattm
2012/05/30 22:40:58
Okay, after further testing I had narrowed it down
| |
| 123 SECStatus srv = CERT_ChangeCertTrust( | |
| 124 CERT_GetDefaultCertDB(), certs[i]->os_cert_handle(), &default_trust); | |
| 125 if (srv != SECSuccess) | |
| 126 ok = false; | |
| 127 | |
| 115 if (!cert_db.DeleteCertAndKey(certs[i])) | 128 if (!cert_db.DeleteCertAndKey(certs[i])) |
| 116 ok = false; | 129 ok = false; |
| 117 } | 130 } |
| 118 return ok; | 131 return ok; |
| 119 } | 132 } |
| 120 }; | 133 }; |
| 121 | 134 |
| 122 TEST_F(CertDatabaseNSSTest, ListCerts) { | 135 TEST_F(CertDatabaseNSSTest, ListCerts) { |
| 123 // This test isn't terribly useful, though it will at least let valgrind test | 136 // This test isn't terribly useful, though it will at least let valgrind test |
| 124 // for leaks. | 137 // for leaks. |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 268 EXPECT_EQ(0U, failed.size()); | 281 EXPECT_EQ(0U, failed.size()); |
| 269 | 282 |
| 270 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 283 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 271 ASSERT_EQ(1U, cert_list.size()); | 284 ASSERT_EQ(1U, cert_list.size()); |
| 272 scoped_refptr<X509Certificate> cert(cert_list[0]); | 285 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 273 EXPECT_EQ("Test CA", cert->subject().common_name); | 286 EXPECT_EQ("Test CA", cert->subject().common_name); |
| 274 | 287 |
| 275 EXPECT_EQ(CertDatabase::TRUSTED_SSL, | 288 EXPECT_EQ(CertDatabase::TRUSTED_SSL, |
| 276 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 289 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
| 277 | 290 |
| 278 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 291 EXPECT_EQ(unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | |
| 279 EXPECT_TRUE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 292 CERTDB_TRUSTED_CLIENT_CA), |
| 280 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 293 cert->os_cert_handle()->trust->sslFlags); |
| 281 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 294 EXPECT_EQ(unsigned(CERTDB_VALID_CA), |
| 282 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 295 cert->os_cert_handle()->trust->emailFlags); |
| 283 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 296 EXPECT_EQ(unsigned(CERTDB_VALID_CA), |
| 297 cert->os_cert_handle()->trust->objectSigningFlags); | |
| 284 } | 298 } |
| 285 | 299 |
| 286 TEST_F(CertDatabaseNSSTest, ImportCACert_EmailTrust) { | 300 TEST_F(CertDatabaseNSSTest, ImportCACert_EmailTrust) { |
| 287 CertificateList certs = CreateCertificateListFromFile( | 301 CertificateList certs = CreateCertificateListFromFile( |
| 288 GetTestCertsDirectory(), "root_ca_cert.crt", | 302 GetTestCertsDirectory(), "root_ca_cert.crt", |
| 289 X509Certificate::FORMAT_AUTO); | 303 X509Certificate::FORMAT_AUTO); |
| 290 ASSERT_EQ(1U, certs.size()); | 304 ASSERT_EQ(1U, certs.size()); |
| 291 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 305 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 292 | 306 |
| 293 // Import it. | 307 // Import it. |
| 294 CertDatabase::ImportCertFailureList failed; | 308 CertDatabase::ImportCertFailureList failed; |
| 295 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_EMAIL, | 309 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_EMAIL, |
| 296 &failed)); | 310 &failed)); |
| 297 | 311 |
| 298 EXPECT_EQ(0U, failed.size()); | 312 EXPECT_EQ(0U, failed.size()); |
| 299 | 313 |
| 300 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 314 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 301 ASSERT_EQ(1U, cert_list.size()); | 315 ASSERT_EQ(1U, cert_list.size()); |
| 302 scoped_refptr<X509Certificate> cert(cert_list[0]); | 316 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 303 EXPECT_EQ("Test CA", cert->subject().common_name); | 317 EXPECT_EQ("Test CA", cert->subject().common_name); |
| 304 | 318 |
| 305 EXPECT_EQ(CertDatabase::TRUSTED_EMAIL, | 319 EXPECT_EQ(CertDatabase::TRUSTED_EMAIL, |
| 306 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 320 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
| 307 | 321 |
| 308 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 322 EXPECT_EQ(unsigned(CERTDB_VALID_CA), |
| 309 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 323 cert->os_cert_handle()->trust->sslFlags); |
| 310 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 324 EXPECT_EQ(unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | |
| 311 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 325 CERTDB_TRUSTED_CLIENT_CA), |
| 312 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 326 cert->os_cert_handle()->trust->emailFlags); |
| 327 EXPECT_EQ(unsigned(CERTDB_VALID_CA), | |
| 328 cert->os_cert_handle()->trust->objectSigningFlags); | |
| 313 } | 329 } |
| 314 | 330 |
| 315 TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { | 331 TEST_F(CertDatabaseNSSTest, ImportCACert_ObjSignTrust) { |
| 316 CertificateList certs = CreateCertificateListFromFile( | 332 CertificateList certs = CreateCertificateListFromFile( |
| 317 GetTestCertsDirectory(), "root_ca_cert.crt", | 333 GetTestCertsDirectory(), "root_ca_cert.crt", |
| 318 X509Certificate::FORMAT_AUTO); | 334 X509Certificate::FORMAT_AUTO); |
| 319 ASSERT_EQ(1U, certs.size()); | 335 ASSERT_EQ(1U, certs.size()); |
| 320 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 336 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 321 | 337 |
| 322 // Import it. | 338 // Import it. |
| 323 CertDatabase::ImportCertFailureList failed; | 339 CertDatabase::ImportCertFailureList failed; |
| 324 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_OBJ_SIGN, | 340 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUSTED_OBJ_SIGN, |
| 325 &failed)); | 341 &failed)); |
| 326 | 342 |
| 327 EXPECT_EQ(0U, failed.size()); | 343 EXPECT_EQ(0U, failed.size()); |
| 328 | 344 |
| 329 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 345 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 330 ASSERT_EQ(1U, cert_list.size()); | 346 ASSERT_EQ(1U, cert_list.size()); |
| 331 scoped_refptr<X509Certificate> cert(cert_list[0]); | 347 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 332 EXPECT_EQ("Test CA", cert->subject().common_name); | 348 EXPECT_EQ("Test CA", cert->subject().common_name); |
| 333 | 349 |
| 334 EXPECT_EQ(CertDatabase::TRUSTED_OBJ_SIGN, | 350 EXPECT_EQ(CertDatabase::TRUSTED_OBJ_SIGN, |
| 335 cert_db_.GetCertTrust(cert.get(), CA_CERT)); | 351 cert_db_.GetCertTrust(cert.get(), CA_CERT)); |
| 336 | 352 |
| 337 psm::nsNSSCertTrust trust(cert->os_cert_handle()->trust); | 353 EXPECT_EQ(unsigned(CERTDB_VALID_CA), |
| 338 EXPECT_FALSE(trust.HasTrustedCA(PR_TRUE, PR_FALSE, PR_FALSE)); | 354 cert->os_cert_handle()->trust->sslFlags); |
| 339 EXPECT_FALSE(trust.HasTrustedCA(PR_FALSE, PR_TRUE, PR_FALSE)); | 355 EXPECT_EQ(unsigned(CERTDB_VALID_CA), |
| 340 EXPECT_TRUE(trust.HasTrustedCA(PR_FALSE, PR_FALSE, PR_TRUE)); | 356 cert->os_cert_handle()->trust->emailFlags); |
| 341 EXPECT_TRUE(trust.HasCA(PR_TRUE, PR_TRUE, PR_TRUE)); | 357 EXPECT_EQ(unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | |
| 358 CERTDB_TRUSTED_CLIENT_CA), | |
| 359 cert->os_cert_handle()->trust->objectSigningFlags); | |
| 342 } | 360 } |
| 343 | 361 |
| 344 TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { | 362 TEST_F(CertDatabaseNSSTest, ImportCA_NotCACert) { |
| 345 CertificateList certs = CreateCertificateListFromFile( | 363 CertificateList certs = CreateCertificateListFromFile( |
| 346 GetTestCertsDirectory(), "google.single.pem", | 364 GetTestCertsDirectory(), "google.single.pem", |
| 347 X509Certificate::FORMAT_AUTO); | 365 X509Certificate::FORMAT_AUTO); |
| 348 ASSERT_EQ(1U, certs.size()); | 366 ASSERT_EQ(1U, certs.size()); |
| 349 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); | 367 EXPECT_FALSE(certs[0]->os_cert_handle()->isperm); |
| 350 | 368 |
| 351 // Import it. | 369 // Import it. |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 425 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); | 443 EXPECT_EQ("DOD CA-17", cert_list[1]->subject().common_name); |
| 426 } | 444 } |
| 427 | 445 |
| 428 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) { | 446 TEST_F(CertDatabaseNSSTest, ImportCACertHierarchyUntrusted) { |
| 429 CertificateList certs; | 447 CertificateList certs; |
| 430 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); | 448 ASSERT_TRUE(ReadCertIntoList("dod_root_ca_2_cert.der", &certs)); |
| 431 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); | 449 ASSERT_TRUE(ReadCertIntoList("dod_ca_17_cert.der", &certs)); |
| 432 | 450 |
| 433 // Import it. | 451 // Import it. |
| 434 CertDatabase::ImportCertFailureList failed; | 452 CertDatabase::ImportCertFailureList failed; |
| 435 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::UNTRUSTED, &failed)); | 453 EXPECT_TRUE(cert_db_.ImportCACerts(certs, CertDatabase::TRUST_DEFAULT, |
| 454 &failed)); | |
| 436 | 455 |
| 437 ASSERT_EQ(1U, failed.size()); | 456 ASSERT_EQ(1U, failed.size()); |
| 438 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); | 457 EXPECT_EQ("DOD CA-17", failed[0].certificate->subject().common_name); |
| 439 // TODO(mattm): should check for net error equivalent of | 458 // TODO(mattm): should check for net error equivalent of |
| 440 // SEC_ERROR_UNTRUSTED_ISSUER | 459 // SEC_ERROR_UNTRUSTED_ISSUER |
| 441 EXPECT_EQ(ERR_FAILED, failed[0].net_error); | 460 EXPECT_EQ(ERR_FAILED, failed[0].net_error); |
| 442 | 461 |
| 443 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 462 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 444 ASSERT_EQ(1U, cert_list.size()); | 463 ASSERT_EQ(1U, cert_list.size()); |
| 445 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); | 464 EXPECT_EQ("DoD Root CA 2", cert_list[0]->subject().common_name); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 503 TEST_F(CertDatabaseNSSTest, DISABLED_ImportServerCert) { | 522 TEST_F(CertDatabaseNSSTest, DISABLED_ImportServerCert) { |
| 504 // Need to import intermediate cert for the verify of google cert, otherwise | 523 // Need to import intermediate cert for the verify of google cert, otherwise |
| 505 // it will try to fetch it automatically with cert_pi_useAIACertFetch, which | 524 // it will try to fetch it automatically with cert_pi_useAIACertFetch, which |
| 506 // will cause OCSPCreateSession on the main thread, which is not allowed. | 525 // will cause OCSPCreateSession on the main thread, which is not allowed. |
| 507 CertificateList certs = CreateCertificateListFromFile( | 526 CertificateList certs = CreateCertificateListFromFile( |
| 508 GetTestCertsDirectory(), "google.chain.pem", | 527 GetTestCertsDirectory(), "google.chain.pem", |
| 509 X509Certificate::FORMAT_AUTO); | 528 X509Certificate::FORMAT_AUTO); |
| 510 ASSERT_EQ(2U, certs.size()); | 529 ASSERT_EQ(2U, certs.size()); |
| 511 | 530 |
| 512 CertDatabase::ImportCertFailureList failed; | 531 CertDatabase::ImportCertFailureList failed; |
| 513 EXPECT_TRUE(cert_db_.ImportServerCert(certs, &failed)); | 532 EXPECT_TRUE(cert_db_.ImportServerCert(certs, CertDatabase::TRUST_DEFAULT, |
| 533 &failed)); | |
| 514 | 534 |
| 515 EXPECT_EQ(0U, failed.size()); | 535 EXPECT_EQ(0U, failed.size()); |
| 516 | 536 |
| 517 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 537 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 518 ASSERT_EQ(2U, cert_list.size()); | 538 ASSERT_EQ(2U, cert_list.size()); |
| 519 scoped_refptr<X509Certificate> goog_cert(cert_list[0]); | 539 scoped_refptr<X509Certificate> goog_cert(cert_list[0]); |
| 520 scoped_refptr<X509Certificate> thawte_cert(cert_list[1]); | 540 scoped_refptr<X509Certificate> thawte_cert(cert_list[1]); |
| 521 EXPECT_EQ("www.google.com", goog_cert->subject().common_name); | 541 EXPECT_EQ("www.google.com", goog_cert->subject().common_name); |
| 522 EXPECT_EQ("Thawte SGC CA", thawte_cert->subject().common_name); | 542 EXPECT_EQ("Thawte SGC CA", thawte_cert->subject().common_name); |
| 523 | 543 |
| 524 EXPECT_EQ(CertDatabase::UNTRUSTED, | 544 EXPECT_EQ(CertDatabase::TRUST_DEFAULT, |
| 525 cert_db_.GetCertTrust(goog_cert.get(), SERVER_CERT)); | 545 cert_db_.GetCertTrust(goog_cert.get(), SERVER_CERT)); |
| 526 psm::nsNSSCertTrust goog_trust(goog_cert->os_cert_handle()->trust); | 546 |
| 527 EXPECT_TRUE(goog_trust.HasPeer(PR_TRUE, PR_TRUE, PR_TRUE)); | 547 EXPECT_EQ(0U, goog_cert->os_cert_handle()->trust->sslFlags); |
| 548 EXPECT_EQ(0U, goog_cert->os_cert_handle()->trust->emailFlags); | |
| 549 EXPECT_EQ(0U, goog_cert->os_cert_handle()->trust->objectSigningFlags); | |
| 528 | 550 |
| 529 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | 551 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); |
| 530 int flags = 0; | 552 int flags = 0; |
| 531 CertVerifyResult verify_result; | 553 CertVerifyResult verify_result; |
| 532 int error = verify_proc->Verify(goog_cert, "www.google.com", flags, | 554 int error = verify_proc->Verify(goog_cert, "www.google.com", flags, |
| 533 NULL, &verify_result); | 555 NULL, &verify_result); |
| 534 EXPECT_EQ(OK, error); | 556 EXPECT_EQ(OK, error); |
| 535 EXPECT_EQ(0U, verify_result.cert_status); | 557 EXPECT_EQ(0U, verify_result.cert_status); |
| 536 } | 558 } |
| 537 | 559 |
| 538 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) { | 560 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned) { |
| 539 CertificateList certs; | 561 CertificateList certs; |
| 540 ASSERT_TRUE(ReadCertIntoList("punycodetest.der", &certs)); | 562 ASSERT_TRUE(ReadCertIntoList("punycodetest.der", &certs)); |
| 541 | 563 |
| 542 CertDatabase::ImportCertFailureList failed; | 564 CertDatabase::ImportCertFailureList failed; |
| 543 EXPECT_TRUE(cert_db_.ImportServerCert(certs, &failed)); | 565 EXPECT_TRUE(cert_db_.ImportServerCert(certs, CertDatabase::TRUST_DEFAULT, |
| 566 &failed)); | |
| 544 | 567 |
| 545 EXPECT_EQ(0U, failed.size()); | 568 EXPECT_EQ(0U, failed.size()); |
| 546 | 569 |
| 547 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 570 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 548 ASSERT_EQ(1U, cert_list.size()); | 571 ASSERT_EQ(1U, cert_list.size()); |
| 549 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); | 572 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); |
| 550 | 573 |
| 551 EXPECT_EQ(CertDatabase::UNTRUSTED, | 574 EXPECT_EQ(CertDatabase::TRUST_DEFAULT, |
| 552 cert_db_.GetCertTrust(puny_cert.get(), SERVER_CERT)); | 575 cert_db_.GetCertTrust(puny_cert.get(), SERVER_CERT)); |
| 553 psm::nsNSSCertTrust puny_trust(puny_cert->os_cert_handle()->trust); | 576 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->sslFlags); |
| 554 EXPECT_TRUE(puny_trust.HasPeer(PR_TRUE, PR_TRUE, PR_TRUE)); | 577 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->emailFlags); |
| 578 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->objectSigningFlags); | |
| 555 | 579 |
| 556 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | 580 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); |
| 557 int flags = 0; | 581 int flags = 0; |
| 558 CertVerifyResult verify_result; | 582 CertVerifyResult verify_result; |
| 559 int error = verify_proc->Verify(puny_cert, "xn--wgv71a119e.com", flags, | 583 int error = verify_proc->Verify(puny_cert, "xn--wgv71a119e.com", flags, |
| 560 NULL, &verify_result); | 584 NULL, &verify_result); |
| 561 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | 585 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); |
| 562 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status); | 586 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status); |
| 563 | 587 } |
| 564 // TODO(mattm): this should be SERVER_CERT, not CA_CERT, but that does not | 588 |
| 565 // work due to NSS bug: https://bugzilla.mozilla.org/show_bug.cgi?id=531160 | 589 TEST_F(CertDatabaseNSSTest, ImportServerCert_SelfSigned_Trusted) { |
| 566 EXPECT_TRUE(cert_db_.SetCertTrust( | 590 // When using CERT_PKIXVerifyCert (which we do), server trust only works from |
| 567 puny_cert.get(), CA_CERT, | 591 // 3.13.4 onwards. See https://bugzilla.mozilla.org/show_bug.cgi?id=647364. |
| 568 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); | 592 if (!NSS_VersionCheck("3.13.4")) { |
| 569 | 593 LOG(INFO) << "test skipped on NSS < 3.13.4"; |
| 570 verify_result.Reset(); | 594 return; |
| 571 error = verify_proc->Verify(puny_cert, "xn--wgv71a119e.com", flags, | 595 } |
| 572 NULL, &verify_result); | 596 |
| 573 EXPECT_EQ(OK, error); | 597 CertificateList certs; |
| 574 EXPECT_EQ(0U, verify_result.cert_status); | 598 ASSERT_TRUE(ReadCertIntoList("punycodetest.der", &certs)); |
| 599 | |
| 600 CertDatabase::ImportCertFailureList failed; | |
| 601 EXPECT_TRUE(cert_db_.ImportServerCert(certs, CertDatabase::TRUSTED_SSL, | |
| 602 &failed)); | |
| 603 | |
| 604 EXPECT_EQ(0U, failed.size()); | |
| 605 | |
| 606 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | |
| 607 ASSERT_EQ(1U, cert_list.size()); | |
| 608 scoped_refptr<X509Certificate> puny_cert(cert_list[0]); | |
| 609 | |
| 610 EXPECT_EQ(CertDatabase::TRUSTED_SSL, | |
| 611 cert_db_.GetCertTrust(puny_cert.get(), SERVER_CERT)); | |
| 612 EXPECT_EQ(unsigned(CERTDB_TRUSTED | CERTDB_TERMINAL_RECORD), | |
| 613 puny_cert->os_cert_handle()->trust->sslFlags); | |
| 614 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->emailFlags); | |
| 615 EXPECT_EQ(0U, puny_cert->os_cert_handle()->trust->objectSigningFlags); | |
| 616 | |
| 617 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 618 int flags = 0; | |
| 619 CertVerifyResult verify_result; | |
| 620 int error = verify_proc->Verify(puny_cert, "xn--wgv71a119e.com", flags, | |
| 621 NULL, &verify_result); | |
| 622 EXPECT_EQ(OK, error); | |
| 623 EXPECT_EQ(0U, verify_result.cert_status); | |
| 624 } | |
| 625 | |
| 626 TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert) { | |
| 627 CertificateList ca_certs = CreateCertificateListFromFile( | |
| 628 GetTestCertsDirectory(), "root_ca_cert.crt", | |
| 629 X509Certificate::FORMAT_AUTO); | |
| 630 ASSERT_EQ(1U, ca_certs.size()); | |
| 631 | |
| 632 // Import CA cert and trust it. | |
| 633 CertDatabase::ImportCertFailureList failed; | |
| 634 EXPECT_TRUE(cert_db_.ImportCACerts(ca_certs, CertDatabase::TRUSTED_SSL, | |
| 635 &failed)); | |
| 636 EXPECT_EQ(0U, failed.size()); | |
| 637 | |
| 638 CertificateList certs = CreateCertificateListFromFile( | |
| 639 GetTestCertsDirectory(), "ok_cert.pem", | |
| 640 X509Certificate::FORMAT_AUTO); | |
| 641 ASSERT_EQ(1U, certs.size()); | |
| 642 | |
| 643 // Import server cert with default trust. | |
| 644 EXPECT_TRUE(cert_db_.ImportServerCert(certs, CertDatabase::TRUST_DEFAULT, | |
| 645 &failed)); | |
| 646 EXPECT_EQ(0U, failed.size()); | |
| 647 | |
| 648 // Server cert should verify. | |
| 649 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 650 int flags = 0; | |
| 651 CertVerifyResult verify_result; | |
| 652 int error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 653 NULL, &verify_result); | |
| 654 EXPECT_EQ(OK, error); | |
| 655 EXPECT_EQ(0U, verify_result.cert_status); | |
| 656 } | |
| 657 | |
| 658 TEST_F(CertDatabaseNSSTest, ImportCaAndServerCert_DistrustServer) { | |
| 659 // Explicit distrust only works starting in NSS 3.13. | |
| 660 if (!NSS_VersionCheck("3.13")) { | |
| 661 LOG(INFO) << "test skipped on NSS < 3.13"; | |
| 662 return; | |
| 663 } | |
| 664 | |
| 665 CertificateList ca_certs = CreateCertificateListFromFile( | |
| 666 GetTestCertsDirectory(), "root_ca_cert.crt", | |
| 667 X509Certificate::FORMAT_AUTO); | |
| 668 ASSERT_EQ(1U, ca_certs.size()); | |
| 669 | |
| 670 // Import CA cert and trust it. | |
| 671 CertDatabase::ImportCertFailureList failed; | |
| 672 EXPECT_TRUE(cert_db_.ImportCACerts(ca_certs, CertDatabase::TRUSTED_SSL, | |
| 673 &failed)); | |
| 674 EXPECT_EQ(0U, failed.size()); | |
| 675 | |
| 676 CertificateList certs = CreateCertificateListFromFile( | |
| 677 GetTestCertsDirectory(), "ok_cert.pem", | |
| 678 X509Certificate::FORMAT_AUTO); | |
| 679 ASSERT_EQ(1U, certs.size()); | |
| 680 | |
| 681 // Import server cert without inheriting trust from issuer (explicit | |
| 682 // distrust). | |
| 683 EXPECT_TRUE(cert_db_.ImportServerCert( | |
| 684 certs, CertDatabase::DISTRUSTED_SSL, &failed)); | |
| 685 EXPECT_EQ(0U, failed.size()); | |
| 686 EXPECT_EQ(CertDatabase::DISTRUSTED_SSL, | |
| 687 cert_db_.GetCertTrust(certs[0], SERVER_CERT)); | |
| 688 | |
| 689 EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), | |
| 690 certs[0]->os_cert_handle()->trust->sslFlags); | |
| 691 EXPECT_EQ(0L, certs[0]->os_cert_handle()->trust->emailFlags); | |
| 692 EXPECT_EQ(0L, certs[0]->os_cert_handle()->trust->objectSigningFlags); | |
|
wtc
2012/05/30 00:19:24
sslFlags, emailFlags, and objectSigningFlags are o
mattm
2012/05/30 22:40:58
oops, fixed.
| |
| 693 | |
| 694 // Server cert should fail to verify. | |
| 695 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 696 int flags = 0; | |
| 697 CertVerifyResult verify_result; | |
| 698 int error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 699 NULL, &verify_result); | |
| 700 EXPECT_EQ(ERR_CERT_REVOKED, error); | |
| 701 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status); | |
| 702 } | |
| 703 | |
| 704 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa) { | |
| 705 CertificateList ca_certs = CreateCertificateListFromFile( | |
| 706 GetTestCertsDirectory(), "2048-rsa-root.pem", | |
| 707 X509Certificate::FORMAT_AUTO); | |
| 708 ASSERT_EQ(1U, ca_certs.size()); | |
| 709 | |
| 710 // Import Root CA cert and distrust it. | |
| 711 CertDatabase::ImportCertFailureList failed; | |
| 712 EXPECT_TRUE(cert_db_.ImportCACerts(ca_certs, CertDatabase::DISTRUSTED_SSL, | |
| 713 &failed)); | |
| 714 EXPECT_EQ(0U, failed.size()); | |
| 715 | |
| 716 CertificateList intermediate_certs = CreateCertificateListFromFile( | |
| 717 GetTestCertsDirectory(), "2048-rsa-intermediate.pem", | |
| 718 X509Certificate::FORMAT_AUTO); | |
| 719 ASSERT_EQ(1U, intermediate_certs.size()); | |
| 720 | |
| 721 // Import Intermediate CA cert and trust it. | |
| 722 EXPECT_TRUE(cert_db_.ImportCACerts(intermediate_certs, | |
| 723 CertDatabase::TRUSTED_SSL, &failed)); | |
| 724 EXPECT_EQ(0U, failed.size()); | |
| 725 | |
| 726 CertificateList certs = CreateCertificateListFromFile( | |
| 727 GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", | |
| 728 X509Certificate::FORMAT_AUTO); | |
| 729 ASSERT_EQ(1U, certs.size()); | |
| 730 | |
| 731 // Import server cert with default trust. | |
| 732 EXPECT_TRUE(cert_db_.ImportServerCert( | |
| 733 certs, CertDatabase::TRUST_DEFAULT, &failed)); | |
| 734 EXPECT_EQ(0U, failed.size()); | |
| 735 EXPECT_EQ(CertDatabase::TRUST_DEFAULT, | |
| 736 cert_db_.GetCertTrust(certs[0], SERVER_CERT)); | |
| 737 | |
| 738 // Server cert should verify. | |
| 739 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 740 int flags = 0; | |
| 741 CertVerifyResult verify_result; | |
| 742 int error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 743 NULL, &verify_result); | |
| 744 EXPECT_EQ(OK, error); | |
| 745 EXPECT_EQ(0U, verify_result.cert_status); | |
| 746 | |
| 747 // Explicit distrust only works starting in NSS 3.13. | |
| 748 if (!NSS_VersionCheck("3.13")) { | |
| 749 LOG(INFO) << "test partially skipped on NSS < 3.13"; | |
| 750 return; | |
| 751 } | |
| 752 | |
| 753 // Trust the root cert and distrust the intermediate. | |
| 754 EXPECT_TRUE(cert_db_.SetCertTrust( | |
| 755 ca_certs[0], CA_CERT, CertDatabase::TRUSTED_SSL)); | |
| 756 EXPECT_TRUE(cert_db_.SetCertTrust( | |
| 757 intermediate_certs[0], CA_CERT, CertDatabase::DISTRUSTED_SSL)); | |
| 758 EXPECT_EQ( | |
| 759 unsigned(CERTDB_VALID_CA | CERTDB_TRUSTED_CA | CERTDB_TRUSTED_CLIENT_CA), | |
| 760 ca_certs[0]->os_cert_handle()->trust->sslFlags); | |
| 761 EXPECT_EQ(unsigned(CERTDB_VALID_CA), | |
| 762 ca_certs[0]->os_cert_handle()->trust->emailFlags); | |
| 763 EXPECT_EQ(unsigned(CERTDB_VALID_CA), | |
| 764 ca_certs[0]->os_cert_handle()->trust->objectSigningFlags); | |
| 765 EXPECT_EQ(unsigned(CERTDB_TERMINAL_RECORD), | |
| 766 intermediate_certs[0]->os_cert_handle()->trust->sslFlags); | |
| 767 EXPECT_EQ(unsigned(CERTDB_VALID_CA), | |
| 768 intermediate_certs[0]->os_cert_handle()->trust->emailFlags); | |
| 769 EXPECT_EQ( | |
| 770 unsigned(CERTDB_VALID_CA), | |
| 771 intermediate_certs[0]->os_cert_handle()->trust->objectSigningFlags); | |
| 772 | |
| 773 // Server cert should fail to verify. | |
| 774 CertVerifyResult verify_result2; | |
| 775 error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 776 NULL, &verify_result2); | |
| 777 EXPECT_EQ(ERR_CERT_REVOKED, error); | |
| 778 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result2.cert_status); | |
| 779 } | |
| 780 | |
| 781 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa2) { | |
| 782 CertDatabase::ImportCertFailureList failed; | |
| 783 | |
| 784 CertificateList intermediate_certs = CreateCertificateListFromFile( | |
| 785 GetTestCertsDirectory(), "2048-rsa-intermediate.pem", | |
| 786 X509Certificate::FORMAT_AUTO); | |
| 787 ASSERT_EQ(1U, intermediate_certs.size()); | |
| 788 | |
| 789 // Import Intermediate CA cert and trust it. | |
| 790 EXPECT_TRUE(cert_db_.ImportCACerts(intermediate_certs, | |
| 791 CertDatabase::TRUSTED_SSL, &failed)); | |
| 792 EXPECT_EQ(0U, failed.size()); | |
| 793 | |
| 794 CertificateList certs = CreateCertificateListFromFile( | |
| 795 GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", | |
| 796 X509Certificate::FORMAT_AUTO); | |
| 797 ASSERT_EQ(1U, certs.size()); | |
| 798 | |
| 799 // Import server cert with default trust. | |
| 800 EXPECT_TRUE(cert_db_.ImportServerCert( | |
| 801 certs, CertDatabase::TRUST_DEFAULT, &failed)); | |
| 802 EXPECT_EQ(0U, failed.size()); | |
| 803 EXPECT_EQ(CertDatabase::TRUST_DEFAULT, | |
| 804 cert_db_.GetCertTrust(certs[0], SERVER_CERT)); | |
| 805 | |
| 806 // Server cert should verify. | |
| 807 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 808 int flags = 0; | |
| 809 CertVerifyResult verify_result; | |
| 810 int error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 811 NULL, &verify_result); | |
| 812 EXPECT_EQ(OK, error); | |
| 813 EXPECT_EQ(0U, verify_result.cert_status); | |
| 814 | |
| 815 // Without explicit trust of the intermediate, verification should fail. | |
| 816 EXPECT_TRUE(cert_db_.SetCertTrust( | |
| 817 intermediate_certs[0], CA_CERT, CertDatabase::TRUST_DEFAULT)); | |
| 818 | |
| 819 // Server cert should fail to verify. | |
| 820 CertVerifyResult verify_result2; | |
| 821 error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 822 NULL, &verify_result2); | |
| 823 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | |
| 824 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status); | |
| 825 } | |
| 826 | |
| 827 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa3) { | |
| 828 CertDatabase::ImportCertFailureList failed; | |
| 829 | |
| 830 CertificateList ca_certs = CreateCertificateListFromFile( | |
| 831 GetTestCertsDirectory(), "2048-rsa-root.pem", | |
| 832 X509Certificate::FORMAT_AUTO); | |
| 833 ASSERT_EQ(1U, ca_certs.size()); | |
| 834 | |
| 835 // Import Root CA cert and default trust it. | |
| 836 EXPECT_TRUE(cert_db_.ImportCACerts(ca_certs, CertDatabase::TRUST_DEFAULT, | |
| 837 &failed)); | |
| 838 EXPECT_EQ(0U, failed.size()); | |
| 839 | |
| 840 CertificateList intermediate_certs = CreateCertificateListFromFile( | |
| 841 GetTestCertsDirectory(), "2048-rsa-intermediate.pem", | |
| 842 X509Certificate::FORMAT_AUTO); | |
| 843 ASSERT_EQ(1U, intermediate_certs.size()); | |
| 844 | |
| 845 // Import Intermediate CA cert and trust it. | |
| 846 EXPECT_TRUE(cert_db_.ImportCACerts(intermediate_certs, | |
| 847 CertDatabase::TRUSTED_SSL, &failed)); | |
| 848 EXPECT_EQ(0U, failed.size()); | |
| 849 | |
| 850 CertificateList certs = CreateCertificateListFromFile( | |
| 851 GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", | |
| 852 X509Certificate::FORMAT_AUTO); | |
| 853 ASSERT_EQ(1U, certs.size()); | |
| 854 | |
| 855 // Import server cert with default trust. | |
| 856 EXPECT_TRUE(cert_db_.ImportServerCert( | |
| 857 certs, CertDatabase::TRUST_DEFAULT, &failed)); | |
| 858 EXPECT_EQ(0U, failed.size()); | |
| 859 EXPECT_EQ(CertDatabase::TRUST_DEFAULT, | |
| 860 cert_db_.GetCertTrust(certs[0], SERVER_CERT)); | |
| 861 | |
| 862 // Server cert should verify. | |
| 863 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 864 int flags = 0; | |
| 865 CertVerifyResult verify_result; | |
| 866 int error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 867 NULL, &verify_result); | |
| 868 EXPECT_EQ(OK, error); | |
| 869 EXPECT_EQ(0U, verify_result.cert_status); | |
| 870 | |
| 871 // Without explicit trust of the intermediate, verification should fail. | |
| 872 EXPECT_TRUE(cert_db_.SetCertTrust( | |
| 873 intermediate_certs[0], CA_CERT, CertDatabase::TRUST_DEFAULT)); | |
| 874 | |
| 875 // Server cert should fail to verify. | |
| 876 CertVerifyResult verify_result2; | |
| 877 error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 878 NULL, &verify_result2); | |
| 879 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); | |
| 880 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result2.cert_status); | |
| 881 } | |
| 882 | |
| 883 TEST_F(CertDatabaseNSSTest, TrustIntermediateCa4) { | |
| 884 // Explicit distrust only works starting in NSS 3.13. | |
| 885 if (!NSS_VersionCheck("3.13")) { | |
| 886 LOG(INFO) << "test skipped on NSS < 3.13"; | |
| 887 return; | |
| 888 } | |
| 889 | |
| 890 CertDatabase::ImportCertFailureList failed; | |
| 891 | |
| 892 CertificateList ca_certs = CreateCertificateListFromFile( | |
| 893 GetTestCertsDirectory(), "2048-rsa-root.pem", | |
| 894 X509Certificate::FORMAT_AUTO); | |
| 895 ASSERT_EQ(1U, ca_certs.size()); | |
| 896 | |
| 897 // Import Root CA cert and trust it. | |
| 898 EXPECT_TRUE(cert_db_.ImportCACerts(ca_certs, CertDatabase::TRUSTED_SSL, | |
| 899 &failed)); | |
| 900 EXPECT_EQ(0U, failed.size()); | |
| 901 | |
| 902 CertificateList intermediate_certs = CreateCertificateListFromFile( | |
| 903 GetTestCertsDirectory(), "2048-rsa-intermediate.pem", | |
| 904 X509Certificate::FORMAT_AUTO); | |
| 905 ASSERT_EQ(1U, intermediate_certs.size()); | |
| 906 | |
| 907 // Import Intermediate CA cert and distrust it. | |
| 908 EXPECT_TRUE(cert_db_.ImportCACerts(intermediate_certs, | |
| 909 CertDatabase::DISTRUSTED_SSL, &failed)); | |
| 910 EXPECT_EQ(0U, failed.size()); | |
| 911 | |
| 912 CertificateList certs = CreateCertificateListFromFile( | |
| 913 GetTestCertsDirectory(), "2048-rsa-ee-by-2048-rsa-intermediate.pem", | |
| 914 X509Certificate::FORMAT_AUTO); | |
| 915 ASSERT_EQ(1U, certs.size()); | |
| 916 | |
| 917 // Import server cert with default trust. | |
| 918 EXPECT_TRUE(cert_db_.ImportServerCert( | |
| 919 certs, CertDatabase::TRUST_DEFAULT, &failed)); | |
| 920 EXPECT_EQ(0U, failed.size()); | |
| 921 EXPECT_EQ(CertDatabase::TRUST_DEFAULT, | |
| 922 cert_db_.GetCertTrust(certs[0], SERVER_CERT)); | |
| 923 | |
| 924 // Server cert should not verify. | |
| 925 scoped_refptr<CertVerifyProc> verify_proc(CertVerifyProc::CreateDefault()); | |
| 926 int flags = 0; | |
| 927 CertVerifyResult verify_result; | |
| 928 int error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 929 NULL, &verify_result); | |
| 930 EXPECT_EQ(ERR_CERT_REVOKED, error); | |
| 931 EXPECT_EQ(CERT_STATUS_REVOKED, verify_result.cert_status); | |
| 932 | |
| 933 // Without explicit distrust of the intermediate, verification should succeed. | |
| 934 EXPECT_TRUE(cert_db_.SetCertTrust( | |
| 935 intermediate_certs[0], CA_CERT, CertDatabase::TRUST_DEFAULT)); | |
| 936 | |
| 937 // Server cert should verify. | |
| 938 CertVerifyResult verify_result2; | |
| 939 error = verify_proc->Verify(certs[0], "127.0.0.1", flags, | |
| 940 NULL, &verify_result2); | |
|
wtc
2012/05/30 00:19:24
Nit: indentation of the arguments is wrong. The o
mattm
2012/05/30 22:40:58
Done.
| |
| 941 EXPECT_EQ(OK, error); | |
| 942 EXPECT_EQ(0U, verify_result2.cert_status); | |
| 575 } | 943 } |
| 576 | 944 |
| 577 } // namespace net | 945 } // namespace net |
| OLD | NEW |