| 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/socket/ssl_client_socket.h" | 5 #include "net/socket/ssl_client_socket.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 MOCK_METHOD1(SetObserver, void(CTVerifier::Observer*)); | 862 MOCK_METHOD1(SetObserver, void(CTVerifier::Observer*)); |
| 863 }; | 863 }; |
| 864 | 864 |
| 865 // A mock CTPolicyEnforcer that returns a custom verification result. | 865 // A mock CTPolicyEnforcer that returns a custom verification result. |
| 866 class MockCTPolicyEnforcer : public CTPolicyEnforcer { | 866 class MockCTPolicyEnforcer : public CTPolicyEnforcer { |
| 867 public: | 867 public: |
| 868 MOCK_METHOD3(DoesConformToCertPolicy, | 868 MOCK_METHOD3(DoesConformToCertPolicy, |
| 869 ct::CertPolicyCompliance(X509Certificate* cert, | 869 ct::CertPolicyCompliance(X509Certificate* cert, |
| 870 const ct::SCTList&, | 870 const ct::SCTList&, |
| 871 const NetLogWithSource&)); | 871 const NetLogWithSource&)); |
| 872 MOCK_METHOD4(DoesConformToCTEVPolicy, | |
| 873 ct::EVPolicyCompliance(X509Certificate* cert, | |
| 874 const ct::EVCertsWhitelist*, | |
| 875 const ct::SCTList&, | |
| 876 const NetLogWithSource&)); | |
| 877 }; | 872 }; |
| 878 | 873 |
| 879 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { | 874 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { |
| 880 public: | 875 public: |
| 881 MOCK_METHOD1(IsCTRequiredForHost, | 876 MOCK_METHOD1(IsCTRequiredForHost, |
| 882 CTRequirementLevel(const std::string& host)); | 877 CTRequirementLevel(const std::string& host)); |
| 883 }; | 878 }; |
| 884 | 879 |
| 885 class SSLClientSocketTest : public PlatformTest { | 880 class SSLClientSocketTest : public PlatformTest { |
| 886 public: | 881 public: |
| 887 SSLClientSocketTest() | 882 SSLClientSocketTest() |
| 888 : socket_factory_(ClientSocketFactory::GetDefaultFactory()), | 883 : socket_factory_(ClientSocketFactory::GetDefaultFactory()), |
| 889 cert_verifier_(new MockCertVerifier), | 884 cert_verifier_(new MockCertVerifier), |
| 890 transport_security_state_(new TransportSecurityState), | 885 transport_security_state_(new TransportSecurityState), |
| 891 ct_verifier_(new DoNothingCTVerifier), | 886 ct_verifier_(new DoNothingCTVerifier), |
| 892 ct_policy_enforcer_(new MockCTPolicyEnforcer) { | 887 ct_policy_enforcer_(new MockCTPolicyEnforcer) { |
| 893 cert_verifier_->set_default_result(OK); | 888 cert_verifier_->set_default_result(OK); |
| 894 context_.cert_verifier = cert_verifier_.get(); | 889 context_.cert_verifier = cert_verifier_.get(); |
| 895 context_.transport_security_state = transport_security_state_.get(); | 890 context_.transport_security_state = transport_security_state_.get(); |
| 896 context_.cert_transparency_verifier = ct_verifier_.get(); | 891 context_.cert_transparency_verifier = ct_verifier_.get(); |
| 897 context_.ct_policy_enforcer = ct_policy_enforcer_.get(); | 892 context_.ct_policy_enforcer = ct_policy_enforcer_.get(); |
| 898 | 893 |
| 899 EXPECT_CALL(*ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _)) | 894 EXPECT_CALL(*ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _)) |
| 900 .WillRepeatedly( | 895 .WillRepeatedly( |
| 901 Return(ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS)); | 896 Return(ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS)); |
| 902 EXPECT_CALL(*ct_policy_enforcer_, DoesConformToCTEVPolicy(_, _, _, _)) | |
| 903 .WillRepeatedly( | |
| 904 Return(ct::EVPolicyCompliance::EV_POLICY_COMPLIES_VIA_SCTS)); | |
| 905 } | 897 } |
| 906 | 898 |
| 907 protected: | 899 protected: |
| 908 // The address of the spawned test server, after calling StartTestServer(). | 900 // The address of the spawned test server, after calling StartTestServer(). |
| 909 const AddressList& addr() const { return addr_; } | 901 const AddressList& addr() const { return addr_; } |
| 910 | 902 |
| 911 // The SpawnedTestServer object, after calling StartTestServer(). | 903 // The SpawnedTestServer object, after calling StartTestServer(). |
| 912 const SpawnedTestServer* spawned_test_server() const { | 904 const SpawnedTestServer* spawned_test_server() const { |
| 913 return spawned_test_server_.get(); | 905 return spawned_test_server_.get(); |
| 914 } | 906 } |
| (...skipping 1642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2557 | 2549 |
| 2558 SSLConfig ssl_config; | 2550 SSLConfig ssl_config; |
| 2559 AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config); | 2551 AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config); |
| 2560 | 2552 |
| 2561 // Emulate compliance of the certificate to the policy. | 2553 // Emulate compliance of the certificate to the policy. |
| 2562 MockCTPolicyEnforcer policy_enforcer; | 2554 MockCTPolicyEnforcer policy_enforcer; |
| 2563 SetCTPolicyEnforcer(&policy_enforcer); | 2555 SetCTPolicyEnforcer(&policy_enforcer); |
| 2564 EXPECT_CALL(policy_enforcer, DoesConformToCertPolicy(_, _, _)) | 2556 EXPECT_CALL(policy_enforcer, DoesConformToCertPolicy(_, _, _)) |
| 2565 .WillRepeatedly( | 2557 .WillRepeatedly( |
| 2566 Return(ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS)); | 2558 Return(ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS)); |
| 2567 EXPECT_CALL(policy_enforcer, DoesConformToCTEVPolicy(_, _, _, _)) | |
| 2568 .WillRepeatedly( | |
| 2569 Return(ct::EVPolicyCompliance::EV_POLICY_COMPLIES_VIA_SCTS)); | |
| 2570 | 2559 |
| 2571 int rv; | 2560 int rv; |
| 2572 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); | 2561 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); |
| 2573 EXPECT_THAT(rv, IsOk()); | 2562 EXPECT_THAT(rv, IsOk()); |
| 2574 | 2563 |
| 2575 SSLInfo result; | 2564 SSLInfo result; |
| 2576 ASSERT_TRUE(sock_->GetSSLInfo(&result)); | 2565 ASSERT_TRUE(sock_->GetSSLInfo(&result)); |
| 2577 | 2566 |
| 2578 EXPECT_TRUE(result.cert_status & CERT_STATUS_IS_EV); | 2567 EXPECT_TRUE(result.cert_status & CERT_STATUS_IS_EV); |
| 2579 } | 2568 } |
| 2580 | 2569 |
| 2581 // Test that when a CT verifier and a CTPolicyEnforcer are defined, but | 2570 // Test that when a CT verifier and a CTPolicyEnforcer are defined, but |
| 2582 // the EV certificate used does not conform to the CT/EV policy, its EV status | 2571 // the EV certificate used does not conform to the CT/EV policy, its EV status |
| 2583 // is removed. | 2572 // is removed. |
| 2584 TEST_F(SSLClientSocketTest, EVCertStatusRemovedForNonCompliantCert) { | 2573 TEST_F(SSLClientSocketTest, EVCertStatusRemovedForNonCompliantCert) { |
| 2585 SpawnedTestServer::SSLOptions ssl_options; | 2574 SpawnedTestServer::SSLOptions ssl_options; |
| 2586 ASSERT_TRUE(StartTestServer(ssl_options)); | 2575 ASSERT_TRUE(StartTestServer(ssl_options)); |
| 2587 | 2576 |
| 2588 SSLConfig ssl_config; | 2577 SSLConfig ssl_config; |
| 2589 AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config); | 2578 AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config); |
| 2590 | 2579 |
| 2591 // Emulate non-compliance of the certificate to the policy. | 2580 // Emulate non-compliance of the certificate to the policy. |
| 2592 MockCTPolicyEnforcer policy_enforcer; | 2581 MockCTPolicyEnforcer policy_enforcer; |
| 2593 SetCTPolicyEnforcer(&policy_enforcer); | 2582 SetCTPolicyEnforcer(&policy_enforcer); |
| 2594 EXPECT_CALL(policy_enforcer, DoesConformToCertPolicy(_, _, _)) | 2583 EXPECT_CALL(policy_enforcer, DoesConformToCertPolicy(_, _, _)) |
| 2595 .WillRepeatedly( | 2584 .WillRepeatedly( |
| 2596 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS)); | 2585 Return(ct::CertPolicyCompliance::CERT_POLICY_NOT_ENOUGH_SCTS)); |
| 2597 EXPECT_CALL(policy_enforcer, DoesConformToCTEVPolicy(_, _, _, _)) | |
| 2598 .WillRepeatedly( | |
| 2599 Return(ct::EVPolicyCompliance::EV_POLICY_NOT_ENOUGH_SCTS)); | |
| 2600 | 2586 |
| 2601 int rv; | 2587 int rv; |
| 2602 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); | 2588 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); |
| 2603 EXPECT_THAT(rv, IsOk()); | 2589 EXPECT_THAT(rv, IsOk()); |
| 2604 | 2590 |
| 2605 SSLInfo result; | 2591 SSLInfo result; |
| 2606 ASSERT_TRUE(sock_->GetSSLInfo(&result)); | 2592 ASSERT_TRUE(sock_->GetSSLInfo(&result)); |
| 2607 | 2593 |
| 2608 EXPECT_FALSE(result.cert_status & CERT_STATUS_IS_EV); | 2594 EXPECT_FALSE(result.cert_status & CERT_STATUS_IS_EV); |
| 2609 EXPECT_TRUE(result.cert_status & CERT_STATUS_CT_COMPLIANCE_FAILED); | 2595 EXPECT_TRUE(result.cert_status & CERT_STATUS_CT_COMPLIANCE_FAILED); |
| (...skipping 1391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4001 // The read buffer should be released. | 3987 // The read buffer should be released. |
| 4002 StreamSocket::SocketMemoryStats stats; | 3988 StreamSocket::SocketMemoryStats stats; |
| 4003 client->DumpMemoryStats(&stats); | 3989 client->DumpMemoryStats(&stats); |
| 4004 EXPECT_EQ(0u, stats.buffer_size); | 3990 EXPECT_EQ(0u, stats.buffer_size); |
| 4005 EXPECT_EQ(1u, stats.cert_count); | 3991 EXPECT_EQ(1u, stats.cert_count); |
| 4006 EXPECT_LT(0u, stats.cert_size); | 3992 EXPECT_LT(0u, stats.cert_size); |
| 4007 EXPECT_EQ(stats.cert_size, stats.total_size); | 3993 EXPECT_EQ(stats.cert_size, stats.total_size); |
| 4008 } | 3994 } |
| 4009 | 3995 |
| 4010 } // namespace net | 3996 } // namespace net |
| OLD | NEW |