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 "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 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/bind_helpers.h" | 12 #include "base/bind_helpers.h" |
13 #include "base/callback_helpers.h" | 13 #include "base/callback_helpers.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
17 #include "crypto/secure_util.h" | 17 #include "crypto/secure_util.h" |
18 #include "net/base/host_port_pair.h" | 18 #include "net/base/host_port_pair.h" |
19 #include "net/base/io_buffer.h" | 19 #include "net/base/io_buffer.h" |
20 #include "net/base/ip_address.h" | 20 #include "net/base/ip_address.h" |
21 #include "net/base/net_errors.h" | 21 #include "net/base/net_errors.h" |
22 #include "net/cert/cert_status_flags.h" | 22 #include "net/cert/cert_status_flags.h" |
23 #include "net/cert/cert_verifier.h" | 23 #include "net/cert/cert_verifier.h" |
24 #include "net/cert/cert_verify_result.h" | 24 #include "net/cert/cert_verify_result.h" |
25 #include "net/cert/ct_policy_enforcer.h" | 25 #include "net/cert/ct_policy_enforcer.h" |
26 #include "net/cert/ct_policy_status.h" | 26 #include "net/cert/ct_policy_status.h" |
27 #include "net/cert/ct_verifier.h" | 27 #include "net/cert/do_nothing_ct_verifier.h" |
28 #include "net/cert/signed_certificate_timestamp_and_status.h" | 28 #include "net/cert/signed_certificate_timestamp_and_status.h" |
29 #include "net/cert/x509_certificate.h" | 29 #include "net/cert/x509_certificate.h" |
30 #include "net/http/transport_security_state.h" | 30 #include "net/http/transport_security_state.h" |
31 #include "net/log/net_log_with_source.h" | 31 #include "net/log/net_log_with_source.h" |
32 #include "net/socket/client_socket_handle.h" | 32 #include "net/socket/client_socket_handle.h" |
33 #include "net/socket/ssl_client_socket.h" | 33 #include "net/socket/ssl_client_socket.h" |
34 #include "net/socket/ssl_server_socket.h" | 34 #include "net/socket/ssl_server_socket.h" |
35 #include "net/ssl/ssl_config_service.h" | 35 #include "net/ssl/ssl_config_service.h" |
36 #include "net/ssl/ssl_server_config.h" | 36 #include "net/ssl/ssl_server_config.h" |
37 #include "remoting/base/rsa_key_pair.h" | 37 #include "remoting/base/rsa_key_pair.h" |
(...skipping 22 matching lines...) Expand all Loading... |
60 net::CertVerifyResult* verify_result, | 60 net::CertVerifyResult* verify_result, |
61 const net::CompletionCallback& callback, | 61 const net::CompletionCallback& callback, |
62 std::unique_ptr<Request>* out_req, | 62 std::unique_ptr<Request>* out_req, |
63 const net::NetLogWithSource& net_log) override { | 63 const net::NetLogWithSource& net_log) override { |
64 verify_result->verified_cert = params.certificate(); | 64 verify_result->verified_cert = params.certificate(); |
65 verify_result->cert_status = net::CERT_STATUS_INVALID; | 65 verify_result->cert_status = net::CERT_STATUS_INVALID; |
66 return net::ERR_CERT_INVALID; | 66 return net::ERR_CERT_INVALID; |
67 } | 67 } |
68 }; | 68 }; |
69 | 69 |
70 // A CTVerifier which ignores Certificate Transparency information. | |
71 class IgnoresCTVerifier : public net::CTVerifier { | |
72 public: | |
73 IgnoresCTVerifier() = default; | |
74 ~IgnoresCTVerifier() override = default; | |
75 | |
76 int Verify(net::X509Certificate* cert, | |
77 const std::string& stapled_ocsp_response, | |
78 const std::string& sct_list_from_tls_extension, | |
79 net::SignedCertificateTimestampAndStatusList* output_scts, | |
80 const net::NetLogWithSource& net_log) override { | |
81 return net::OK; | |
82 } | |
83 | |
84 void SetObserver(Observer* observer) override {} | |
85 }; | |
86 | |
87 // A CTPolicyEnforcer that accepts all certificates. | 70 // A CTPolicyEnforcer that accepts all certificates. |
88 class IgnoresCTPolicyEnforcer : public net::CTPolicyEnforcer { | 71 class IgnoresCTPolicyEnforcer : public net::CTPolicyEnforcer { |
89 public: | 72 public: |
90 IgnoresCTPolicyEnforcer() = default; | 73 IgnoresCTPolicyEnforcer() = default; |
91 ~IgnoresCTPolicyEnforcer() override = default; | 74 ~IgnoresCTPolicyEnforcer() override = default; |
92 | 75 |
93 net::ct::CertPolicyCompliance DoesConformToCertPolicy( | 76 net::ct::CertPolicyCompliance DoesConformToCertPolicy( |
94 net::X509Certificate* cert, | 77 net::X509Certificate* cert, |
95 const net::SCTList& verified_scts, | 78 const net::SCTList& verified_scts, |
96 const net::NetLogWithSource& net_log) override { | 79 const net::NetLogWithSource& net_log) override { |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 base::MakeUnique<NetStreamSocketAdapter>(std::move(socket))); | 260 base::MakeUnique<NetStreamSocketAdapter>(std::move(socket))); |
278 net::SSLServerSocket* raw_server_socket = server_socket.get(); | 261 net::SSLServerSocket* raw_server_socket = server_socket.get(); |
279 socket_ = std::move(server_socket); | 262 socket_ = std::move(server_socket); |
280 result = raw_server_socket->Handshake( | 263 result = raw_server_socket->Handshake( |
281 base::Bind(&SslHmacChannelAuthenticator::OnConnected, | 264 base::Bind(&SslHmacChannelAuthenticator::OnConnected, |
282 base::Unretained(this))); | 265 base::Unretained(this))); |
283 #endif | 266 #endif |
284 } else { | 267 } else { |
285 transport_security_state_.reset(new net::TransportSecurityState); | 268 transport_security_state_.reset(new net::TransportSecurityState); |
286 cert_verifier_.reset(new FailingCertVerifier); | 269 cert_verifier_.reset(new FailingCertVerifier); |
287 ct_verifier_.reset(new IgnoresCTVerifier); | 270 ct_verifier_.reset(new net::DoNothingCTVerifier); |
288 ct_policy_enforcer_.reset(new IgnoresCTPolicyEnforcer); | 271 ct_policy_enforcer_.reset(new IgnoresCTPolicyEnforcer); |
289 | 272 |
290 net::SSLConfig ssl_config; | 273 net::SSLConfig ssl_config; |
291 // Certificate verification and revocation checking are not needed | 274 // Certificate verification and revocation checking are not needed |
292 // because we use self-signed certs. Disable it so that the SSL | 275 // because we use self-signed certs. Disable it so that the SSL |
293 // layer doesn't try to initialize OCSP (OCSP works only on the IO | 276 // layer doesn't try to initialize OCSP (OCSP works only on the IO |
294 // thread). | 277 // thread). |
295 ssl_config.cert_io_enabled = false; | 278 ssl_config.cert_io_enabled = false; |
296 ssl_config.rev_checking_enabled = false; | 279 ssl_config.rev_checking_enabled = false; |
297 ssl_config.require_ecdhe = true; | 280 ssl_config.require_ecdhe = true; |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 std::move(socket_), std::move(server_context_))); | 472 std::move(socket_), std::move(server_context_))); |
490 } | 473 } |
491 } | 474 } |
492 | 475 |
493 void SslHmacChannelAuthenticator::NotifyError(int error) { | 476 void SslHmacChannelAuthenticator::NotifyError(int error) { |
494 base::ResetAndReturn(&done_callback_).Run(error, nullptr); | 477 base::ResetAndReturn(&done_callback_).Run(error, nullptr); |
495 } | 478 } |
496 | 479 |
497 } // namespace protocol | 480 } // namespace protocol |
498 } // namespace remoting | 481 } // namespace remoting |
OLD | NEW |