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

Side by Side Diff: net/cert/cert_verify_proc_unittest.cc

Issue 108653013: Export verified_cert and public_key_hashes on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove unnecessary NET_EXPORT. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #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 11 matching lines...) Expand all
22 #include "net/cert/test_root_certs.h" 22 #include "net/cert/test_root_certs.h"
23 #include "net/cert/x509_certificate.h" 23 #include "net/cert/x509_certificate.h"
24 #include "net/test/cert_test_util.h" 24 #include "net/test/cert_test_util.h"
25 #include "net/test/test_certificate_data.h" 25 #include "net/test/test_certificate_data.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 27
28 #if defined(OS_WIN) 28 #if defined(OS_WIN)
29 #include "base/win/windows_version.h" 29 #include "base/win/windows_version.h"
30 #elif defined(OS_MACOSX) && !defined(OS_IOS) 30 #elif defined(OS_MACOSX) && !defined(OS_IOS)
31 #include "base/mac/mac_util.h" 31 #include "base/mac/mac_util.h"
32 #elif defined(OS_ANDROID)
33 #include "base/android/build_info.h"
32 #endif 34 #endif
33 35
34 using base::HexEncode; 36 using base::HexEncode;
35 37
36 namespace net { 38 namespace net {
37 39
38 namespace { 40 namespace {
39 41
40 // 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.
41 // From http://www.gossamer-threads.com/lists/fulldisc/full-disclosure/70363 43 // From http://www.gossamer-threads.com/lists/fulldisc/full-disclosure/70363
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 X509Certificate* cert, 78 X509Certificate* cert,
77 const std::string& hostname, 79 const std::string& hostname,
78 int flags, 80 int flags,
79 CRLSet* crl_set, 81 CRLSet* crl_set,
80 const CertificateList& additional_trust_anchors, 82 const CertificateList& additional_trust_anchors,
81 CertVerifyResult* verify_result) { 83 CertVerifyResult* verify_result) {
82 verify_result->is_issued_by_known_root = is_well_known_; 84 verify_result->is_issued_by_known_root = is_well_known_;
83 return OK; 85 return OK;
84 } 86 }
85 87
88 bool SupportsReturningVerifiedChain() {
89 #if defined(OS_ANDROID)
90 // Before API level 17, Android does not expose the APIs necessary to get at
91 // the verified certificate chain.
92 if (base::android::BuildInfo::GetInstance()->sdk_int() < 17)
93 return false;
94 #endif
95 return true;
96 }
97
98 bool SupportsDetectingKnownRoots() {
99 #if defined(OS_ANDROID)
100 // Before API level 17, Android does not expose the APIs necessary to get at
101 // the verified certificate chain and detect known roots.
102 if (base::android::BuildInfo::GetInstance()->sdk_int() < 17)
103 return false;
104 #endif
105 return true;
106 }
107
86 } // namespace 108 } // namespace
87 109
88 class CertVerifyProcTest : public testing::Test { 110 class CertVerifyProcTest : public testing::Test {
89 public: 111 public:
90 CertVerifyProcTest() 112 CertVerifyProcTest()
91 : verify_proc_(CertVerifyProc::CreateDefault()) { 113 : verify_proc_(CertVerifyProc::CreateDefault()) {
92 } 114 }
93 virtual ~CertVerifyProcTest() {} 115 virtual ~CertVerifyProcTest() {}
94 116
95 protected: 117 protected:
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 } 413 }
392 } 414 }
393 } 415 }
394 416
395 // Regression test for http://crbug.com/108514. 417 // Regression test for http://crbug.com/108514.
396 #if defined(OS_MACOSX) && !defined(OS_IOS) 418 #if defined(OS_MACOSX) && !defined(OS_IOS)
397 // Disabled on OS X - Security.framework doesn't ignore superflous certificates 419 // Disabled on OS X - Security.framework doesn't ignore superflous certificates
398 // provided by servers. See CertVerifyProcTest.CybertrustGTERoot for further 420 // provided by servers. See CertVerifyProcTest.CybertrustGTERoot for further
399 // details. 421 // details.
400 #define MAYBE_ExtraneousMD5RootCert DISABLED_ExtraneousMD5RootCert 422 #define MAYBE_ExtraneousMD5RootCert DISABLED_ExtraneousMD5RootCert
401 #elif defined(USE_OPENSSL) || defined(OS_ANDROID)
402 // Disabled for OpenSSL / Android - Android and OpenSSL do not attempt to find
403 // a minimal certificate chain, thus prefer the MD5 root over the SHA-1 root.
404 #define MAYBE_ExtraneousMD5RootCert DISABLED_ExtraneousMD5RootCert
405 #else 423 #else
406 #define MAYBE_ExtraneousMD5RootCert ExtraneousMD5RootCert 424 #define MAYBE_ExtraneousMD5RootCert ExtraneousMD5RootCert
407 #endif 425 #endif
408 TEST_F(CertVerifyProcTest, MAYBE_ExtraneousMD5RootCert) { 426 TEST_F(CertVerifyProcTest, MAYBE_ExtraneousMD5RootCert) {
427 if (!SupportsReturningVerifiedChain()) {
428 LOG(INFO) << "Skipping this test in this platform.";
429 return;
430 }
431
409 base::FilePath certs_dir = GetTestCertsDirectory(); 432 base::FilePath certs_dir = GetTestCertsDirectory();
410 433
411 scoped_refptr<X509Certificate> server_cert = 434 scoped_refptr<X509Certificate> server_cert =
412 ImportCertFromFile(certs_dir, "cross-signed-leaf.pem"); 435 ImportCertFromFile(certs_dir, "cross-signed-leaf.pem");
413 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert.get()); 436 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert.get());
414 437
415 scoped_refptr<X509Certificate> extra_cert = 438 scoped_refptr<X509Certificate> extra_cert =
416 ImportCertFromFile(certs_dir, "cross-signed-root-md5.pem"); 439 ImportCertFromFile(certs_dir, "cross-signed-root-md5.pem");
417 ASSERT_NE(static_cast<X509Certificate*>(NULL), extra_cert.get()); 440 ASSERT_NE(static_cast<X509Certificate*>(NULL), extra_cert.get());
418 441
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 int error = Verify(leaf.get(), 570 int error = Verify(leaf.get(),
548 "test.example.com", 571 "test.example.com",
549 flags, 572 flags,
550 NULL, 573 NULL,
551 empty_cert_list_, 574 empty_cert_list_,
552 &verify_result); 575 &verify_result);
553 EXPECT_EQ(OK, error); 576 EXPECT_EQ(OK, error);
554 EXPECT_EQ(0U, verify_result.cert_status); 577 EXPECT_EQ(0U, verify_result.cert_status);
555 } 578 }
556 579
557 #if defined(OS_ANDROID) 580 TEST_F(CertVerifyProcTest, NameConstraintsFailure) {
558 // Disabled because Android isn't filling in SPKI hashes: crbug.com/116838. 581 if (!SupportsReturningVerifiedChain()) {
559 #define MAYBE_NameConstraintsFailure DISABLED_NameConstraintsFailure 582 LOG(INFO) << "Skipping this test in this platform.";
560 #else 583 return;
561 #define MAYBE_NameConstraintsFailure NameConstraintsFailure 584 }
562 #endif 585
563 TEST_F(CertVerifyProcTest, MAYBE_NameConstraintsFailure) {
564 CertificateList ca_cert_list = 586 CertificateList ca_cert_list =
565 CreateCertificateListFromFile(GetTestCertsDirectory(), 587 CreateCertificateListFromFile(GetTestCertsDirectory(),
566 "root_ca_cert.pem", 588 "root_ca_cert.pem",
567 X509Certificate::FORMAT_AUTO); 589 X509Certificate::FORMAT_AUTO);
568 ASSERT_EQ(1U, ca_cert_list.size()); 590 ASSERT_EQ(1U, ca_cert_list.size());
569 ScopedTestRoot test_root(ca_cert_list[0]); 591 ScopedTestRoot test_root(ca_cert_list[0]);
570 592
571 CertificateList cert_list = CreateCertificateListFromFile( 593 CertificateList cert_list = CreateCertificateListFromFile(
572 GetTestCertsDirectory(), "name_constraint_bad.crt", 594 GetTestCertsDirectory(), "name_constraint_bad.crt",
573 X509Certificate::FORMAT_AUTO); 595 X509Certificate::FORMAT_AUTO);
(...skipping 10 matching lines...) Expand all
584 "test.example.com", 606 "test.example.com",
585 flags, 607 flags,
586 NULL, 608 NULL,
587 empty_cert_list_, 609 empty_cert_list_,
588 &verify_result); 610 &verify_result);
589 EXPECT_EQ(ERR_CERT_NAME_CONSTRAINT_VIOLATION, error); 611 EXPECT_EQ(ERR_CERT_NAME_CONSTRAINT_VIOLATION, error);
590 EXPECT_EQ(CERT_STATUS_NAME_CONSTRAINT_VIOLATION, 612 EXPECT_EQ(CERT_STATUS_NAME_CONSTRAINT_VIOLATION,
591 verify_result.cert_status & CERT_STATUS_NAME_CONSTRAINT_VIOLATION); 613 verify_result.cert_status & CERT_STATUS_NAME_CONSTRAINT_VIOLATION);
592 } 614 }
593 615
594 // The certse.pem certificate has been revoked. crbug.com/259723.
595 TEST_F(CertVerifyProcTest, TestKnownRoot) { 616 TEST_F(CertVerifyProcTest, TestKnownRoot) {
617 if (!SupportsDetectingKnownRoots()) {
618 LOG(INFO) << "Skipping this test in this platform.";
619 return;
620 }
621
596 base::FilePath certs_dir = GetTestCertsDirectory(); 622 base::FilePath certs_dir = GetTestCertsDirectory();
597 CertificateList certs = CreateCertificateListFromFile( 623 CertificateList certs = CreateCertificateListFromFile(
598 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO); 624 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO);
599 ASSERT_EQ(2U, certs.size()); 625 ASSERT_EQ(2U, certs.size());
600 626
601 X509Certificate::OSCertHandles intermediates; 627 X509Certificate::OSCertHandles intermediates;
602 intermediates.push_back(certs[1]->os_cert_handle()); 628 intermediates.push_back(certs[1]->os_cert_handle());
603 629
604 scoped_refptr<X509Certificate> cert_chain = 630 scoped_refptr<X509Certificate> cert_chain =
605 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 631 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
606 intermediates); 632 intermediates);
607 633
608 int flags = 0; 634 int flags = 0;
609 CertVerifyResult verify_result; 635 CertVerifyResult verify_result;
610 // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug 636 // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug
611 // against agl. See also PublicKeyHashes. 637 // against agl. See also PublicKeyHashes.
612 int error = Verify(cert_chain.get(), 638 int error = Verify(cert_chain.get(),
613 "satveda.com", 639 "satveda.com",
614 flags, 640 flags,
615 NULL, 641 NULL,
616 empty_cert_list_, 642 empty_cert_list_,
617 &verify_result); 643 &verify_result);
618 EXPECT_EQ(OK, error); 644 EXPECT_EQ(OK, error);
619 EXPECT_EQ(0U, verify_result.cert_status); 645 EXPECT_EQ(0U, verify_result.cert_status);
620 EXPECT_TRUE(verify_result.is_issued_by_known_root); 646 EXPECT_TRUE(verify_result.is_issued_by_known_root);
621 } 647 }
622 648
623 // The certse.pem certificate has been revoked. crbug.com/259723. 649 // The certse.pem certificate has been revoked. crbug.com/259723.
624 TEST_F(CertVerifyProcTest, PublicKeyHashes) { 650 TEST_F(CertVerifyProcTest, PublicKeyHashes) {
651 if (!SupportsReturningVerifiedChain()) {
652 LOG(INFO) << "Skipping this test in this platform.";
653 return;
654 }
655
625 base::FilePath certs_dir = GetTestCertsDirectory(); 656 base::FilePath certs_dir = GetTestCertsDirectory();
626 CertificateList certs = CreateCertificateListFromFile( 657 CertificateList certs = CreateCertificateListFromFile(
627 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO); 658 certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO);
628 ASSERT_EQ(2U, certs.size()); 659 ASSERT_EQ(2U, certs.size());
629 660
630 X509Certificate::OSCertHandles intermediates; 661 X509Certificate::OSCertHandles intermediates;
631 intermediates.push_back(certs[1]->os_cert_handle()); 662 intermediates.push_back(certs[1]->os_cert_handle());
632 663
633 scoped_refptr<X509Certificate> cert_chain = 664 scoped_refptr<X509Certificate> cert_chain =
634 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 665 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 #endif 741 #endif
711 } 742 }
712 743
713 // Basic test for returning the chain in CertVerifyResult. Note that the 744 // Basic test for returning the chain in CertVerifyResult. Note that the
714 // returned chain may just be a reflection of the originally supplied chain; 745 // returned chain may just be a reflection of the originally supplied chain;
715 // that is, if any errors occur, the default chain returned is an exact copy 746 // that is, if any errors occur, the default chain returned is an exact copy
716 // of the certificate to be verified. The remaining VerifyReturn* tests are 747 // of the certificate to be verified. The remaining VerifyReturn* tests are
717 // used to ensure that the actual, verified chain is being returned by 748 // used to ensure that the actual, verified chain is being returned by
718 // Verify(). 749 // Verify().
719 TEST_F(CertVerifyProcTest, VerifyReturnChainBasic) { 750 TEST_F(CertVerifyProcTest, VerifyReturnChainBasic) {
751 if (!SupportsReturningVerifiedChain()) {
752 LOG(INFO) << "Skipping this test in this platform.";
753 return;
754 }
755
720 base::FilePath certs_dir = GetTestCertsDirectory(); 756 base::FilePath certs_dir = GetTestCertsDirectory();
721 CertificateList certs = CreateCertificateListFromFile( 757 CertificateList certs = CreateCertificateListFromFile(
722 certs_dir, "x509_verify_results.chain.pem", 758 certs_dir, "x509_verify_results.chain.pem",
723 X509Certificate::FORMAT_AUTO); 759 X509Certificate::FORMAT_AUTO);
724 ASSERT_EQ(3U, certs.size()); 760 ASSERT_EQ(3U, certs.size());
725 761
726 X509Certificate::OSCertHandles intermediates; 762 X509Certificate::OSCertHandles intermediates;
727 intermediates.push_back(certs[1]->os_cert_handle()); 763 intermediates.push_back(certs[1]->os_cert_handle());
728 intermediates.push_back(certs[2]->os_cert_handle()); 764 intermediates.push_back(certs[2]->os_cert_handle());
729 765
(...skipping 22 matching lines...) Expand all
752 verify_result.verified_cert->os_cert_handle())); 788 verify_result.verified_cert->os_cert_handle()));
753 const X509Certificate::OSCertHandles& return_intermediates = 789 const X509Certificate::OSCertHandles& return_intermediates =
754 verify_result.verified_cert->GetIntermediateCertificates(); 790 verify_result.verified_cert->GetIntermediateCertificates();
755 ASSERT_EQ(2U, return_intermediates.size()); 791 ASSERT_EQ(2U, return_intermediates.size());
756 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0], 792 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0],
757 certs[1]->os_cert_handle())); 793 certs[1]->os_cert_handle()));
758 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1], 794 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1],
759 certs[2]->os_cert_handle())); 795 certs[2]->os_cert_handle()));
760 } 796 }
761 797
762 #if defined(OS_ANDROID)
763 // TODO(ppi): Disabled because is_issued_by_known_root is incorrect on Android.
764 // Once this is fixed, re-enable this check for android. crbug.com/116838
765 #define MAYBE_IntranetHostsRejected DISABLED_IntranetHostsRejected
766 #else
767 #define MAYBE_IntranetHostsRejected IntranetHostsRejected
768 #endif
769
770 // Test that certificates issued for 'intranet' names (that is, containing no 798 // Test that certificates issued for 'intranet' names (that is, containing no
771 // known public registry controlled domain information) issued by well-known 799 // known public registry controlled domain information) issued by well-known
772 // CAs are flagged appropriately, while certificates that are issued by 800 // CAs are flagged appropriately, while certificates that are issued by
773 // internal CAs are not flagged. 801 // internal CAs are not flagged.
774 TEST_F(CertVerifyProcTest, MAYBE_IntranetHostsRejected) { 802 TEST_F(CertVerifyProcTest, IntranetHostsRejected) {
803 if (!SupportsDetectingKnownRoots()) {
804 LOG(INFO) << "Skipping this test in this platform.";
805 return;
806 }
807
775 CertificateList cert_list = CreateCertificateListFromFile( 808 CertificateList cert_list = CreateCertificateListFromFile(
776 GetTestCertsDirectory(), "ok_cert.pem", 809 GetTestCertsDirectory(), "ok_cert.pem",
777 X509Certificate::FORMAT_AUTO); 810 X509Certificate::FORMAT_AUTO);
778 ASSERT_EQ(1U, cert_list.size()); 811 ASSERT_EQ(1U, cert_list.size());
779 scoped_refptr<X509Certificate> cert(cert_list[0]); 812 scoped_refptr<X509Certificate> cert(cert_list[0]);
780 813
781 CertVerifyResult verify_result; 814 CertVerifyResult verify_result;
782 int error = 0; 815 int error = 0;
783 816
784 // Intranet names for public CAs should be flagged: 817 // Intranet names for public CAs should be flagged:
(...skipping 10 matching lines...) Expand all
795 EXPECT_EQ(OK, error); 828 EXPECT_EQ(OK, error);
796 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_NON_UNIQUE_NAME); 829 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_NON_UNIQUE_NAME);
797 } 830 }
798 831
799 // Test that the certificate returned in CertVerifyResult is able to reorder 832 // Test that the certificate returned in CertVerifyResult is able to reorder
800 // certificates that are not ordered from end-entity to root. While this is 833 // certificates that are not ordered from end-entity to root. While this is
801 // a protocol violation if sent during a TLS handshake, if multiple sources 834 // a protocol violation if sent during a TLS handshake, if multiple sources
802 // of intermediate certificates are combined, it's possible that order may 835 // of intermediate certificates are combined, it's possible that order may
803 // not be maintained. 836 // not be maintained.
804 TEST_F(CertVerifyProcTest, VerifyReturnChainProperlyOrdered) { 837 TEST_F(CertVerifyProcTest, VerifyReturnChainProperlyOrdered) {
838 if (!SupportsReturningVerifiedChain()) {
839 LOG(INFO) << "Skipping this test in this platform.";
840 return;
841 }
842
805 base::FilePath certs_dir = GetTestCertsDirectory(); 843 base::FilePath certs_dir = GetTestCertsDirectory();
806 CertificateList certs = CreateCertificateListFromFile( 844 CertificateList certs = CreateCertificateListFromFile(
807 certs_dir, "x509_verify_results.chain.pem", 845 certs_dir, "x509_verify_results.chain.pem",
808 X509Certificate::FORMAT_AUTO); 846 X509Certificate::FORMAT_AUTO);
809 ASSERT_EQ(3U, certs.size()); 847 ASSERT_EQ(3U, certs.size());
810 848
811 // Construct the chain out of order. 849 // Construct the chain out of order.
812 X509Certificate::OSCertHandles intermediates; 850 X509Certificate::OSCertHandles intermediates;
813 intermediates.push_back(certs[2]->os_cert_handle()); 851 intermediates.push_back(certs[2]->os_cert_handle());
814 intermediates.push_back(certs[1]->os_cert_handle()); 852 intermediates.push_back(certs[1]->os_cert_handle());
(...skipping 26 matching lines...) Expand all
841 ASSERT_EQ(2U, return_intermediates.size()); 879 ASSERT_EQ(2U, return_intermediates.size());
842 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0], 880 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0],
843 certs[1]->os_cert_handle())); 881 certs[1]->os_cert_handle()));
844 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1], 882 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1],
845 certs[2]->os_cert_handle())); 883 certs[2]->os_cert_handle()));
846 } 884 }
847 885
848 // Test that Verify() filters out certificates which are not related to 886 // Test that Verify() filters out certificates which are not related to
849 // or part of the certificate chain being verified. 887 // or part of the certificate chain being verified.
850 TEST_F(CertVerifyProcTest, VerifyReturnChainFiltersUnrelatedCerts) { 888 TEST_F(CertVerifyProcTest, VerifyReturnChainFiltersUnrelatedCerts) {
889 if (!SupportsReturningVerifiedChain()) {
890 LOG(INFO) << "Skipping this test in this platform.";
891 return;
892 }
893
851 base::FilePath certs_dir = GetTestCertsDirectory(); 894 base::FilePath certs_dir = GetTestCertsDirectory();
852 CertificateList certs = CreateCertificateListFromFile( 895 CertificateList certs = CreateCertificateListFromFile(
853 certs_dir, "x509_verify_results.chain.pem", 896 certs_dir, "x509_verify_results.chain.pem",
854 X509Certificate::FORMAT_AUTO); 897 X509Certificate::FORMAT_AUTO);
855 ASSERT_EQ(3U, certs.size()); 898 ASSERT_EQ(3U, certs.size());
856 ScopedTestRoot scoped_root(certs[2].get()); 899 ScopedTestRoot scoped_root(certs[2].get());
857 900
858 scoped_refptr<X509Certificate> unrelated_certificate = 901 scoped_refptr<X509Certificate> unrelated_certificate =
859 ImportCertFromFile(certs_dir, "duplicate_cn_1.pem"); 902 ImportCertFromFile(certs_dir, "duplicate_cn_1.pem");
860 scoped_refptr<X509Certificate> unrelated_certificate2 = 903 scoped_refptr<X509Certificate> unrelated_certificate2 =
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 982
940 // Clearing the |trust_anchors| makes verification fail again (the cache 983 // Clearing the |trust_anchors| makes verification fail again (the cache
941 // should be skipped). 984 // should be skipped).
942 error = Verify( 985 error = Verify(
943 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result); 986 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result);
944 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); 987 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error);
945 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status); 988 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, verify_result.cert_status);
946 EXPECT_FALSE(verify_result.is_issued_by_additional_trust_anchor); 989 EXPECT_FALSE(verify_result.is_issued_by_additional_trust_anchor);
947 } 990 }
948 991
992 // Tests that certificates issued by user-supplied roots are not flagged as
993 // issued by a known root. This should pass whether or not the platform supports
994 // detecting known roots.
995 TEST_F(CertVerifyProcTest, IsIssuedByKnownRootIgnoresTestRoots) {
996 // Load root_ca_cert.pem into the test root store.
997 TestRootCerts* root_certs = TestRootCerts::GetInstance();
998 root_certs->AddFromFile(
999 GetTestCertsDirectory().AppendASCII("root_ca_cert.pem"));
1000
1001 CertificateList cert_list = CreateCertificateListFromFile(
1002 GetTestCertsDirectory(), "ok_cert.pem",
1003 X509Certificate::FORMAT_AUTO);
1004 ASSERT_EQ(1U, cert_list.size());
1005 scoped_refptr<X509Certificate> cert(cert_list[0]);
1006
1007 // Verification should pass.
1008 int flags = 0;
1009 CertVerifyResult verify_result;
1010 int error = Verify(
1011 cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, &verify_result);
1012 EXPECT_EQ(OK, error);
1013 EXPECT_EQ(0U, verify_result.cert_status);
1014 // But should not be marked as a known root.
1015 EXPECT_FALSE(verify_result.is_issued_by_known_root);
1016 }
1017
949 #if defined(OS_MACOSX) && !defined(OS_IOS) 1018 #if defined(OS_MACOSX) && !defined(OS_IOS)
950 // Tests that, on OS X, issues with a cross-certified Baltimore CyberTrust 1019 // Tests that, on OS X, issues with a cross-certified Baltimore CyberTrust
951 // Root can be successfully worked around once Apple completes removing the 1020 // Root can be successfully worked around once Apple completes removing the
952 // older GTE CyberTrust Root from its trusted root store. 1021 // older GTE CyberTrust Root from its trusted root store.
953 // 1022 //
954 // The issue is caused by servers supplying the cross-certified intermediate 1023 // The issue is caused by servers supplying the cross-certified intermediate
955 // (necessary for certain mobile platforms), which OS X does not recognize 1024 // (necessary for certain mobile platforms), which OS X does not recognize
956 // as already existing within its trust store. 1025 // as already existing within its trust store.
957 TEST_F(CertVerifyProcTest, CybertrustGTERoot) { 1026 TEST_F(CertVerifyProcTest, CybertrustGTERoot) {
958 CertificateList certs = CreateCertificateListFromFile( 1027 CertificateList certs = CreateCertificateListFromFile(
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
1524 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID); 1593 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_COMMON_NAME_INVALID);
1525 } 1594 }
1526 } 1595 }
1527 1596
1528 WRAPPED_INSTANTIATE_TEST_CASE_P( 1597 WRAPPED_INSTANTIATE_TEST_CASE_P(
1529 VerifyName, 1598 VerifyName,
1530 CertVerifyProcNameTest, 1599 CertVerifyProcNameTest,
1531 testing::ValuesIn(kVerifyNameData)); 1600 testing::ValuesIn(kVerifyNameData));
1532 1601
1533 } // namespace net 1602 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698