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 <openssl/bio.h> | 10 #include <openssl/bio.h> |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 212 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); |
213 EXPECT_FALSE(sock_->IsConnected()); | 213 EXPECT_FALSE(sock_->IsConnected()); |
214 } | 214 } |
215 | 215 |
216 // Connect to a server requesting client authentication, and send it | 216 // Connect to a server requesting client authentication, and send it |
217 // an empty certificate. It should refuse the connection. | 217 // an empty certificate. It should refuse the connection. |
218 TEST_F(SSLClientSocketOpenSSLClientAuthTest, SendEmptyCert) { | 218 TEST_F(SSLClientSocketOpenSSLClientAuthTest, SendEmptyCert) { |
219 TestServer::SSLOptions ssl_options; | 219 TestServer::SSLOptions ssl_options; |
220 ssl_options.request_client_certificate = true; | 220 ssl_options.request_client_certificate = true; |
221 ssl_options.client_authorities.push_back( | 221 ssl_options.client_authorities.push_back( |
222 GetTestClientCertsDirectory().AppendASCII("client_1_root.pem")); | 222 GetTestClientCertsDirectory().AppendASCII("client_1_ca.pem")); |
223 | 223 |
224 ASSERT_TRUE(ConnectToTestServer(ssl_options)); | 224 ASSERT_TRUE(ConnectToTestServer(ssl_options)); |
225 | 225 |
226 base::FilePath certs_dir = GetTestCertsDirectory(); | 226 base::FilePath certs_dir = GetTestCertsDirectory(); |
227 SSLConfig ssl_config = kDefaultSSLConfig; | 227 SSLConfig ssl_config = kDefaultSSLConfig; |
228 ssl_config.send_client_cert = true; | 228 ssl_config.send_client_cert = true; |
229 ssl_config.client_cert = NULL; | 229 ssl_config.client_cert = NULL; |
230 | 230 |
231 int rv; | 231 int rv; |
232 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); | 232 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); |
233 | 233 |
234 EXPECT_EQ(OK, rv); | 234 EXPECT_EQ(OK, rv); |
235 EXPECT_TRUE(sock_->IsConnected()); | 235 EXPECT_TRUE(sock_->IsConnected()); |
236 } | 236 } |
237 | 237 |
238 // Connect to a server requesting client authentication. Send it a | 238 // Connect to a server requesting client authentication. Send it a |
239 // matching certificate. It should allow the connection. | 239 // matching certificate. It should allow the connection. |
240 TEST_F(SSLClientSocketOpenSSLClientAuthTest, SendGoodCert) { | 240 TEST_F(SSLClientSocketOpenSSLClientAuthTest, SendGoodCert) { |
241 TestServer::SSLOptions ssl_options; | 241 TestServer::SSLOptions ssl_options; |
242 ssl_options.request_client_certificate = true; | 242 ssl_options.request_client_certificate = true; |
243 ssl_options.client_authorities.push_back( | 243 ssl_options.client_authorities.push_back( |
244 GetTestClientCertsDirectory().AppendASCII("client_1_root.pem")); | 244 GetTestClientCertsDirectory().AppendASCII("client_1_ca.pem")); |
245 | 245 |
246 ASSERT_TRUE(ConnectToTestServer(ssl_options)); | 246 ASSERT_TRUE(ConnectToTestServer(ssl_options)); |
247 | 247 |
248 base::FilePath certs_dir = GetTestCertsDirectory(); | 248 base::FilePath certs_dir = GetTestCertsDirectory(); |
249 SSLConfig ssl_config = kDefaultSSLConfig; | 249 SSLConfig ssl_config = kDefaultSSLConfig; |
250 ssl_config.send_client_cert = true; | 250 ssl_config.send_client_cert = true; |
251 ssl_config.client_cert = ImportCertFromFile(certs_dir, "client_1.pem"); | 251 ssl_config.client_cert = ImportCertFromFile(certs_dir, "client_1.pem"); |
252 | 252 |
253 // This is required to ensure that signing works with the client | 253 // This is required to ensure that signing works with the client |
254 // certificate's private key. | 254 // certificate's private key. |
255 OpenSSLClientKeyStore::ScopedEVP_PKEY client_private_key; | 255 OpenSSLClientKeyStore::ScopedEVP_PKEY client_private_key; |
256 ASSERT_TRUE(LoadPrivateKeyOpenSSL(certs_dir.AppendASCII("client_1.key"), | 256 ASSERT_TRUE(LoadPrivateKeyOpenSSL(certs_dir.AppendASCII("client_1.key"), |
257 &client_private_key)); | 257 &client_private_key)); |
258 EXPECT_TRUE(RecordPrivateKey(ssl_config, client_private_key.get())); | 258 EXPECT_TRUE(RecordPrivateKey(ssl_config, client_private_key.get())); |
259 | 259 |
260 int rv; | 260 int rv; |
261 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); | 261 ASSERT_TRUE(CreateAndConnectSSLClientSocket(ssl_config, &rv)); |
262 | 262 |
263 EXPECT_EQ(OK, rv); | 263 EXPECT_EQ(OK, rv); |
264 EXPECT_TRUE(sock_->IsConnected()); | 264 EXPECT_TRUE(sock_->IsConnected()); |
265 | 265 |
266 EXPECT_TRUE(CheckSSLClientSocketSentCert()); | 266 EXPECT_TRUE(CheckSSLClientSocketSentCert()); |
267 | 267 |
268 sock_->Disconnect(); | 268 sock_->Disconnect(); |
269 EXPECT_FALSE(sock_->IsConnected()); | 269 EXPECT_FALSE(sock_->IsConnected()); |
270 } | 270 } |
271 | 271 |
272 } // namespace | 272 } // namespace |
273 } // namespace net | 273 } // namespace net |
OLD | NEW |