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

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

Issue 1739503003: Ignore host certificate in remoting::V2Authenticator on the client side. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 24 matching lines...) Expand all
35 #include "net/socket/ssl_client_socket_openssl.h" 35 #include "net/socket/ssl_client_socket_openssl.h"
36 #else 36 #else
37 #include "net/socket/client_socket_factory.h" 37 #include "net/socket/client_socket_factory.h"
38 #endif 38 #endif
39 39
40 namespace remoting { 40 namespace remoting {
41 namespace protocol { 41 namespace protocol {
42 42
43 namespace { 43 namespace {
44 44
45 // A CertVerifier which rejects every certificate. 45 // A CertVerifier which accets all certificate.
46 class FailingCertVerifier : public net::CertVerifier { 46 class AcceptAllCertVerifier : public net::CertVerifier {
47 public: 47 public:
48 FailingCertVerifier() {} 48 AcceptAllCertVerifier() {}
49 ~FailingCertVerifier() override {} 49 ~AcceptAllCertVerifier() override {}
50 50
51 int Verify(net::X509Certificate* cert, 51 int Verify(net::X509Certificate* cert,
52 const std::string& hostname, 52 const std::string& hostname,
53 const std::string& ocsp_response, 53 const std::string& ocsp_response,
54 int flags, 54 int flags,
55 net::CRLSet* crl_set, 55 net::CRLSet* crl_set,
56 net::CertVerifyResult* verify_result, 56 net::CertVerifyResult* verify_result,
57 const net::CompletionCallback& callback, 57 const net::CompletionCallback& callback,
58 scoped_ptr<Request>* out_req, 58 scoped_ptr<Request>* out_req,
59 const net::BoundNetLog& net_log) override { 59 const net::BoundNetLog& net_log) override {
60 verify_result->verified_cert = cert; 60 verify_result->verified_cert = cert;
61 verify_result->cert_status = net::CERT_STATUS_INVALID; 61 verify_result->cert_status = 0;
62 return net::ERR_CERT_INVALID; 62 return net::OK;
63 } 63 }
64 }; 64 };
65 65
66 // Implements net::StreamSocket interface on top of P2PStreamSocket to be passed 66 // Implements net::StreamSocket interface on top of P2PStreamSocket to be passed
67 // to net::SSLClientSocket and net::SSLServerSocket. 67 // to net::SSLClientSocket and net::SSLServerSocket.
68 class NetStreamSocketAdapter : public net::StreamSocket { 68 class NetStreamSocketAdapter : public net::StreamSocket {
69 public: 69 public:
70 NetStreamSocketAdapter(scoped_ptr<P2PStreamSocket> socket) 70 NetStreamSocketAdapter(scoped_ptr<P2PStreamSocket> socket)
71 : socket_(std::move(socket)) {} 71 : socket_(std::move(socket)) {}
72 ~NetStreamSocketAdapter() override {} 72 ~NetStreamSocketAdapter() override {}
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 166
167 private: 167 private:
168 scoped_ptr<net::StreamSocket> socket_; 168 scoped_ptr<net::StreamSocket> socket_;
169 }; 169 };
170 170
171 } // namespace 171 } // namespace
172 172
173 // static 173 // static
174 scoped_ptr<SslHmacChannelAuthenticator> 174 scoped_ptr<SslHmacChannelAuthenticator>
175 SslHmacChannelAuthenticator::CreateForClient( 175 SslHmacChannelAuthenticator::CreateForClient(
176 const std::string& remote_cert,
177 const std::string& auth_key) { 176 const std::string& auth_key) {
178 scoped_ptr<SslHmacChannelAuthenticator> result( 177 scoped_ptr<SslHmacChannelAuthenticator> result(
179 new SslHmacChannelAuthenticator(auth_key)); 178 new SslHmacChannelAuthenticator(auth_key));
180 result->remote_cert_ = remote_cert;
181 return result; 179 return result;
182 } 180 }
183 181
184 scoped_ptr<SslHmacChannelAuthenticator> 182 scoped_ptr<SslHmacChannelAuthenticator>
185 SslHmacChannelAuthenticator::CreateForHost( 183 SslHmacChannelAuthenticator::CreateForHost(
186 const std::string& local_cert, 184 const std::string& local_cert,
187 scoped_refptr<RsaKeyPair> key_pair, 185 scoped_refptr<RsaKeyPair> key_pair,
188 const std::string& auth_key) { 186 const std::string& auth_key) {
189 scoped_ptr<SslHmacChannelAuthenticator> result( 187 scoped_ptr<SslHmacChannelAuthenticator> result(
190 new SslHmacChannelAuthenticator(auth_key)); 188 new SslHmacChannelAuthenticator(auth_key));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 scoped_ptr<net::SSLServerSocket> server_socket = net::CreateSSLServerSocket( 229 scoped_ptr<net::SSLServerSocket> server_socket = net::CreateSSLServerSocket(
232 make_scoped_ptr(new NetStreamSocketAdapter(std::move(socket))), 230 make_scoped_ptr(new NetStreamSocketAdapter(std::move(socket))),
233 cert.get(), *local_key_pair_->private_key(), ssl_config); 231 cert.get(), *local_key_pair_->private_key(), ssl_config);
234 net::SSLServerSocket* raw_server_socket = server_socket.get(); 232 net::SSLServerSocket* raw_server_socket = server_socket.get();
235 socket_ = std::move(server_socket); 233 socket_ = std::move(server_socket);
236 result = raw_server_socket->Handshake( 234 result = raw_server_socket->Handshake(
237 base::Bind(&SslHmacChannelAuthenticator::OnConnected, 235 base::Bind(&SslHmacChannelAuthenticator::OnConnected,
238 base::Unretained(this))); 236 base::Unretained(this)));
239 #endif 237 #endif
240 } else { 238 } else {
241 transport_security_state_.reset(new net::TransportSecurityState); 239 transport_security_state_.reset(new net::TransportSecurityState());
242 cert_verifier_.reset(new FailingCertVerifier); 240 cert_verifier_.reset(new AcceptAllCertVerifier());
243
244 net::SSLConfig::CertAndStatus cert_and_status;
245 cert_and_status.cert_status = net::CERT_STATUS_AUTHORITY_INVALID;
246 cert_and_status.der_cert = remote_cert_;
247 241
248 net::SSLConfig ssl_config; 242 net::SSLConfig ssl_config;
249 // Certificate verification and revocation checking are not needed 243 // Certificate verification and revocation checking are not needed
250 // because we use self-signed certs. Disable it so that the SSL 244 // because we use self-signed certs. Disable it so that the SSL
251 // layer doesn't try to initialize OCSP (OCSP works only on the IO 245 // layer doesn't try to initialize OCSP (OCSP works only on the IO
252 // thread). 246 // thread).
253 ssl_config.cert_io_enabled = false; 247 ssl_config.cert_io_enabled = false;
254 ssl_config.rev_checking_enabled = false; 248 ssl_config.rev_checking_enabled = false;
255 ssl_config.allowed_bad_certs.push_back(cert_and_status);
256 ssl_config.require_ecdhe = true; 249 ssl_config.require_ecdhe = true;
257 250
258 net::HostPortPair host_and_port(kSslFakeHostName, 0); 251 net::HostPortPair host_and_port(kSslFakeHostName, 0);
259 net::SSLClientSocketContext context; 252 net::SSLClientSocketContext context;
260 context.transport_security_state = transport_security_state_.get(); 253 context.transport_security_state = transport_security_state_.get();
261 context.cert_verifier = cert_verifier_.get(); 254 context.cert_verifier = cert_verifier_.get();
262 scoped_ptr<net::ClientSocketHandle> socket_handle( 255 scoped_ptr<net::ClientSocketHandle> socket_handle(
263 new net::ClientSocketHandle); 256 new net::ClientSocketHandle);
264 socket_handle->SetSocket( 257 socket_handle->SetSocket(
265 make_scoped_ptr(new NetStreamSocketAdapter(std::move(socket)))); 258 make_scoped_ptr(new NetStreamSocketAdapter(std::move(socket))));
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 make_scoped_ptr(new P2PStreamSocketAdapter(std::move(socket_)))); 427 make_scoped_ptr(new P2PStreamSocketAdapter(std::move(socket_))));
435 } 428 }
436 } 429 }
437 430
438 void SslHmacChannelAuthenticator::NotifyError(int error) { 431 void SslHmacChannelAuthenticator::NotifyError(int error) {
439 base::ResetAndReturn(&done_callback_).Run(error, nullptr); 432 base::ResetAndReturn(&done_callback_).Run(error, nullptr);
440 } 433 }
441 434
442 } // namespace protocol 435 } // namespace protocol
443 } // namespace remoting 436 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/ssl_hmac_channel_authenticator.h ('k') | remoting/protocol/ssl_hmac_channel_authenticator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698