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

Side by Side Diff: remoting/protocol/ssl_hmac_channel_authenticator.cc

Issue 2300533002: Stop caching DER-encoded certificates unnecessarily (Closed)
Patch Set: More feedback Created 4 years, 3 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 "remoting/protocol/ssl_hmac_channel_authenticator.h" 5 #include "remoting/protocol/ssl_hmac_channel_authenticator.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 if (is_ssl_server()) { 251 if (is_ssl_server()) {
252 #if defined(OS_NACL) 252 #if defined(OS_NACL)
253 // Client plugin doesn't use server SSL sockets, and so SSLServerSocket 253 // Client plugin doesn't use server SSL sockets, and so SSLServerSocket
254 // implementation is not compiled for NaCl as part of net_nacl. 254 // implementation is not compiled for NaCl as part of net_nacl.
255 NOTREACHED(); 255 NOTREACHED();
256 result = net::ERR_FAILED; 256 result = net::ERR_FAILED;
257 #else 257 #else
258 scoped_refptr<net::X509Certificate> cert = 258 scoped_refptr<net::X509Certificate> cert =
259 net::X509Certificate::CreateFromBytes(local_cert_.data(), 259 net::X509Certificate::CreateFromBytes(local_cert_.data(),
260 local_cert_.length()); 260 local_cert_.length());
261 if (!cert.get()) { 261 if (!cert) {
262 LOG(ERROR) << "Failed to parse X509Certificate"; 262 LOG(ERROR) << "Failed to parse X509Certificate";
263 NotifyError(net::ERR_FAILED); 263 NotifyError(net::ERR_FAILED);
264 return; 264 return;
265 } 265 }
266 266
267 net::SSLServerConfig ssl_config; 267 net::SSLServerConfig ssl_config;
268 ssl_config.require_ecdhe = true; 268 ssl_config.require_ecdhe = true;
269 269
270 server_context_ = net::CreateSSLServerContext( 270 server_context_ = net::CreateSSLServerContext(
271 cert.get(), *local_key_pair_->private_key(), ssl_config); 271 cert.get(), *local_key_pair_->private_key(), ssl_config);
272 272
273 std::unique_ptr<net::SSLServerSocket> server_socket = 273 std::unique_ptr<net::SSLServerSocket> server_socket =
274 server_context_->CreateSSLServerSocket( 274 server_context_->CreateSSLServerSocket(
275 base::MakeUnique<NetStreamSocketAdapter>(std::move(socket))); 275 base::MakeUnique<NetStreamSocketAdapter>(std::move(socket)));
276 net::SSLServerSocket* raw_server_socket = server_socket.get(); 276 net::SSLServerSocket* raw_server_socket = server_socket.get();
277 socket_ = std::move(server_socket); 277 socket_ = std::move(server_socket);
278 result = raw_server_socket->Handshake( 278 result = raw_server_socket->Handshake(
279 base::Bind(&SslHmacChannelAuthenticator::OnConnected, 279 base::Bind(&SslHmacChannelAuthenticator::OnConnected,
280 base::Unretained(this))); 280 base::Unretained(this)));
281 #endif 281 #endif
282 } else { 282 } else {
283 transport_security_state_.reset(new net::TransportSecurityState); 283 transport_security_state_.reset(new net::TransportSecurityState);
284 cert_verifier_.reset(new FailingCertVerifier); 284 cert_verifier_.reset(new FailingCertVerifier);
285 ct_verifier_.reset(new IgnoresCTVerifier); 285 ct_verifier_.reset(new IgnoresCTVerifier);
286 ct_policy_enforcer_.reset(new IgnoresCTPolicyEnforcer); 286 ct_policy_enforcer_.reset(new IgnoresCTPolicyEnforcer);
287 287
288 net::SSLConfig::CertAndStatus cert_and_status;
289 cert_and_status.cert_status = net::CERT_STATUS_AUTHORITY_INVALID;
290 cert_and_status.der_cert = remote_cert_;
291
292 net::SSLConfig ssl_config; 288 net::SSLConfig ssl_config;
293 // Certificate verification and revocation checking are not needed 289 // Certificate verification and revocation checking are not needed
294 // because we use self-signed certs. Disable it so that the SSL 290 // because we use self-signed certs. Disable it so that the SSL
295 // layer doesn't try to initialize OCSP (OCSP works only on the IO 291 // layer doesn't try to initialize OCSP (OCSP works only on the IO
296 // thread). 292 // thread).
297 ssl_config.cert_io_enabled = false; 293 ssl_config.cert_io_enabled = false;
298 ssl_config.rev_checking_enabled = false; 294 ssl_config.rev_checking_enabled = false;
299 ssl_config.allowed_bad_certs.push_back(cert_and_status);
300 ssl_config.require_ecdhe = true; 295 ssl_config.require_ecdhe = true;
301 296
297 scoped_refptr<net::X509Certificate> cert =
298 net::X509Certificate::CreateFromBytes(remote_cert_.data(),
299 remote_cert_.length());
300 if (!cert) {
301 LOG(ERROR) << "Failed to parse X509Certificate";
302 NotifyError(net::ERR_FAILED);
303 return;
304 }
305
306 net::SSLConfig::CertAndStatus cert_and_status;
307 cert_and_status.cert = std::move(cert);
308 cert_and_status.cert_status = net::CERT_STATUS_AUTHORITY_INVALID;
309 ssl_config.allowed_bad_certs.emplace_back(std::move(cert_and_status));
davidben 2016/09/01 19:44:40 Ditto
310
302 net::HostPortPair host_and_port(kSslFakeHostName, 0); 311 net::HostPortPair host_and_port(kSslFakeHostName, 0);
303 net::SSLClientSocketContext context; 312 net::SSLClientSocketContext context;
304 context.transport_security_state = transport_security_state_.get(); 313 context.transport_security_state = transport_security_state_.get();
305 context.cert_verifier = cert_verifier_.get(); 314 context.cert_verifier = cert_verifier_.get();
306 context.cert_transparency_verifier = ct_verifier_.get(); 315 context.cert_transparency_verifier = ct_verifier_.get();
307 context.ct_policy_enforcer = ct_policy_enforcer_.get(); 316 context.ct_policy_enforcer = ct_policy_enforcer_.get();
308 std::unique_ptr<net::ClientSocketHandle> socket_handle( 317 std::unique_ptr<net::ClientSocketHandle> socket_handle(
309 new net::ClientSocketHandle); 318 new net::ClientSocketHandle);
310 socket_handle->SetSocket( 319 socket_handle->SetSocket(
311 base::MakeUnique<NetStreamSocketAdapter>(std::move(socket))); 320 base::MakeUnique<NetStreamSocketAdapter>(std::move(socket)));
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 std::move(socket_), std::move(server_context_))); 489 std::move(socket_), std::move(server_context_)));
481 } 490 }
482 } 491 }
483 492
484 void SslHmacChannelAuthenticator::NotifyError(int error) { 493 void SslHmacChannelAuthenticator::NotifyError(int error) {
485 base::ResetAndReturn(&done_callback_).Run(error, nullptr); 494 base::ResetAndReturn(&done_callback_).Run(error, nullptr);
486 } 495 }
487 496
488 } // namespace protocol 497 } // namespace protocol
489 } // namespace remoting 498 } // namespace remoting
OLDNEW
« net/socket/ssl_server_socket_unittest.cc ('K') | « net/ssl/ssl_config.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698