Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: net/socket/ssl_client_socket_unittest.cc

Issue 1052743003: Move RC4 behind a fallback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make test not a no-op Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 2181 matching lines...) Expand 10 before | Expand all | Expand 10 after
2192 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket( 2192 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket(
2193 transport.Pass(), test_server.host_port_pair(), SSLConfig())); 2193 transport.Pass(), test_server.host_port_pair(), SSLConfig()));
2194 2194
2195 rv = sock->Connect(callback.callback()); 2195 rv = sock->Connect(callback.callback());
2196 if (rv == ERR_IO_PENDING) 2196 if (rv == ERR_IO_PENDING)
2197 rv = callback.WaitForResult(); 2197 rv = callback.WaitForResult();
2198 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv); 2198 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, rv);
2199 } 2199 }
2200 2200
2201 TEST_F(SSLClientSocketTest, CipherSuiteDisables) { 2201 TEST_F(SSLClientSocketTest, CipherSuiteDisables) {
2202 // Rather than exhaustively disabling every RC4 ciphersuite defined at 2202 // Rather than exhaustively disabling every AES_128_CBC ciphersuite defined at
2203 // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml, 2203 // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml, only
2204 // only disabling those cipher suites that the test server actually 2204 // disabling those cipher suites that the test server actually implements.
2205 // implements. 2205 const uint16 kCiphersToDisable[] = {
2206 const uint16 kCiphersToDisable[] = {0x0005, // TLS_RSA_WITH_RC4_128_SHA 2206 0x002f, // TLS_RSA_WITH_AES_128_CBC_SHA
2207 0x0033, // TLS_DHE_RSA_WITH_AES_128_CBC_SHA
2207 }; 2208 };
2208 2209
2209 SpawnedTestServer::SSLOptions ssl_options; 2210 SpawnedTestServer::SSLOptions ssl_options;
2210 // Enable only RC4 on the test server. 2211 // Enable only RC4 on the test server.
2211 ssl_options.bulk_ciphers = SpawnedTestServer::SSLOptions::BULK_CIPHER_RC4; 2212 ssl_options.bulk_ciphers = SpawnedTestServer::SSLOptions::BULK_CIPHER_AES128;
2212 SpawnedTestServer test_server( 2213 SpawnedTestServer test_server(
2213 SpawnedTestServer::TYPE_HTTPS, ssl_options, base::FilePath()); 2214 SpawnedTestServer::TYPE_HTTPS, ssl_options, base::FilePath());
2214 ASSERT_TRUE(test_server.Start()); 2215 ASSERT_TRUE(test_server.Start());
2215 2216
2216 AddressList addr; 2217 AddressList addr;
2217 ASSERT_TRUE(test_server.GetAddressList(&addr)); 2218 ASSERT_TRUE(test_server.GetAddressList(&addr));
2218 2219
2219 TestCompletionCallback callback; 2220 TestCompletionCallback callback;
2220 CapturingNetLog log; 2221 CapturingNetLog log;
2221 scoped_ptr<StreamSocket> transport( 2222 scoped_ptr<StreamSocket> transport(
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after
2868 EXPECT_EQ(OK, callback.GetResult(transport->Connect(callback.callback()))); 2869 EXPECT_EQ(OK, callback.GetResult(transport->Connect(callback.callback())));
2869 sock = CreateSSLClientSocket( 2870 sock = CreateSSLClientSocket(
2870 transport.Pass(), test_server()->host_port_pair(), fallback_ssl_config); 2871 transport.Pass(), test_server()->host_port_pair(), fallback_ssl_config);
2871 EXPECT_EQ(OK, callback.GetResult(sock->Connect(callback.callback()))); 2872 EXPECT_EQ(OK, callback.GetResult(sock->Connect(callback.callback())));
2872 EXPECT_TRUE(sock->GetSSLInfo(&ssl_info)); 2873 EXPECT_TRUE(sock->GetSSLInfo(&ssl_info));
2873 EXPECT_EQ(SSLInfo::HANDSHAKE_RESUME, ssl_info.handshake_type); 2874 EXPECT_EQ(SSLInfo::HANDSHAKE_RESUME, ssl_info.handshake_type);
2874 EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1, 2875 EXPECT_EQ(SSL_CONNECTION_VERSION_TLS1,
2875 SSLConnectionStatusToVersion(ssl_info.connection_status)); 2876 SSLConnectionStatusToVersion(ssl_info.connection_status));
2876 } 2877 }
2877 2878
2879 // Test that RC4 is only enabled if enable_deprecated_cipher_suites is set.
2880 TEST_F(SSLClientSocketTest, DeprecatedRC4) {
2881 SpawnedTestServer::SSLOptions ssl_options;
2882 ssl_options.bulk_ciphers = SpawnedTestServer::SSLOptions::BULK_CIPHER_RC4;
2883 ASSERT_TRUE(StartTestServer(ssl_options));
2884
2885 // Normal handshakes with RC4 do not work.
2886 SSLConfig ssl_config;
2887 TestCompletionCallback callback;
2888 scoped_ptr<StreamSocket> transport(
2889 new TCPClientSocket(addr(), &log_, NetLog::Source()));
2890 ASSERT_EQ(OK, callback.GetResult(transport->Connect(callback.callback())));
2891 scoped_ptr<SSLClientSocket> sock(CreateSSLClientSocket(
2892 transport.Pass(), test_server()->host_port_pair(), ssl_config));
2893 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH,
2894 callback.GetResult(sock->Connect(callback.callback())));
2895
2896 // Enabling deprecated ciphers works fine.
2897 ssl_config.enable_deprecated_cipher_suites = true;
2898 transport.reset(new TCPClientSocket(addr(), &log_, NetLog::Source()));
2899 ASSERT_EQ(OK, callback.GetResult(transport->Connect(callback.callback())));
2900 sock = CreateSSLClientSocket(transport.Pass(),
2901 test_server()->host_port_pair(), ssl_config);
2902 ASSERT_EQ(OK, callback.GetResult(sock->Connect(callback.callback())));
2903 }
2904
2905 // Tests that enabling deprecated ciphers shards the session cache.
2906 TEST_F(SSLClientSocketTest, DeprecatedShardSessionCache) {
2907 SpawnedTestServer::SSLOptions ssl_options;
2908 ASSERT_TRUE(StartTestServer(ssl_options));
2909
2910 // Prepare a normal and deprecated SSL config.
2911 SSLConfig ssl_config;
2912 SSLConfig deprecated_ssl_config;
2913 deprecated_ssl_config.enable_deprecated_cipher_suites = true;
2914
2915 // Connect with deprecated ciphers enabled to warm the session cache cache.
2916 TestCompletionCallback callback;
2917 scoped_ptr<StreamSocket> transport(
2918 new TCPClientSocket(addr(), &log_, NetLog::Source()));
2919 EXPECT_EQ(OK, callback.GetResult(transport->Connect(callback.callback())));
2920 scoped_ptr<SSLClientSocket> sock(
2921 CreateSSLClientSocket(transport.Pass(), test_server()->host_port_pair(),
2922 deprecated_ssl_config));
2923 EXPECT_EQ(OK, callback.GetResult(sock->Connect(callback.callback())));
2924 SSLInfo ssl_info;
2925 EXPECT_TRUE(sock->GetSSLInfo(&ssl_info));
2926 EXPECT_EQ(SSLInfo::HANDSHAKE_FULL, ssl_info.handshake_type);
2927
2928 // Test that re-connecting with deprecated ciphers enabled still resumes.
2929 transport.reset(new TCPClientSocket(addr(), &log_, NetLog::Source()));
2930 EXPECT_EQ(OK, callback.GetResult(transport->Connect(callback.callback())));
2931 sock = CreateSSLClientSocket(
2932 transport.Pass(), test_server()->host_port_pair(), deprecated_ssl_config);
2933 EXPECT_EQ(OK, callback.GetResult(sock->Connect(callback.callback())));
2934 EXPECT_TRUE(sock->GetSSLInfo(&ssl_info));
2935 EXPECT_EQ(SSLInfo::HANDSHAKE_RESUME, ssl_info.handshake_type);
2936
2937 // However, a normal connection needs a full handshake.
Ryan Sleevi 2015/04/02 06:32:06 But does a normal connection prime a deprecated ca
davidben 2015/04/03 19:58:26 Done. (Though I can't imagine an implementation th
2938 transport.reset(new TCPClientSocket(addr(), &log_, NetLog::Source()));
2939 EXPECT_EQ(OK, callback.GetResult(transport->Connect(callback.callback())));
2940 sock = CreateSSLClientSocket(transport.Pass(),
2941 test_server()->host_port_pair(), ssl_config);
2942 EXPECT_EQ(OK, callback.GetResult(sock->Connect(callback.callback())));
2943 EXPECT_TRUE(sock->GetSSLInfo(&ssl_info));
2944 EXPECT_EQ(SSLInfo::HANDSHAKE_FULL, ssl_info.handshake_type);
2945 }
2946
2878 TEST_F(SSLClientSocketFalseStartTest, FalseStartEnabled) { 2947 TEST_F(SSLClientSocketFalseStartTest, FalseStartEnabled) {
2879 if (!SupportsAESGCM()) { 2948 if (!SupportsAESGCM()) {
2880 LOG(WARNING) << "Skipping test because AES-GCM is not supported."; 2949 LOG(WARNING) << "Skipping test because AES-GCM is not supported.";
2881 return; 2950 return;
2882 } 2951 }
2883 2952
2884 // False Start requires NPN/ALPN, perfect forward secrecy, and an AEAD. 2953 // False Start requires NPN/ALPN, perfect forward secrecy, and an AEAD.
2885 SpawnedTestServer::SSLOptions server_options; 2954 SpawnedTestServer::SSLOptions server_options;
2886 server_options.key_exchanges = 2955 server_options.key_exchanges =
2887 SpawnedTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA; 2956 SpawnedTestServer::SSLOptions::KEY_EXCHANGE_DHE_RSA;
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
3099 ssl_config.channel_id_enabled = true; 3168 ssl_config.channel_id_enabled = true;
3100 3169
3101 int rv; 3170 int rv;
3102 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); 3171 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv));
3103 3172
3104 EXPECT_EQ(ERR_UNEXPECTED, rv); 3173 EXPECT_EQ(ERR_UNEXPECTED, rv);
3105 EXPECT_FALSE(sock_->IsConnected()); 3174 EXPECT_FALSE(sock_->IsConnected());
3106 } 3175 }
3107 3176
3108 } // namespace net 3177 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698