| 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 // This test suite uses SSLClientSocket to test the implementation of | 5 // This test suite uses SSLClientSocket to test the implementation of |
| 6 // SSLServerSocket. In order to establish connections between the sockets | 6 // SSLServerSocket. In order to establish connections between the sockets |
| 7 // we need two additional classes: | 7 // we need two additional classes: |
| 8 // 1. FakeSocket | 8 // 1. FakeSocket |
| 9 // Connects SSL socket to FakeDataChannel. This class is just a stub. | 9 // Connects SSL socket to FakeDataChannel. This class is just a stub. |
| 10 // | 10 // |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "crypto/signature_creator.h" | 41 #include "crypto/signature_creator.h" |
| 42 #include "net/base/address_list.h" | 42 #include "net/base/address_list.h" |
| 43 #include "net/base/completion_callback.h" | 43 #include "net/base/completion_callback.h" |
| 44 #include "net/base/host_port_pair.h" | 44 #include "net/base/host_port_pair.h" |
| 45 #include "net/base/io_buffer.h" | 45 #include "net/base/io_buffer.h" |
| 46 #include "net/base/ip_address.h" | 46 #include "net/base/ip_address.h" |
| 47 #include "net/base/ip_endpoint.h" | 47 #include "net/base/ip_endpoint.h" |
| 48 #include "net/base/net_errors.h" | 48 #include "net/base/net_errors.h" |
| 49 #include "net/base/test_data_directory.h" | 49 #include "net/base/test_data_directory.h" |
| 50 #include "net/cert/cert_status_flags.h" | 50 #include "net/cert/cert_status_flags.h" |
| 51 #include "net/cert/ct_policy_enforcer.h" |
| 52 #include "net/cert/ct_policy_status.h" |
| 53 #include "net/cert/ct_verifier.h" |
| 51 #include "net/cert/mock_cert_verifier.h" | 54 #include "net/cert/mock_cert_verifier.h" |
| 52 #include "net/cert/mock_client_cert_verifier.h" | 55 #include "net/cert/mock_client_cert_verifier.h" |
| 53 #include "net/cert/x509_certificate.h" | 56 #include "net/cert/x509_certificate.h" |
| 54 #include "net/http/transport_security_state.h" | 57 #include "net/http/transport_security_state.h" |
| 55 #include "net/log/net_log.h" | 58 #include "net/log/net_log.h" |
| 56 #include "net/socket/client_socket_factory.h" | 59 #include "net/socket/client_socket_factory.h" |
| 57 #include "net/socket/socket_test_util.h" | 60 #include "net/socket/socket_test_util.h" |
| 58 #include "net/socket/ssl_client_socket.h" | 61 #include "net/socket/ssl_client_socket.h" |
| 59 #include "net/socket/stream_socket.h" | 62 #include "net/socket/stream_socket.h" |
| 60 #include "net/ssl/scoped_openssl_types.h" | 63 #include "net/ssl/scoped_openssl_types.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 72 namespace net { | 75 namespace net { |
| 73 | 76 |
| 74 namespace { | 77 namespace { |
| 75 | 78 |
| 76 const char kClientCertFileName[] = "client_1.pem"; | 79 const char kClientCertFileName[] = "client_1.pem"; |
| 77 const char kClientPrivateKeyFileName[] = "client_1.pk8"; | 80 const char kClientPrivateKeyFileName[] = "client_1.pk8"; |
| 78 const char kWrongClientCertFileName[] = "client_2.pem"; | 81 const char kWrongClientCertFileName[] = "client_2.pem"; |
| 79 const char kWrongClientPrivateKeyFileName[] = "client_2.pk8"; | 82 const char kWrongClientPrivateKeyFileName[] = "client_2.pk8"; |
| 80 const char kClientCertCAFileName[] = "client_1_ca.pem"; | 83 const char kClientCertCAFileName[] = "client_1_ca.pem"; |
| 81 | 84 |
| 85 class MockCTVerifier : public CTVerifier { |
| 86 public: |
| 87 MockCTVerifier() = default; |
| 88 ~MockCTVerifier() override = default; |
| 89 |
| 90 int Verify(X509Certificate* cert, |
| 91 const std::string& stapled_ocsp_response, |
| 92 const std::string& sct_list_from_tls_extension, |
| 93 ct::CTVerifyResult* result, |
| 94 const BoundNetLog& net_log) override { |
| 95 return net::OK; |
| 96 } |
| 97 |
| 98 void SetObserver(Observer* observer) override {} |
| 99 }; |
| 100 |
| 101 class MockCTPolicyEnforcer : public CTPolicyEnforcer { |
| 102 public: |
| 103 MockCTPolicyEnforcer() = default; |
| 104 ~MockCTPolicyEnforcer() override = default; |
| 105 ct::CertPolicyCompliance DoesConformToCertPolicy( |
| 106 X509Certificate* cert, |
| 107 const SCTList& verified_scts, |
| 108 const BoundNetLog& net_log) override { |
| 109 return ct::CertPolicyCompliance::CERT_POLICY_COMPLIES_VIA_SCTS; |
| 110 } |
| 111 |
| 112 ct::EVPolicyCompliance DoesConformToCTEVPolicy( |
| 113 X509Certificate* cert, |
| 114 const ct::EVCertsWhitelist* ev_whitelist, |
| 115 const SCTList& verified_scts, |
| 116 const BoundNetLog& net_log) override { |
| 117 return ct::EVPolicyCompliance::EV_POLICY_COMPLIES_VIA_SCTS; |
| 118 } |
| 119 }; |
| 120 |
| 82 class FakeDataChannel { | 121 class FakeDataChannel { |
| 83 public: | 122 public: |
| 84 FakeDataChannel() | 123 FakeDataChannel() |
| 85 : read_buf_len_(0), | 124 : read_buf_len_(0), |
| 86 closed_(false), | 125 closed_(false), |
| 87 write_called_after_close_(false), | 126 write_called_after_close_(false), |
| 88 weak_factory_(this) { | 127 weak_factory_(this) { |
| 89 } | 128 } |
| 90 | 129 |
| 91 int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { | 130 int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 EXPECT_LE(read, written); | 362 EXPECT_LE(read, written); |
| 324 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); | 363 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
| 325 } | 364 } |
| 326 | 365 |
| 327 class SSLServerSocketTest : public PlatformTest { | 366 class SSLServerSocketTest : public PlatformTest { |
| 328 public: | 367 public: |
| 329 SSLServerSocketTest() | 368 SSLServerSocketTest() |
| 330 : socket_factory_(ClientSocketFactory::GetDefaultFactory()), | 369 : socket_factory_(ClientSocketFactory::GetDefaultFactory()), |
| 331 cert_verifier_(new MockCertVerifier()), | 370 cert_verifier_(new MockCertVerifier()), |
| 332 client_cert_verifier_(new MockClientCertVerifier()), | 371 client_cert_verifier_(new MockClientCertVerifier()), |
| 333 transport_security_state_(new TransportSecurityState) {} | 372 transport_security_state_(new TransportSecurityState), |
| 373 ct_verifier_(new MockCTVerifier), |
| 374 ct_policy_enforcer_(new MockCTPolicyEnforcer) {} |
| 334 | 375 |
| 335 void SetUp() override { | 376 void SetUp() override { |
| 336 PlatformTest::SetUp(); | 377 PlatformTest::SetUp(); |
| 337 | 378 |
| 338 cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID); | 379 cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID); |
| 339 client_cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID); | 380 client_cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID); |
| 340 | 381 |
| 341 server_cert_ = | 382 server_cert_ = |
| 342 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der"); | 383 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der"); |
| 343 ASSERT_TRUE(server_cert_); | 384 ASSERT_TRUE(server_cert_); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 new ClientSocketHandle); | 418 new ClientSocketHandle); |
| 378 client_connection->SetSocket(std::unique_ptr<StreamSocket>( | 419 client_connection->SetSocket(std::unique_ptr<StreamSocket>( |
| 379 new FakeSocket(channel_1_.get(), channel_2_.get()))); | 420 new FakeSocket(channel_1_.get(), channel_2_.get()))); |
| 380 std::unique_ptr<StreamSocket> server_socket( | 421 std::unique_ptr<StreamSocket> server_socket( |
| 381 new FakeSocket(channel_2_.get(), channel_1_.get())); | 422 new FakeSocket(channel_2_.get(), channel_1_.get())); |
| 382 | 423 |
| 383 HostPortPair host_and_pair("unittest", 0); | 424 HostPortPair host_and_pair("unittest", 0); |
| 384 SSLClientSocketContext context; | 425 SSLClientSocketContext context; |
| 385 context.cert_verifier = cert_verifier_.get(); | 426 context.cert_verifier = cert_verifier_.get(); |
| 386 context.transport_security_state = transport_security_state_.get(); | 427 context.transport_security_state = transport_security_state_.get(); |
| 428 context.cert_transparency_verifier = ct_verifier_.get(); |
| 429 context.ct_policy_enforcer = ct_policy_enforcer_.get(); |
| 387 | 430 |
| 388 client_socket_ = socket_factory_->CreateSSLClientSocket( | 431 client_socket_ = socket_factory_->CreateSSLClientSocket( |
| 389 std::move(client_connection), host_and_pair, client_ssl_config_, | 432 std::move(client_connection), host_and_pair, client_ssl_config_, |
| 390 context); | 433 context); |
| 391 ASSERT_TRUE(client_socket_); | 434 ASSERT_TRUE(client_socket_); |
| 392 | 435 |
| 393 server_socket_ = | 436 server_socket_ = |
| 394 server_context_->CreateSSLServerSocket(std::move(server_socket)); | 437 server_context_->CreateSSLServerSocket(std::move(server_socket)); |
| 395 ASSERT_TRUE(server_socket_); | 438 ASSERT_TRUE(server_socket_); |
| 396 } | 439 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 std::unique_ptr<FakeDataChannel> channel_1_; | 502 std::unique_ptr<FakeDataChannel> channel_1_; |
| 460 std::unique_ptr<FakeDataChannel> channel_2_; | 503 std::unique_ptr<FakeDataChannel> channel_2_; |
| 461 SSLConfig client_ssl_config_; | 504 SSLConfig client_ssl_config_; |
| 462 SSLServerConfig server_ssl_config_; | 505 SSLServerConfig server_ssl_config_; |
| 463 std::unique_ptr<SSLClientSocket> client_socket_; | 506 std::unique_ptr<SSLClientSocket> client_socket_; |
| 464 std::unique_ptr<SSLServerSocket> server_socket_; | 507 std::unique_ptr<SSLServerSocket> server_socket_; |
| 465 ClientSocketFactory* socket_factory_; | 508 ClientSocketFactory* socket_factory_; |
| 466 std::unique_ptr<MockCertVerifier> cert_verifier_; | 509 std::unique_ptr<MockCertVerifier> cert_verifier_; |
| 467 std::unique_ptr<MockClientCertVerifier> client_cert_verifier_; | 510 std::unique_ptr<MockClientCertVerifier> client_cert_verifier_; |
| 468 std::unique_ptr<TransportSecurityState> transport_security_state_; | 511 std::unique_ptr<TransportSecurityState> transport_security_state_; |
| 512 std::unique_ptr<MockCTVerifier> ct_verifier_; |
| 513 std::unique_ptr<MockCTPolicyEnforcer> ct_policy_enforcer_; |
| 469 std::unique_ptr<SSLServerContext> server_context_; | 514 std::unique_ptr<SSLServerContext> server_context_; |
| 470 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_; | 515 std::unique_ptr<crypto::RSAPrivateKey> server_private_key_; |
| 471 scoped_refptr<X509Certificate> server_cert_; | 516 scoped_refptr<X509Certificate> server_cert_; |
| 472 }; | 517 }; |
| 473 | 518 |
| 474 // This test only executes creation of client and server sockets. This is to | 519 // This test only executes creation of client and server sockets. This is to |
| 475 // test that creation of sockets doesn't crash and have minimal code to run | 520 // test that creation of sockets doesn't crash and have minimal code to run |
| 476 // under valgrind in order to help debugging memory problems. | 521 // under valgrind in order to help debugging memory problems. |
| 477 TEST_F(SSLServerSocketTest, Initialize) { | 522 TEST_F(SSLServerSocketTest, Initialize) { |
| 478 ASSERT_NO_FATAL_FAILURE(CreateContext()); | 523 ASSERT_NO_FATAL_FAILURE(CreateContext()); |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1066 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 1111 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 1067 | 1112 |
| 1068 client_ret = connect_callback.GetResult(client_ret); | 1113 client_ret = connect_callback.GetResult(client_ret); |
| 1069 server_ret = handshake_callback.GetResult(server_ret); | 1114 server_ret = handshake_callback.GetResult(server_ret); |
| 1070 | 1115 |
| 1071 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, client_ret); | 1116 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, client_ret); |
| 1072 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, server_ret); | 1117 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, server_ret); |
| 1073 } | 1118 } |
| 1074 | 1119 |
| 1075 } // namespace net | 1120 } // namespace net |
| OLD | NEW |