| Index: net/socket/ssl_client_socket_unittest.cc
|
| diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
|
| index 74d8c83bcc407737e51e5e421394f22e7ddd7ed3..75f3f4fbdfadc386bb206163c2566a7467e57c7a 100644
|
| --- a/net/socket/ssl_client_socket_unittest.cc
|
| +++ b/net/socket/ssl_client_socket_unittest.cc
|
| @@ -30,6 +30,7 @@
|
| #include "net/cert/ct_policy_enforcer.h"
|
| #include "net/cert/ct_policy_status.h"
|
| #include "net/cert/ct_verifier.h"
|
| +#include "net/cert/do_nothing_ct_verifier.h"
|
| #include "net/cert/mock_cert_verifier.h"
|
| #include "net/cert/signed_certificate_timestamp_and_status.h"
|
| #include "net/cert/test_root_certs.h"
|
| @@ -706,11 +707,11 @@ class AsyncFailingChannelIDStore : public ChannelIDStore {
|
| class MockCTVerifier : public CTVerifier {
|
| public:
|
| MOCK_METHOD5(Verify,
|
| - int(X509Certificate*,
|
| - const std::string&,
|
| - const std::string&,
|
| - SignedCertificateTimestampAndStatusList*,
|
| - const NetLogWithSource&));
|
| + void(X509Certificate*,
|
| + base::StringPiece,
|
| + base::StringPiece,
|
| + SignedCertificateTimestampAndStatusList*,
|
| + const NetLogWithSource&));
|
| MOCK_METHOD1(SetObserver, void(CTVerifier::Observer*));
|
| };
|
|
|
| @@ -740,7 +741,7 @@ class SSLClientSocketTest : public PlatformTest {
|
| : socket_factory_(ClientSocketFactory::GetDefaultFactory()),
|
| cert_verifier_(new MockCertVerifier),
|
| transport_security_state_(new TransportSecurityState),
|
| - ct_verifier_(new MockCTVerifier),
|
| + ct_verifier_(new DoNothingCTVerifier),
|
| ct_policy_enforcer_(new MockCTPolicyEnforcer) {
|
| cert_verifier_->set_default_result(OK);
|
| context_.cert_verifier = cert_verifier_.get();
|
| @@ -748,8 +749,6 @@ class SSLClientSocketTest : public PlatformTest {
|
| context_.cert_transparency_verifier = ct_verifier_.get();
|
| context_.ct_policy_enforcer = ct_policy_enforcer_.get();
|
|
|
| - EXPECT_CALL(*ct_verifier_, Verify(_, _, _, _, _))
|
| - .WillRepeatedly(Return(OK));
|
| EXPECT_CALL(*ct_policy_enforcer_, DoesConformToCertPolicy(_, _, _))
|
| .WillRepeatedly(
|
| Return(ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS));
|
| @@ -847,7 +846,7 @@ class SSLClientSocketTest : public PlatformTest {
|
| ClientSocketFactory* socket_factory_;
|
| std::unique_ptr<MockCertVerifier> cert_verifier_;
|
| std::unique_ptr<TransportSecurityState> transport_security_state_;
|
| - std::unique_ptr<MockCTVerifier> ct_verifier_;
|
| + std::unique_ptr<DoNothingCTVerifier> ct_verifier_;
|
| std::unique_ptr<MockCTPolicyEnforcer> ct_policy_enforcer_;
|
| SSLClientSocketContext context_;
|
| std::unique_ptr<SSLClientSocket> sock_;
|
| @@ -2303,10 +2302,10 @@ TEST_F(SSLClientSocketCertRequestInfoTest, CertKeyTypes) {
|
|
|
| TEST_F(SSLClientSocketTest, ConnectSignedCertTimestampsEnabledTLSExtension) {
|
| // Encoding of SCT List containing 'test'.
|
| - std::string sct_ext("\x00\x06\x00\x04test", 8);
|
| + base::StringPiece sct_ext("\x00\x06\x00\x04test", 8);
|
|
|
| SpawnedTestServer::SSLOptions ssl_options;
|
| - ssl_options.signed_cert_timestamps_tls_ext = sct_ext;
|
| + ssl_options.signed_cert_timestamps_tls_ext = sct_ext.as_string();
|
| ASSERT_TRUE(StartTestServer(ssl_options));
|
|
|
| SSLConfig ssl_config;
|
| @@ -2315,9 +2314,11 @@ TEST_F(SSLClientSocketTest, ConnectSignedCertTimestampsEnabledTLSExtension) {
|
| MockCTVerifier ct_verifier;
|
| SetCTVerifier(&ct_verifier);
|
|
|
| - // Check that the SCT list is extracted as expected.
|
| - EXPECT_CALL(ct_verifier, Verify(_, "", sct_ext, _, _))
|
| - .WillRepeatedly(Return(ERR_CT_NO_SCTS_VERIFIED_OK));
|
| + // Check that the SCT list is extracted from the TLS extension as expected,
|
| + // while also simulating that it was an unparsable response.
|
| + SignedCertificateTimestampAndStatusList sct_list;
|
| + EXPECT_CALL(ct_verifier, Verify(_, _, sct_ext, _, _))
|
| + .WillOnce(testing::SetArgPointee<3>(sct_list));
|
|
|
| int rv;
|
| ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
|
| @@ -2326,27 +2327,6 @@ TEST_F(SSLClientSocketTest, ConnectSignedCertTimestampsEnabledTLSExtension) {
|
| EXPECT_TRUE(sock_->signed_cert_timestamps_received_);
|
| }
|
|
|
| -// Test that when an EV certificate is received, but no CT verifier
|
| -// or certificate policy enforcer are defined, then the EV status
|
| -// of the certificate is maintained.
|
| -TEST_F(SSLClientSocketTest, EVCertStatusMaintainedNoCTVerifier) {
|
| - SpawnedTestServer::SSLOptions ssl_options;
|
| - ASSERT_TRUE(StartTestServer(ssl_options));
|
| -
|
| - SSLConfig ssl_config;
|
| - AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config);
|
| -
|
| - // No verifier to skip CT and policy checks.
|
| - int rv;
|
| - ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
|
| - EXPECT_THAT(rv, IsOk());
|
| -
|
| - SSLInfo result;
|
| - ASSERT_TRUE(sock_->GetSSLInfo(&result));
|
| -
|
| - EXPECT_TRUE(result.cert_status & CERT_STATUS_IS_EV);
|
| -}
|
| -
|
| // Test that when a CT verifier and a CTPolicyEnforcer are defined, and
|
| // the EV certificate used conforms to the CT/EV policy, its EV status
|
| // is maintained.
|
| @@ -2357,12 +2337,6 @@ TEST_F(SSLClientSocketTest, EVCertStatusMaintainedForCompliantCert) {
|
| SSLConfig ssl_config;
|
| AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config);
|
|
|
| - // To activate the CT/EV policy enforcement non-null CTVerifier and
|
| - // CTPolicyEnforcer are needed.
|
| - MockCTVerifier ct_verifier;
|
| - SetCTVerifier(&ct_verifier);
|
| - EXPECT_CALL(ct_verifier, Verify(_, "", "", _, _)).WillRepeatedly(Return(OK));
|
| -
|
| // Emulate compliance of the certificate to the policy.
|
| MockCTPolicyEnforcer policy_enforcer;
|
| SetCTPolicyEnforcer(&policy_enforcer);
|
| @@ -2393,12 +2367,6 @@ TEST_F(SSLClientSocketTest, EVCertStatusRemovedForNonCompliantCert) {
|
| SSLConfig ssl_config;
|
| AddServerCertStatusToSSLConfig(CERT_STATUS_IS_EV, &ssl_config);
|
|
|
| - // To activate the CT/EV policy enforcement non-null CTVerifier and
|
| - // CTPolicyEnforcer are needed.
|
| - MockCTVerifier ct_verifier;
|
| - SetCTVerifier(&ct_verifier);
|
| - EXPECT_CALL(ct_verifier, Verify(_, "", "", _, _)).WillRepeatedly(Return(OK));
|
| -
|
| // Emulate non-compliance of the certificate to the policy.
|
| MockCTPolicyEnforcer policy_enforcer;
|
| SetCTPolicyEnforcer(&policy_enforcer);
|
| @@ -2420,20 +2388,6 @@ TEST_F(SSLClientSocketTest, EVCertStatusRemovedForNonCompliantCert) {
|
| EXPECT_TRUE(result.cert_status & CERT_STATUS_CT_COMPLIANCE_FAILED);
|
| }
|
|
|
| -namespace {
|
| -
|
| -bool IsValidOCSPResponse(const base::StringPiece& input) {
|
| - der::Parser parser((der::Input(input)));
|
| - der::Parser sequence;
|
| - return parser.ReadSequence(&sequence) && !parser.HasMore() &&
|
| - sequence.SkipTag(der::kEnumerated) &&
|
| - sequence.SkipTag(der::kTagContextSpecific | der::kTagConstructed |
|
| - 0) &&
|
| - !sequence.HasMore();
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| // Test that enabling Signed Certificate Timestamps enables OCSP stapling.
|
| TEST_F(SSLClientSocketTest, ConnectSignedCertTimestampsEnabledOCSP) {
|
| SpawnedTestServer::SSLOptions ssl_options;
|
| @@ -2450,18 +2404,6 @@ TEST_F(SSLClientSocketTest, ConnectSignedCertTimestampsEnabledOCSP) {
|
| // is able to process the OCSP status itself.
|
| ssl_config.signed_cert_timestamps_enabled = true;
|
|
|
| - MockCTVerifier ct_verifier;
|
| - SetCTVerifier(&ct_verifier);
|
| -
|
| - // Check that the OCSP response is extracted and well-formed. It should be the
|
| - // DER encoding of an OCSPResponse (RFC 2560), so check that it consists of a
|
| - // SEQUENCE of an ENUMERATED type and an element tagged with [0] EXPLICIT. In
|
| - // particular, it should not include the overall two-byte length prefix from
|
| - // TLS.
|
| - EXPECT_CALL(ct_verifier,
|
| - Verify(_, Truly(IsValidOCSPResponse), "", _, _)).WillRepeatedly(
|
| - Return(ERR_CT_NO_SCTS_VERIFIED_OK));
|
| -
|
| int rv;
|
| ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
|
| EXPECT_THAT(rv, IsOk());
|
|
|