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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #include <shlobj.h> | 9 #include <shlobj.h> |
10 #endif | 10 #endif |
(...skipping 7878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7889 public: | 7889 public: |
7890 explicit FallbackTestURLRequestContext(bool delay_initialization) | 7890 explicit FallbackTestURLRequestContext(bool delay_initialization) |
7891 : TestURLRequestContext(delay_initialization) {} | 7891 : TestURLRequestContext(delay_initialization) {} |
7892 | 7892 |
7893 void set_fallback_min_version(uint16 version) { | 7893 void set_fallback_min_version(uint16 version) { |
7894 TestSSLConfigService *ssl_config_service = | 7894 TestSSLConfigService *ssl_config_service = |
7895 new TestSSLConfigService(true /* check for EV */, | 7895 new TestSSLConfigService(true /* check for EV */, |
7896 false /* online revocation checking */, | 7896 false /* online revocation checking */, |
7897 false /* require rev. checking for local | 7897 false /* require rev. checking for local |
7898 anchors */); | 7898 anchors */); |
7899 ssl_config_service->set_min_version(SSL_PROTOCOL_VERSION_SSL3); | |
7900 ssl_config_service->set_fallback_min_version(version); | 7899 ssl_config_service->set_fallback_min_version(version); |
7901 set_ssl_config_service(ssl_config_service); | 7900 set_ssl_config_service(ssl_config_service); |
7902 } | 7901 } |
7903 }; | 7902 }; |
7904 | 7903 |
7905 class HTTPSFallbackTest : public testing::Test { | 7904 class HTTPSFallbackTest : public testing::Test { |
7906 public: | 7905 public: |
7907 HTTPSFallbackTest() : context_(true) {} | 7906 HTTPSFallbackTest() : context_(true) {} |
7908 ~HTTPSFallbackTest() override {} | 7907 ~HTTPSFallbackTest() override {} |
7909 | 7908 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8017 // Have the server process TLS_FALLBACK_SCSV so that version fallback | 8016 // Have the server process TLS_FALLBACK_SCSV so that version fallback |
8018 // connections are rejected. | 8017 // connections are rejected. |
8019 ssl_options.fallback_scsv_enabled = true; | 8018 ssl_options.fallback_scsv_enabled = true; |
8020 | 8019 |
8021 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | 8020 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); |
8022 | 8021 |
8023 // The original error should be replayed on rejected fallback. | 8022 // The original error should be replayed on rejected fallback. |
8024 ExpectFailure(ERR_CONNECTION_CLOSED); | 8023 ExpectFailure(ERR_CONNECTION_CLOSED); |
8025 } | 8024 } |
8026 | 8025 |
8027 // Tests that the SSLv3 fallback doesn't happen by default. | 8026 // Tests that the SSLv3 fallback doesn't happen. |
8028 TEST_F(HTTPSFallbackTest, SSLv3Fallback) { | 8027 TEST_F(HTTPSFallbackTest, SSLv3Fallback) { |
8029 SpawnedTestServer::SSLOptions ssl_options( | 8028 SpawnedTestServer::SSLOptions ssl_options( |
8030 SpawnedTestServer::SSLOptions::CERT_OK); | 8029 SpawnedTestServer::SSLOptions::CERT_OK); |
8031 ssl_options.tls_intolerant = | 8030 ssl_options.tls_intolerant = |
8032 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL; | 8031 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL; |
8033 | 8032 |
8034 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | 8033 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); |
8035 ExpectFailure(ERR_SSL_VERSION_OR_CIPHER_MISMATCH); | 8034 ExpectFailure(ERR_SSL_VERSION_OR_CIPHER_MISMATCH); |
8036 } | 8035 } |
8037 | 8036 |
8038 // Tests that the SSLv3 fallback works when explicitly enabled. | 8037 // Tests that the TLSv1 fallback triggers on closed connections. |
8039 TEST_F(HTTPSFallbackTest, SSLv3FallbackEnabled) { | |
8040 SpawnedTestServer::SSLOptions ssl_options( | |
8041 SpawnedTestServer::SSLOptions::CERT_OK); | |
8042 ssl_options.tls_intolerant = | |
8043 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL; | |
8044 set_fallback_min_version(SSL_PROTOCOL_VERSION_SSL3); | |
8045 | |
8046 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | |
8047 ExpectConnection(SSL_CONNECTION_VERSION_SSL3); | |
8048 } | |
8049 | |
8050 // Tests that the SSLv3 fallback triggers on closed connections when explicitly | |
8051 // enabled. | |
8052 TEST_F(HTTPSFallbackTest, SSLv3FallbackClosed) { | 8038 TEST_F(HTTPSFallbackTest, SSLv3FallbackClosed) { |
8053 SpawnedTestServer::SSLOptions ssl_options( | 8039 SpawnedTestServer::SSLOptions ssl_options( |
8054 SpawnedTestServer::SSLOptions::CERT_OK); | 8040 SpawnedTestServer::SSLOptions::CERT_OK); |
8055 ssl_options.tls_intolerant = | 8041 ssl_options.tls_intolerant = |
8056 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL; | 8042 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_TLS1_1; |
8057 ssl_options.tls_intolerance_type = | 8043 ssl_options.tls_intolerance_type = |
8058 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_CLOSE; | 8044 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_CLOSE; |
8059 set_fallback_min_version(SSL_PROTOCOL_VERSION_SSL3); | |
8060 | 8045 |
8061 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | 8046 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); |
8062 ExpectConnection(SSL_CONNECTION_VERSION_SSL3); | 8047 ExpectConnection(SSL_CONNECTION_VERSION_TLS1); |
8063 } | 8048 } |
8064 | 8049 |
8065 // Test that SSLv3 fallback probe connections don't cause sessions to be cached. | 8050 // Test that fallback probe connections don't cause sessions to be cached. |
8066 TEST_F(HTTPSRequestTest, SSLv3FallbackNoCache) { | 8051 TEST_F(HTTPSRequestTest, FallbackProbeNoCache) { |
8067 SpawnedTestServer::SSLOptions ssl_options( | 8052 SpawnedTestServer::SSLOptions ssl_options( |
8068 SpawnedTestServer::SSLOptions::CERT_OK); | 8053 SpawnedTestServer::SSLOptions::CERT_OK); |
8069 ssl_options.tls_intolerant = | 8054 ssl_options.tls_intolerant = |
8070 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL; | 8055 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_TLS1_1; |
8071 ssl_options.tls_intolerance_type = | 8056 ssl_options.tls_intolerance_type = |
8072 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_CLOSE; | 8057 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_CLOSE; |
8073 ssl_options.record_resume = true; | 8058 ssl_options.record_resume = true; |
8074 | 8059 |
8075 SpawnedTestServer test_server( | 8060 SpawnedTestServer test_server( |
8076 SpawnedTestServer::TYPE_HTTPS, | 8061 SpawnedTestServer::TYPE_HTTPS, |
8077 ssl_options, | 8062 ssl_options, |
8078 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); | 8063 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); |
8079 ASSERT_TRUE(test_server.Start()); | 8064 ASSERT_TRUE(test_server.Start()); |
8080 | 8065 |
8081 SSLClientSocket::ClearSessionCache(); | 8066 SSLClientSocket::ClearSessionCache(); |
8082 | 8067 |
8083 // Make a connection that does a probe fallback to SSLv3 but fails because | 8068 // Make a connection that does a probe fallback to TLSv1 but fails because |
8084 // SSLv3 fallback is disabled. We don't wish a session for this connection to | 8069 // TLSv1 fallback is disabled. We don't wish a session for this connection to |
8085 // be inserted locally. | 8070 // be inserted locally. |
8086 { | 8071 { |
8087 TestDelegate delegate; | 8072 TestDelegate delegate; |
8088 FallbackTestURLRequestContext context(true); | 8073 FallbackTestURLRequestContext context(true); |
8089 | 8074 |
8090 context.set_fallback_min_version(SSL_PROTOCOL_VERSION_TLS1); | 8075 context.set_fallback_min_version(SSL_PROTOCOL_VERSION_TLS1_2); |
8091 context.Init(); | 8076 context.Init(); |
8092 scoped_ptr<URLRequest> request(context.CreateRequest( | 8077 scoped_ptr<URLRequest> request(context.CreateRequest( |
8093 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &delegate)); | 8078 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &delegate)); |
8094 request->Start(); | 8079 request->Start(); |
8095 | 8080 |
8096 base::RunLoop().Run(); | 8081 base::RunLoop().Run(); |
8097 | 8082 |
8098 EXPECT_EQ(1, delegate.response_started_count()); | 8083 EXPECT_EQ(1, delegate.response_started_count()); |
8099 EXPECT_FALSE(request->status().is_success()); | 8084 EXPECT_FALSE(request->status().is_success()); |
8100 EXPECT_EQ(URLRequestStatus::FAILED, request->status().status()); | 8085 EXPECT_EQ(URLRequestStatus::FAILED, request->status().status()); |
8101 EXPECT_EQ(ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION, | 8086 EXPECT_EQ(ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION, |
8102 request->status().error()); | 8087 request->status().error()); |
8103 } | 8088 } |
8104 | 8089 |
8105 // Now allow SSLv3 connections and request the session cache log. | 8090 // Now allow TLSv1 fallback connections and request the session cache log. |
8106 { | 8091 { |
8107 TestDelegate delegate; | 8092 TestDelegate delegate; |
8108 FallbackTestURLRequestContext context(true); | 8093 FallbackTestURLRequestContext context(true); |
8109 context.set_fallback_min_version(SSL_PROTOCOL_VERSION_SSL3); | 8094 context.set_fallback_min_version(SSL_PROTOCOL_VERSION_TLS1); |
8110 | 8095 |
8111 context.Init(); | 8096 context.Init(); |
8112 scoped_ptr<URLRequest> request(context.CreateRequest( | 8097 scoped_ptr<URLRequest> request(context.CreateRequest( |
8113 test_server.GetURL("ssl-session-cache"), DEFAULT_PRIORITY, &delegate)); | 8098 test_server.GetURL("ssl-session-cache"), DEFAULT_PRIORITY, &delegate)); |
8114 request->Start(); | 8099 request->Start(); |
8115 | 8100 |
8116 base::RunLoop().Run(); | 8101 base::RunLoop().Run(); |
8117 | 8102 |
8118 EXPECT_EQ(1, delegate.response_started_count()); | 8103 EXPECT_EQ(1, delegate.response_started_count()); |
8119 EXPECT_NE(0, delegate.bytes_received()); | 8104 EXPECT_NE(0, delegate.bytes_received()); |
8120 EXPECT_EQ(SSL_CONNECTION_VERSION_SSL3, SSLConnectionStatusToVersion( | 8105 EXPECT_EQ( |
8121 request->ssl_info().connection_status)); | 8106 SSL_CONNECTION_VERSION_TLS1, |
| 8107 SSLConnectionStatusToVersion(request->ssl_info().connection_status)); |
8122 EXPECT_TRUE(request->ssl_info().connection_status & | 8108 EXPECT_TRUE(request->ssl_info().connection_status & |
8123 SSL_CONNECTION_VERSION_FALLBACK); | 8109 SSL_CONNECTION_VERSION_FALLBACK); |
8124 | 8110 |
8125 std::vector<std::string> lines; | 8111 std::vector<std::string> lines; |
8126 // If no sessions were cached then the server should have seen two sessions | 8112 // If no sessions were cached then the server should have seen two sessions |
8127 // inserted with no lookups. | 8113 // inserted with no lookups. |
8128 AssertTwoDistinctSessionsInserted(delegate.data_received()); | 8114 AssertTwoDistinctSessionsInserted(delegate.data_received()); |
8129 } | 8115 } |
8130 } | 8116 } |
8131 | 8117 |
8132 // This test is disabled on Android because the remote test server doesn't cause | |
8133 // a TCP reset. | |
8134 #if !defined(OS_ANDROID) | |
8135 // Tests that a reset connection does not fallback down to SSL3. | |
8136 TEST_F(HTTPSFallbackTest, SSLv3NoFallbackReset) { | |
8137 SpawnedTestServer::SSLOptions ssl_options( | |
8138 SpawnedTestServer::SSLOptions::CERT_OK); | |
8139 ssl_options.tls_intolerant = | |
8140 SpawnedTestServer::SSLOptions::TLS_INTOLERANT_ALL; | |
8141 ssl_options.tls_intolerance_type = | |
8142 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET; | |
8143 | |
8144 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | |
8145 ExpectFailure(ERR_CONNECTION_RESET); | |
8146 } | |
8147 #endif // !OS_ANDROID | |
8148 | |
8149 class HTTPSSessionTest : public testing::Test { | 8118 class HTTPSSessionTest : public testing::Test { |
8150 public: | 8119 public: |
8151 HTTPSSessionTest() : default_context_(true) { | 8120 HTTPSSessionTest() : default_context_(true) { |
8152 cert_verifier_.set_default_result(OK); | 8121 cert_verifier_.set_default_result(OK); |
8153 | 8122 |
8154 default_context_.set_network_delegate(&default_network_delegate_); | 8123 default_context_.set_network_delegate(&default_network_delegate_); |
8155 default_context_.set_cert_verifier(&cert_verifier_); | 8124 default_context_.set_cert_verifier(&cert_verifier_); |
8156 default_context_.Init(); | 8125 default_context_.Init(); |
8157 } | 8126 } |
8158 ~HTTPSSessionTest() override {} | 8127 ~HTTPSSessionTest() override {} |
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9114 | 9083 |
9115 EXPECT_FALSE(r->is_pending()); | 9084 EXPECT_FALSE(r->is_pending()); |
9116 EXPECT_EQ(1, d->response_started_count()); | 9085 EXPECT_EQ(1, d->response_started_count()); |
9117 EXPECT_FALSE(d->received_data_before_response()); | 9086 EXPECT_FALSE(d->received_data_before_response()); |
9118 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 9087 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
9119 } | 9088 } |
9120 } | 9089 } |
9121 #endif // !defined(DISABLE_FTP_SUPPORT) | 9090 #endif // !defined(DISABLE_FTP_SUPPORT) |
9122 | 9091 |
9123 } // namespace net | 9092 } // namespace net |
OLD | NEW |