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" |
11 #include "base/files/file_util.h" | 11 #include "base/files/file_util.h" |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/sha1.h" | 14 #include "base/sha1.h" |
15 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
16 #include "base/test/histogram_tester.h" | 16 #include "base/test/histogram_tester.h" |
17 #include "base/test/scoped_feature_list.h" | |
18 #include "build/build_config.h" | 17 #include "build/build_config.h" |
19 #include "crypto/sha2.h" | 18 #include "crypto/sha2.h" |
20 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
21 #include "net/cert/asn1_util.h" | 20 #include "net/cert/asn1_util.h" |
22 #include "net/cert/cert_status_flags.h" | 21 #include "net/cert/cert_status_flags.h" |
23 #include "net/cert/cert_verifier.h" | 22 #include "net/cert/cert_verifier.h" |
24 #include "net/cert/cert_verify_result.h" | 23 #include "net/cert/cert_verify_result.h" |
25 #include "net/cert/crl_set.h" | 24 #include "net/cert/crl_set.h" |
26 #include "net/cert/crl_set_storage.h" | 25 #include "net/cert/crl_set_storage.h" |
27 #include "net/cert/test_root_certs.h" | 26 #include "net/cert/test_root_certs.h" |
28 #include "net/cert/x509_certificate.h" | 27 #include "net/cert/x509_certificate.h" |
29 #include "net/test/cert_test_util.h" | 28 #include "net/test/cert_test_util.h" |
30 #include "net/test/gtest_util.h" | 29 #include "net/test/gtest_util.h" |
31 #include "net/test/test_certificate_data.h" | 30 #include "net/test/test_certificate_data.h" |
32 #include "net/test/test_data_directory.h" | 31 #include "net/test/test_data_directory.h" |
33 #include "testing/gmock/include/gmock/gmock.h" | 32 #include "testing/gmock/include/gmock/gmock.h" |
34 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
35 | 34 |
36 #if defined(OS_ANDROID) | 35 #if defined(OS_ANDROID) |
37 #include "base/android/build_info.h" | 36 #include "base/android/build_info.h" |
38 #endif | 37 #endif |
39 | 38 |
40 #if defined(OS_MACOSX) && !defined(OS_IOS) | 39 #if defined(OS_MACOSX) && !defined(OS_IOS) |
41 #include "net/cert/test_keychain_search_list_mac.h" | 40 #include "net/cert/test_keychain_search_list_mac.h" |
42 #endif | 41 #endif |
43 | 42 |
44 #if defined(OS_WIN) | |
45 #include "base/win/windows_version.h" | |
46 #endif | |
47 | |
48 using net::test::IsError; | 43 using net::test::IsError; |
49 using net::test::IsOk; | 44 using net::test::IsOk; |
50 | 45 |
51 using base::HexEncode; | 46 using base::HexEncode; |
52 | 47 |
53 namespace net { | 48 namespace net { |
54 | 49 |
55 namespace { | 50 namespace { |
56 | 51 |
57 const char kTLSFeatureExtensionHistogram[] = | 52 const char kTLSFeatureExtensionHistogram[] = |
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
869 // However, if the CA is not well known, these should not be flagged: | 864 // However, if the CA is not well known, these should not be flagged: |
870 dummy_result.Reset(); | 865 dummy_result.Reset(); |
871 dummy_result.is_issued_by_known_root = false; | 866 dummy_result.is_issued_by_known_root = false; |
872 verify_proc_ = new MockCertVerifyProc(dummy_result); | 867 verify_proc_ = new MockCertVerifyProc(dummy_result); |
873 error = | 868 error = |
874 Verify(cert.get(), "intranet", 0, NULL, empty_cert_list_, &verify_result); | 869 Verify(cert.get(), "intranet", 0, NULL, empty_cert_list_, &verify_result); |
875 EXPECT_THAT(error, IsOk()); | 870 EXPECT_THAT(error, IsOk()); |
876 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_NON_UNIQUE_NAME); | 871 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_NON_UNIQUE_NAME); |
877 } | 872 } |
878 | 873 |
879 // While all SHA-1 certificates should be rejected, in the event that there | 874 // Test that a SHA-1 certificate from a publicly trusted CA issued after |
880 // emerges some unexpected bug, test that the 'legacy' behaviour works | 875 // 1 January 2016 is rejected, but those issued before that date, or with |
881 // correctly - rejecting all SHA-1 certificates from publicly trusted CAs | 876 // SHA-1 in the intermediate, is not rejected. |
882 // that were issued after 1 January 2016, while still allowing those from | 877 TEST_F(CertVerifyProcTest, VerifyRejectsSHA1AfterDeprecation) { |
883 // before that date, with SHA-1 in the intermediate, or from an enterprise | |
884 // CA. | |
885 // | |
886 // TODO(rsleevi): This code should be removed in M57. | |
887 TEST_F(CertVerifyProcTest, VerifyRejectsSHA1AfterDeprecationLegacyMode) { | |
888 base::test::ScopedFeatureList scoped_feature_list; | |
889 scoped_feature_list.InitAndEnableFeature(CertVerifyProc::kSHA1LegacyMode); | |
890 | |
891 CertVerifyResult dummy_result; | 878 CertVerifyResult dummy_result; |
892 CertVerifyResult verify_result; | 879 CertVerifyResult verify_result; |
893 int error = 0; | 880 int error = 0; |
894 scoped_refptr<X509Certificate> cert; | 881 scoped_refptr<X509Certificate> cert; |
895 | 882 |
896 // Publicly trusted SHA-1 leaf certificates issued before 1 January 2016 | 883 // Publicly trusted SHA-1 leaf certificates issued before 1 January 2016 |
897 // are accepted. | 884 // are accepted. |
898 verify_result.Reset(); | 885 verify_result.Reset(); |
899 dummy_result.Reset(); | 886 dummy_result.Reset(); |
900 dummy_result.is_issued_by_known_root = true; | 887 dummy_result.is_issued_by_known_root = true; |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1518 "/System/Library/Keychains/SystemRootCertificates.keychain"; | 1505 "/System/Library/Keychains/SystemRootCertificates.keychain"; |
1519 ASSERT_TRUE(base::PathExists(base::FilePath(root_keychain_path))); | 1506 ASSERT_TRUE(base::PathExists(base::FilePath(root_keychain_path))); |
1520 | 1507 |
1521 SecKeychainRef keychain; | 1508 SecKeychainRef keychain; |
1522 OSStatus status = SecKeychainOpen(root_keychain_path, &keychain); | 1509 OSStatus status = SecKeychainOpen(root_keychain_path, &keychain); |
1523 ASSERT_EQ(errSecSuccess, status); | 1510 ASSERT_EQ(errSecSuccess, status); |
1524 CFRelease(keychain); | 1511 CFRelease(keychain); |
1525 } | 1512 } |
1526 #endif | 1513 #endif |
1527 | 1514 |
1528 bool AreSHA1IntermediatesAllowed() { | |
1529 #if defined(OS_WIN) | |
1530 // TODO(rsleevi): Remove this once https://crbug.com/588789 is resolved | |
1531 // for Windows 7/2008 users. | |
1532 // Note: This must be kept in sync with cert_verify_proc.cc | |
1533 return base::win::GetVersion() >= base::win::VERSION_WIN8; | |
1534 #else | |
1535 return false; | |
1536 #endif | |
1537 } | |
1538 | |
1539 TEST_F(CertVerifyProcTest, RejectsMD2) { | |
1540 scoped_refptr<X509Certificate> cert( | |
1541 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | |
1542 ASSERT_TRUE(cert); | |
1543 | |
1544 CertVerifyResult result; | |
1545 result.has_md2 = true; | |
1546 verify_proc_ = new MockCertVerifyProc(result); | |
1547 | |
1548 int flags = 0; | |
1549 CertVerifyResult verify_result; | |
1550 int error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, | |
1551 empty_cert_list_, &verify_result); | |
1552 EXPECT_THAT(error, IsError(ERR_CERT_INVALID)); | |
1553 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID); | |
1554 } | |
1555 | |
1556 TEST_F(CertVerifyProcTest, RejectsMD4) { | |
1557 scoped_refptr<X509Certificate> cert( | |
1558 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | |
1559 ASSERT_TRUE(cert); | |
1560 | |
1561 CertVerifyResult result; | |
1562 result.has_md4 = true; | |
1563 verify_proc_ = new MockCertVerifyProc(result); | |
1564 | |
1565 int flags = 0; | |
1566 CertVerifyResult verify_result; | |
1567 int error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, | |
1568 empty_cert_list_, &verify_result); | |
1569 EXPECT_THAT(error, IsError(ERR_CERT_INVALID)); | |
1570 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID); | |
1571 } | |
1572 | |
1573 TEST_F(CertVerifyProcTest, RejectsMD5) { | |
1574 scoped_refptr<X509Certificate> cert( | |
1575 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | |
1576 ASSERT_TRUE(cert); | |
1577 | |
1578 CertVerifyResult result; | |
1579 result.has_md5 = true; | |
1580 verify_proc_ = new MockCertVerifyProc(result); | |
1581 | |
1582 int flags = 0; | |
1583 CertVerifyResult verify_result; | |
1584 int error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, | |
1585 empty_cert_list_, &verify_result); | |
1586 EXPECT_THAT(error, IsError(ERR_CERT_WEAK_SIGNATURE_ALGORITHM)); | |
1587 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_WEAK_SIGNATURE_ALGORITHM); | |
1588 } | |
1589 | |
1590 TEST_F(CertVerifyProcTest, RejectsPublicSHA1Leaves) { | |
1591 scoped_refptr<X509Certificate> cert( | |
1592 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | |
1593 ASSERT_TRUE(cert); | |
1594 | |
1595 CertVerifyResult result; | |
1596 result.has_sha1 = true; | |
1597 result.has_sha1_leaf = true; | |
1598 result.is_issued_by_known_root = true; | |
1599 verify_proc_ = new MockCertVerifyProc(result); | |
1600 | |
1601 int flags = 0; | |
1602 CertVerifyResult verify_result; | |
1603 int error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, | |
1604 empty_cert_list_, &verify_result); | |
1605 EXPECT_THAT(error, IsError(ERR_CERT_WEAK_SIGNATURE_ALGORITHM)); | |
1606 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_WEAK_SIGNATURE_ALGORITHM); | |
1607 } | |
1608 | |
1609 TEST_F(CertVerifyProcTest, RejectsPublicSHA1IntermediatesUnlessAllowed) { | |
1610 scoped_refptr<X509Certificate> cert( | |
1611 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | |
1612 ASSERT_TRUE(cert); | |
1613 | |
1614 CertVerifyResult result; | |
1615 result.has_sha1 = true; | |
1616 result.has_sha1_leaf = false; | |
1617 result.is_issued_by_known_root = true; | |
1618 verify_proc_ = new MockCertVerifyProc(result); | |
1619 | |
1620 int flags = 0; | |
1621 CertVerifyResult verify_result; | |
1622 int error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, | |
1623 empty_cert_list_, &verify_result); | |
1624 if (AreSHA1IntermediatesAllowed()) { | |
1625 EXPECT_THAT(error, IsOk()); | |
1626 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT); | |
1627 } else { | |
1628 EXPECT_THAT(error, IsError(ERR_CERT_WEAK_SIGNATURE_ALGORITHM)); | |
1629 EXPECT_TRUE(verify_result.cert_status & | |
1630 CERT_STATUS_WEAK_SIGNATURE_ALGORITHM); | |
1631 } | |
1632 } | |
1633 | |
1634 TEST_F(CertVerifyProcTest, AcceptsPrivateSHA1) { | |
1635 scoped_refptr<X509Certificate> cert( | |
1636 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | |
1637 ASSERT_TRUE(cert); | |
1638 | |
1639 CertVerifyResult result; | |
1640 result.has_sha1 = true; | |
1641 result.has_sha1_leaf = true; | |
1642 result.is_issued_by_known_root = false; | |
1643 verify_proc_ = new MockCertVerifyProc(result); | |
1644 | |
1645 int flags = 0; | |
1646 CertVerifyResult verify_result; | |
1647 int error = Verify(cert.get(), "127.0.0.1", flags, nullptr /* crl_set */, | |
1648 empty_cert_list_, &verify_result); | |
1649 EXPECT_THAT(error, IsOk()); | |
1650 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_SHA1_SIGNATURE_PRESENT); | |
1651 } | |
1652 | |
1653 enum ExpectedAlgorithms { | 1515 enum ExpectedAlgorithms { |
1654 EXPECT_MD2 = 1 << 0, | 1516 EXPECT_MD2 = 1 << 0, |
1655 EXPECT_MD4 = 1 << 1, | 1517 EXPECT_MD4 = 1 << 1, |
1656 EXPECT_MD5 = 1 << 2, | 1518 EXPECT_MD5 = 1 << 2, |
1657 EXPECT_SHA1 = 1 << 3, | 1519 EXPECT_SHA1 = 1 << 3, |
1658 EXPECT_SHA1_LEAF = 1 << 4, | 1520 EXPECT_SHA1_LEAF = 1 << 4, |
1659 }; | 1521 }; |
1660 | 1522 |
1661 struct WeakDigestTestData { | 1523 struct WeakDigestTestData { |
1662 const char* root_cert_filename; | 1524 const char* root_cert_filename; |
(...skipping 14 matching lines...) Expand all Loading... |
1677 } | 1539 } |
1678 | 1540 |
1679 class CertVerifyProcWeakDigestTest | 1541 class CertVerifyProcWeakDigestTest |
1680 : public CertVerifyProcTest, | 1542 : public CertVerifyProcTest, |
1681 public testing::WithParamInterface<WeakDigestTestData> { | 1543 public testing::WithParamInterface<WeakDigestTestData> { |
1682 public: | 1544 public: |
1683 CertVerifyProcWeakDigestTest() {} | 1545 CertVerifyProcWeakDigestTest() {} |
1684 virtual ~CertVerifyProcWeakDigestTest() {} | 1546 virtual ~CertVerifyProcWeakDigestTest() {} |
1685 }; | 1547 }; |
1686 | 1548 |
1687 // Test that the underlying cryptographic library properly surfaces the | 1549 TEST_P(CertVerifyProcWeakDigestTest, Verify) { |
1688 // algorithms used in the chain. Some libraries, like NSS, don't return | |
1689 // the failing chain on error, and thus not all tests can be run. | |
1690 TEST_P(CertVerifyProcWeakDigestTest, VerifyDetectsAlgorithm) { | |
1691 WeakDigestTestData data = GetParam(); | 1550 WeakDigestTestData data = GetParam(); |
1692 base::FilePath certs_dir = GetTestCertsDirectory(); | 1551 base::FilePath certs_dir = GetTestCertsDirectory(); |
1693 | 1552 |
1694 ScopedTestRoot test_root; | 1553 ScopedTestRoot test_root; |
1695 if (data.root_cert_filename) { | 1554 if (data.root_cert_filename) { |
1696 scoped_refptr<X509Certificate> root_cert = | 1555 scoped_refptr<X509Certificate> root_cert = |
1697 ImportCertFromFile(certs_dir, data.root_cert_filename); | 1556 ImportCertFromFile(certs_dir, data.root_cert_filename); |
1698 ASSERT_TRUE(root_cert); | 1557 ASSERT_NE(static_cast<X509Certificate*>(NULL), root_cert.get()); |
1699 test_root.Reset(root_cert.get()); | 1558 test_root.Reset(root_cert.get()); |
1700 } | 1559 } |
1701 | 1560 |
1702 scoped_refptr<X509Certificate> intermediate_cert = | 1561 scoped_refptr<X509Certificate> intermediate_cert = |
1703 ImportCertFromFile(certs_dir, data.intermediate_cert_filename); | 1562 ImportCertFromFile(certs_dir, data.intermediate_cert_filename); |
1704 ASSERT_TRUE(intermediate_cert); | 1563 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert.get()); |
1705 scoped_refptr<X509Certificate> ee_cert = | 1564 scoped_refptr<X509Certificate> ee_cert = |
1706 ImportCertFromFile(certs_dir, data.ee_cert_filename); | 1565 ImportCertFromFile(certs_dir, data.ee_cert_filename); |
1707 ASSERT_TRUE(ee_cert); | 1566 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_cert.get()); |
1708 | 1567 |
1709 X509Certificate::OSCertHandles intermediates; | 1568 X509Certificate::OSCertHandles intermediates; |
1710 intermediates.push_back(intermediate_cert->os_cert_handle()); | 1569 intermediates.push_back(intermediate_cert->os_cert_handle()); |
1711 | 1570 |
1712 scoped_refptr<X509Certificate> ee_chain = | 1571 scoped_refptr<X509Certificate> ee_chain = |
1713 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(), | 1572 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(), |
1714 intermediates); | 1573 intermediates); |
1715 ASSERT_TRUE(ee_chain); | 1574 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain.get()); |
1716 | 1575 |
1717 int flags = 0; | 1576 int flags = 0; |
1718 CertVerifyResult verify_result; | 1577 CertVerifyResult verify_result; |
1719 Verify(ee_chain.get(), "127.0.0.1", flags, NULL, empty_cert_list_, | 1578 int rv = Verify(ee_chain.get(), |
1720 &verify_result); | 1579 "127.0.0.1", |
| 1580 flags, |
| 1581 NULL, |
| 1582 empty_cert_list_, |
| 1583 &verify_result); |
1721 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD2), verify_result.has_md2); | 1584 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD2), verify_result.has_md2); |
1722 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD4), verify_result.has_md4); | 1585 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD4), verify_result.has_md4); |
1723 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD5), verify_result.has_md5); | 1586 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_MD5), verify_result.has_md5); |
1724 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_SHA1), verify_result.has_sha1); | 1587 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_SHA1), verify_result.has_sha1); |
1725 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_SHA1_LEAF), | 1588 EXPECT_EQ(!!(data.expected_algorithms & EXPECT_SHA1_LEAF), |
1726 verify_result.has_sha1_leaf); | 1589 verify_result.has_sha1_leaf); |
| 1590 |
| 1591 EXPECT_FALSE(verify_result.is_issued_by_additional_trust_anchor); |
| 1592 |
| 1593 // Ensure that MD4 and MD2 are tagged as invalid. |
| 1594 if (data.expected_algorithms & (EXPECT_MD2 | EXPECT_MD4)) { |
| 1595 EXPECT_EQ(CERT_STATUS_INVALID, |
| 1596 verify_result.cert_status & CERT_STATUS_INVALID); |
| 1597 } |
| 1598 |
| 1599 // Ensure that MD5 is flagged as weak. |
| 1600 if (data.expected_algorithms & EXPECT_MD5) { |
| 1601 EXPECT_EQ( |
| 1602 CERT_STATUS_WEAK_SIGNATURE_ALGORITHM, |
| 1603 verify_result.cert_status & CERT_STATUS_WEAK_SIGNATURE_ALGORITHM); |
| 1604 } |
| 1605 |
| 1606 // If a root cert is present, then check that the chain was rejected if any |
| 1607 // weak algorithms are present. This is only checked when a root cert is |
| 1608 // present because the error reported for incomplete chains with weak |
| 1609 // algorithms depends on which implementation was used to validate (NSS, |
| 1610 // OpenSSL, CryptoAPI, Security.framework) and upon which weak algorithm |
| 1611 // present (MD2, MD4, MD5). |
| 1612 if (data.root_cert_filename) { |
| 1613 if (data.expected_algorithms & (EXPECT_MD2 | EXPECT_MD4)) { |
| 1614 EXPECT_THAT(rv, IsError(ERR_CERT_INVALID)); |
| 1615 } else if (data.expected_algorithms & EXPECT_MD5) { |
| 1616 EXPECT_THAT(rv, IsError(ERR_CERT_WEAK_SIGNATURE_ALGORITHM)); |
| 1617 } else { |
| 1618 EXPECT_THAT(rv, IsOk()); |
| 1619 } |
| 1620 } |
1727 } | 1621 } |
1728 | 1622 |
1729 // Unlike TEST/TEST_F, which are macros that expand to further macros, | 1623 // Unlike TEST/TEST_F, which are macros that expand to further macros, |
1730 // INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that | 1624 // INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that |
1731 // stringizes the arguments. As a result, macros passed as parameters (such as | 1625 // stringizes the arguments. As a result, macros passed as parameters (such as |
1732 // prefix or test_case_name) will not be expanded by the preprocessor. To work | 1626 // prefix or test_case_name) will not be expanded by the preprocessor. To work |
1733 // around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the | 1627 // around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the |
1734 // pre-processor will expand macros such as MAYBE_test_name before | 1628 // pre-processor will expand macros such as MAYBE_test_name before |
1735 // instantiating the test. | 1629 // instantiating the test. |
1736 #define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ | 1630 #define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1967 } | 1861 } |
1968 #endif // defined(OS_MACOSX) && !defined(OS_IOS) | 1862 #endif // defined(OS_MACOSX) && !defined(OS_IOS) |
1969 | 1863 |
1970 // Tests that CertVerifyProc records a histogram correctly when a | 1864 // Tests that CertVerifyProc records a histogram correctly when a |
1971 // certificate chaining to a private root contains the TLS feature | 1865 // certificate chaining to a private root contains the TLS feature |
1972 // extension and does not have a stapled OCSP response. | 1866 // extension and does not have a stapled OCSP response. |
1973 TEST_F(CertVerifyProcTest, HasTLSFeatureExtensionUMA) { | 1867 TEST_F(CertVerifyProcTest, HasTLSFeatureExtensionUMA) { |
1974 base::HistogramTester histograms; | 1868 base::HistogramTester histograms; |
1975 scoped_refptr<X509Certificate> cert( | 1869 scoped_refptr<X509Certificate> cert( |
1976 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); | 1870 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); |
1977 ASSERT_TRUE(cert); | |
1978 CertVerifyResult result; | 1871 CertVerifyResult result; |
1979 result.is_issued_by_known_root = false; | 1872 result.is_issued_by_known_root = false; |
| 1873 result.verified_cert = cert; |
1980 verify_proc_ = new MockCertVerifyProc(result); | 1874 verify_proc_ = new MockCertVerifyProc(result); |
1981 | 1875 |
1982 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); | 1876 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); |
1983 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); | 1877 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); |
1984 | 1878 |
1985 int flags = 0; | 1879 int flags = 0; |
1986 CertVerifyResult verify_result; | 1880 CertVerifyResult verify_result; |
1987 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, | 1881 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, |
1988 &verify_result); | 1882 &verify_result); |
1989 EXPECT_EQ(OK, error); | 1883 EXPECT_EQ(OK, error); |
1990 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 1); | 1884 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 1); |
1991 histograms.ExpectBucketCount(kTLSFeatureExtensionHistogram, true, 1); | 1885 histograms.ExpectBucketCount(kTLSFeatureExtensionHistogram, true, 1); |
1992 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 1); | 1886 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 1); |
1993 histograms.ExpectBucketCount(kTLSFeatureExtensionOCSPHistogram, false, 1); | 1887 histograms.ExpectBucketCount(kTLSFeatureExtensionOCSPHistogram, false, 1); |
1994 } | 1888 } |
1995 | 1889 |
1996 // Tests that CertVerifyProc records a histogram correctly when a | 1890 // Tests that CertVerifyProc records a histogram correctly when a |
1997 // certificate chaining to a private root contains the TLS feature | 1891 // certificate chaining to a private root contains the TLS feature |
1998 // extension and does have a stapled OCSP response. | 1892 // extension and does have a stapled OCSP response. |
1999 TEST_F(CertVerifyProcTest, HasTLSFeatureExtensionWithStapleUMA) { | 1893 TEST_F(CertVerifyProcTest, HasTLSFeatureExtensionWithStapleUMA) { |
2000 base::HistogramTester histograms; | 1894 base::HistogramTester histograms; |
2001 scoped_refptr<X509Certificate> cert( | 1895 scoped_refptr<X509Certificate> cert( |
2002 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); | 1896 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); |
2003 ASSERT_TRUE(cert); | |
2004 CertVerifyResult result; | 1897 CertVerifyResult result; |
2005 result.is_issued_by_known_root = false; | 1898 result.is_issued_by_known_root = false; |
| 1899 result.verified_cert = cert; |
2006 verify_proc_ = new MockCertVerifyProc(result); | 1900 verify_proc_ = new MockCertVerifyProc(result); |
2007 | 1901 |
2008 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); | 1902 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); |
2009 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); | 1903 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); |
2010 | 1904 |
2011 int flags = 0; | 1905 int flags = 0; |
2012 CertVerifyResult verify_result; | 1906 CertVerifyResult verify_result; |
2013 int error = | 1907 int error = |
2014 VerifyWithOCSPResponse(cert.get(), "127.0.0.1", "dummy response", flags, | 1908 VerifyWithOCSPResponse(cert.get(), "127.0.0.1", "dummy response", flags, |
2015 NULL, empty_cert_list_, &verify_result); | 1909 NULL, empty_cert_list_, &verify_result); |
2016 EXPECT_EQ(OK, error); | 1910 EXPECT_EQ(OK, error); |
2017 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 1); | 1911 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 1); |
2018 histograms.ExpectBucketCount(kTLSFeatureExtensionHistogram, true, 1); | 1912 histograms.ExpectBucketCount(kTLSFeatureExtensionHistogram, true, 1); |
2019 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 1); | 1913 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 1); |
2020 histograms.ExpectBucketCount(kTLSFeatureExtensionOCSPHistogram, true, 1); | 1914 histograms.ExpectBucketCount(kTLSFeatureExtensionOCSPHistogram, true, 1); |
2021 } | 1915 } |
2022 | 1916 |
2023 // Tests that CertVerifyProc records a histogram correctly when a | 1917 // Tests that CertVerifyProc records a histogram correctly when a |
2024 // certificate chaining to a private root does not contain the TLS feature | 1918 // certificate chaining to a private root does not contain the TLS feature |
2025 // extension. | 1919 // extension. |
2026 TEST_F(CertVerifyProcTest, DoesNotHaveTLSFeatureExtensionUMA) { | 1920 TEST_F(CertVerifyProcTest, DoesNotHaveTLSFeatureExtensionUMA) { |
2027 base::HistogramTester histograms; | 1921 base::HistogramTester histograms; |
2028 scoped_refptr<X509Certificate> cert( | 1922 scoped_refptr<X509Certificate> cert( |
2029 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); | 1923 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); |
2030 ASSERT_TRUE(cert); | |
2031 CertVerifyResult result; | 1924 CertVerifyResult result; |
2032 result.is_issued_by_known_root = false; | 1925 result.is_issued_by_known_root = false; |
| 1926 result.verified_cert = cert; |
2033 verify_proc_ = new MockCertVerifyProc(result); | 1927 verify_proc_ = new MockCertVerifyProc(result); |
2034 | 1928 |
2035 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); | 1929 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); |
2036 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); | 1930 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); |
2037 | 1931 |
2038 int flags = 0; | 1932 int flags = 0; |
2039 CertVerifyResult verify_result; | 1933 CertVerifyResult verify_result; |
2040 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, | 1934 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, |
2041 &verify_result); | 1935 &verify_result); |
2042 EXPECT_EQ(OK, error); | 1936 EXPECT_EQ(OK, error); |
2043 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 1); | 1937 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 1); |
2044 histograms.ExpectBucketCount(kTLSFeatureExtensionHistogram, false, 1); | 1938 histograms.ExpectBucketCount(kTLSFeatureExtensionHistogram, false, 1); |
2045 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); | 1939 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); |
2046 } | 1940 } |
2047 | 1941 |
2048 // Tests that CertVerifyProc does not record a histogram when a | 1942 // Tests that CertVerifyProc does not record a histogram when a |
2049 // certificate contains the TLS feature extension but chains to a public | 1943 // certificate contains the TLS feature extension but chains to a public |
2050 // root. | 1944 // root. |
2051 TEST_F(CertVerifyProcTest, HasTLSFeatureExtensionWithPublicRootUMA) { | 1945 TEST_F(CertVerifyProcTest, HasTLSFeatureExtensionWithPublicRootUMA) { |
2052 base::HistogramTester histograms; | 1946 base::HistogramTester histograms; |
2053 scoped_refptr<X509Certificate> cert( | 1947 scoped_refptr<X509Certificate> cert( |
2054 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); | 1948 ImportCertFromFile(GetTestCertsDirectory(), "tls_feature_extension.pem")); |
2055 ASSERT_TRUE(cert); | |
2056 CertVerifyResult result; | 1949 CertVerifyResult result; |
2057 result.is_issued_by_known_root = true; | 1950 result.is_issued_by_known_root = true; |
| 1951 result.verified_cert = cert; |
2058 verify_proc_ = new MockCertVerifyProc(result); | 1952 verify_proc_ = new MockCertVerifyProc(result); |
2059 | 1953 |
2060 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); | 1954 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); |
2061 | 1955 |
2062 int flags = 0; | 1956 int flags = 0; |
2063 CertVerifyResult verify_result; | 1957 CertVerifyResult verify_result; |
2064 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, | 1958 int error = Verify(cert.get(), "127.0.0.1", flags, NULL, empty_cert_list_, |
2065 &verify_result); | 1959 &verify_result); |
2066 EXPECT_EQ(OK, error); | 1960 EXPECT_EQ(OK, error); |
2067 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); | 1961 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); |
2068 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); | 1962 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); |
2069 } | 1963 } |
2070 | 1964 |
2071 } // namespace net | 1965 } // namespace net |
OLD | NEW |