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

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

Issue 869393005: Perform ClientHello padding if the field trial is enabled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@net_connection_error_uma
Patch Set: Created 5 years, 10 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 // OpenSSL binding for SSLClientSocket. The class layout and general principle 5 // OpenSSL binding for SSLClientSocket. The class layout and general principle
6 // of operation is derived from SSLClientSocketNSS. 6 // of operation is derived from SSLClientSocketNSS.
7 7
8 #include "net/socket/ssl_client_socket_openssl.h" 8 #include "net/socket/ssl_client_socket_openssl.h"
9 9
10 #include <errno.h> 10 #include <errno.h>
(...skipping 21 matching lines...) Expand all
32 #include "net/cert/ct_ev_whitelist.h" 32 #include "net/cert/ct_ev_whitelist.h"
33 #include "net/cert/ct_verifier.h" 33 #include "net/cert/ct_verifier.h"
34 #include "net/cert/single_request_cert_verifier.h" 34 #include "net/cert/single_request_cert_verifier.h"
35 #include "net/cert/x509_certificate_net_log_param.h" 35 #include "net/cert/x509_certificate_net_log_param.h"
36 #include "net/cert/x509_util_openssl.h" 36 #include "net/cert/x509_util_openssl.h"
37 #include "net/http/transport_security_state.h" 37 #include "net/http/transport_security_state.h"
38 #include "net/socket/ssl_session_cache_openssl.h" 38 #include "net/socket/ssl_session_cache_openssl.h"
39 #include "net/ssl/ssl_cert_request_info.h" 39 #include "net/ssl/ssl_cert_request_info.h"
40 #include "net/ssl/ssl_connection_status_flags.h" 40 #include "net/ssl/ssl_connection_status_flags.h"
41 #include "net/ssl/ssl_info.h" 41 #include "net/ssl/ssl_info.h"
42 #include "net/ssl/ssl_socket_config_service.h"
42 43
43 #if defined(OS_WIN) 44 #if defined(OS_WIN)
44 #include "base/win/windows_version.h" 45 #include "base/win/windows_version.h"
45 #endif 46 #endif
46 47
47 #if defined(USE_OPENSSL_CERTS) 48 #if defined(USE_OPENSSL_CERTS)
48 #include "net/ssl/openssl_client_key_store.h" 49 #include "net/ssl/openssl_client_key_store.h"
49 #else 50 #else
50 #include "net/ssl/openssl_platform_key.h" 51 #include "net/ssl/openssl_platform_key.h"
51 #endif 52 #endif
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 pending_read_ssl_error_(SSL_ERROR_NONE), 368 pending_read_ssl_error_(SSL_ERROR_NONE),
368 transport_read_error_(OK), 369 transport_read_error_(OK),
369 transport_write_error_(OK), 370 transport_write_error_(OK),
370 server_cert_chain_(new PeerCertificateChain(NULL)), 371 server_cert_chain_(new PeerCertificateChain(NULL)),
371 completed_connect_(false), 372 completed_connect_(false),
372 was_ever_used_(false), 373 was_ever_used_(false),
373 client_auth_cert_needed_(false), 374 client_auth_cert_needed_(false),
374 cert_verifier_(context.cert_verifier), 375 cert_verifier_(context.cert_verifier),
375 cert_transparency_verifier_(context.cert_transparency_verifier), 376 cert_transparency_verifier_(context.cert_transparency_verifier),
376 channel_id_service_(context.channel_id_service), 377 channel_id_service_(context.channel_id_service),
378 ssl_socket_config_service_(context.ssl_socket_config_service),
377 ssl_(NULL), 379 ssl_(NULL),
378 transport_bio_(NULL), 380 transport_bio_(NULL),
379 transport_(transport_socket.Pass()), 381 transport_(transport_socket.Pass()),
380 host_and_port_(host_and_port), 382 host_and_port_(host_and_port),
381 ssl_config_(ssl_config), 383 ssl_config_(ssl_config),
382 ssl_session_cache_shard_(context.ssl_session_cache_shard), 384 ssl_session_cache_shard_(context.ssl_session_cache_shard),
383 trying_cached_session_(false), 385 trying_cached_session_(false),
384 next_handshake_state_(STATE_NONE), 386 next_handshake_state_(STATE_NONE),
385 npn_status_(kNextProtoUnsupported), 387 npn_status_(kNextProtoUnsupported),
386 channel_id_xtn_negotiated_(false), 388 channel_id_xtn_negotiated_(false),
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 // TransportSecurityState. 465 // TransportSecurityState.
464 DCHECK(transport_security_state_); 466 DCHECK(transport_security_state_);
465 467
466 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT); 468 net_log_.BeginEvent(NetLog::TYPE_SSL_CONNECT);
467 469
468 // Set up new ssl object. 470 // Set up new ssl object.
469 int rv = Init(); 471 int rv = Init();
470 if (rv != OK) { 472 if (rv != OK) {
471 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 473 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
472 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv)); 474 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv));
475 if (ssl_socket_config_service_ &&
476 ssl_socket_config_service_->IsGoogle(host_and_port_))
477 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error_Google",
478 std::abs(rv));
473 return rv; 479 return rv;
474 } 480 }
475 481
476 // Set SSL to client mode. Handshake happens in the loop below. 482 // Set SSL to client mode. Handshake happens in the loop below.
477 SSL_set_connect_state(ssl_); 483 SSL_set_connect_state(ssl_);
478 484
479 GotoState(STATE_HANDSHAKE); 485 GotoState(STATE_HANDSHAKE);
480 rv = DoHandshakeLoop(OK); 486 rv = DoHandshakeLoop(OK);
481 if (rv == ERR_IO_PENDING) { 487 if (rv == ERR_IO_PENDING) {
482 user_connect_callback_ = callback; 488 user_connect_callback_ = callback;
483 } else { 489 } else {
484 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 490 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
485 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv)); 491 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv));
492 if (ssl_socket_config_service_ &&
493 ssl_socket_config_service_->IsGoogle(host_and_port_))
494 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error_Google",
495 std::abs(rv));
486 if (rv < OK) 496 if (rv < OK)
487 OnHandshakeCompletion(); 497 OnHandshakeCompletion();
488 } 498 }
489 499
490 return rv > OK ? OK : rv; 500 return rv > OK ? OK : rv;
491 } 501 }
492 502
493 void SSLClientSocketOpenSSL::Disconnect() { 503 void SSLClientSocketOpenSSL::Disconnect() {
494 // If a handshake was pending (Connect() had been called), notify interested 504 // If a handshake was pending (Connect() had been called), notify interested
495 // parties that it's been aborted now. If the handshake had already 505 // parties that it's been aborted now. If the handshake had already
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 } 885 }
876 886
877 if (ssl_config_.signed_cert_timestamps_enabled) { 887 if (ssl_config_.signed_cert_timestamps_enabled) {
878 SSL_enable_signed_cert_timestamps(ssl_); 888 SSL_enable_signed_cert_timestamps(ssl_);
879 SSL_enable_ocsp_stapling(ssl_); 889 SSL_enable_ocsp_stapling(ssl_);
880 } 890 }
881 891
882 if (IsOCSPStaplingSupported()) 892 if (IsOCSPStaplingSupported())
883 SSL_enable_ocsp_stapling(ssl_); 893 SSL_enable_ocsp_stapling(ssl_);
884 894
895 if (ssl_socket_config_service_) {
896 if (ssl_socket_config_service_->UseFastRadioPadding(host_and_port_)) {
897 SSL_enable_fastradio_padding(ssl_, 1);
898 } else {
899 SSL_enable_fastradio_padding(ssl_, 0);
900 }
901 }
902
885 return OK; 903 return OK;
886 } 904 }
887 905
888 void SSLClientSocketOpenSSL::DoReadCallback(int rv) { 906 void SSLClientSocketOpenSSL::DoReadCallback(int rv) {
889 // Since Run may result in Read being called, clear |user_read_callback_| 907 // Since Run may result in Read being called, clear |user_read_callback_|
890 // up front. 908 // up front.
891 if (rv > 0) 909 if (rv > 0)
892 was_ever_used_ = true; 910 was_ever_used_ = true;
893 user_read_buf_ = NULL; 911 user_read_buf_ = NULL;
894 user_read_buf_len_ = 0; 912 user_read_buf_len_ = 0;
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 } 1374 }
1357 } 1375 }
1358 } 1376 }
1359 } 1377 }
1360 1378
1361 void SSLClientSocketOpenSSL::OnHandshakeIOComplete(int result) { 1379 void SSLClientSocketOpenSSL::OnHandshakeIOComplete(int result) {
1362 int rv = DoHandshakeLoop(result); 1380 int rv = DoHandshakeLoop(result);
1363 if (rv != ERR_IO_PENDING) { 1381 if (rv != ERR_IO_PENDING) {
1364 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); 1382 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
1365 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv)); 1383 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv));
1384 if (ssl_socket_config_service_ &&
1385 ssl_socket_config_service_->IsGoogle(host_and_port_))
Alexei Svitkine (slow) 2015/01/30 18:16:19 Nit: {}
1386 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error_Google",
1387 std::abs(rv));
1366 DoConnectCallback(rv); 1388 DoConnectCallback(rv);
1367 } 1389 }
1368 } 1390 }
1369 1391
1370 void SSLClientSocketOpenSSL::OnSendComplete(int result) { 1392 void SSLClientSocketOpenSSL::OnSendComplete(int result) {
1371 if (next_handshake_state_ == STATE_HANDSHAKE) { 1393 if (next_handshake_state_ == STATE_HANDSHAKE) {
1372 // In handshake phase. 1394 // In handshake phase.
1373 OnHandshakeIOComplete(result); 1395 OnHandshakeIOComplete(result);
1374 return; 1396 return;
1375 } 1397 }
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 ct::SCT_STATUS_LOG_UNKNOWN)); 2041 ct::SCT_STATUS_LOG_UNKNOWN));
2020 } 2042 }
2021 } 2043 }
2022 2044
2023 scoped_refptr<X509Certificate> 2045 scoped_refptr<X509Certificate>
2024 SSLClientSocketOpenSSL::GetUnverifiedServerCertificateChain() const { 2046 SSLClientSocketOpenSSL::GetUnverifiedServerCertificateChain() const {
2025 return server_cert_; 2047 return server_cert_;
2026 } 2048 }
2027 2049
2028 } // namespace net 2050 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698