Chromium Code Reviews| 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_impl.h" | 5 #include "net/socket/ssl_client_socket_impl.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <openssl/bio.h> | 8 #include <openssl/bio.h> |
| 9 #include <openssl/bytestring.h> | 9 #include <openssl/bytestring.h> |
| 10 #include <openssl/err.h> | 10 #include <openssl/err.h> |
| (...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1215 SSL_get0_alpn_selected(ssl_, &alpn_proto, &alpn_len); | 1215 SSL_get0_alpn_selected(ssl_, &alpn_proto, &alpn_len); |
| 1216 if (alpn_len > 0) { | 1216 if (alpn_len > 0) { |
| 1217 base::StringPiece proto(reinterpret_cast<const char*>(alpn_proto), | 1217 base::StringPiece proto(reinterpret_cast<const char*>(alpn_proto), |
| 1218 alpn_len); | 1218 alpn_len); |
| 1219 negotiated_protocol_ = NextProtoFromString(proto); | 1219 negotiated_protocol_ = NextProtoFromString(proto); |
| 1220 npn_status_ = kNextProtoNegotiated; | 1220 npn_status_ = kNextProtoNegotiated; |
| 1221 negotiation_extension_ = kExtensionALPN; | 1221 negotiation_extension_ = kExtensionALPN; |
| 1222 } | 1222 } |
| 1223 } | 1223 } |
| 1224 | 1224 |
| 1225 RecordNegotiationExtension(); | 1225 RecordNegotiatedProtocol(); |
| 1226 RecordChannelIDSupport(); | 1226 RecordChannelIDSupport(); |
| 1227 | 1227 |
| 1228 const uint8_t* ocsp_response_raw; | 1228 const uint8_t* ocsp_response_raw; |
| 1229 size_t ocsp_response_len; | 1229 size_t ocsp_response_len; |
| 1230 SSL_get0_ocsp_response(ssl_, &ocsp_response_raw, &ocsp_response_len); | 1230 SSL_get0_ocsp_response(ssl_, &ocsp_response_raw, &ocsp_response_len); |
| 1231 std::string ocsp_response; | 1231 std::string ocsp_response; |
| 1232 if (ocsp_response_len > 0) { | 1232 if (ocsp_response_len > 0) { |
| 1233 ocsp_response_.assign(reinterpret_cast<const char*>(ocsp_response_raw), | 1233 ocsp_response_.assign(reinterpret_cast<const char*>(ocsp_response_raw), |
| 1234 ocsp_response_len); | 1234 ocsp_response_len); |
| 1235 } | 1235 } |
| (...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2335 void SSLClientSocketImpl::LogConnectEndEvent(int rv) { | 2335 void SSLClientSocketImpl::LogConnectEndEvent(int rv) { |
| 2336 if (rv != OK) { | 2336 if (rv != OK) { |
| 2337 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); | 2337 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv); |
| 2338 return; | 2338 return; |
| 2339 } | 2339 } |
| 2340 | 2340 |
| 2341 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, | 2341 net_log_.EndEvent(NetLog::TYPE_SSL_CONNECT, |
| 2342 base::Bind(&NetLogSSLInfoCallback, base::Unretained(this))); | 2342 base::Bind(&NetLogSSLInfoCallback, base::Unretained(this))); |
| 2343 } | 2343 } |
| 2344 | 2344 |
| 2345 void SSLClientSocketImpl::RecordNegotiationExtension() const { | 2345 void SSLClientSocketImpl::RecordNegotiatedProtocol() const { |
| 2346 if (negotiation_extension_ == kExtensionUnknown) | 2346 // Keep this enum in sync with Net.AlpnNegotiatedProtocol histogram. |
| 2347 return; | 2347 // Do not change or re-use values. |
| 2348 if (npn_status_ == kNextProtoUnsupported) | 2348 enum { |
| 2349 return; | 2349 ALPN_NOT_USED = 0, |
| 2350 base::HistogramBase::Sample sample = | 2350 ALPN_HTTP11_NEGOTIATED = 1, |
| 2351 static_cast<base::HistogramBase::Sample>(negotiated_protocol_); | 2351 ALPN_HTTP2_NEGOTIATED = 2, |
| 2352 // In addition to the protocol negotiated, we want to record which TLS | 2352 ALPN_MAX |
| 2353 // extension was used, and in case of NPN, whether there was overlap between | 2353 } protocol = ALPN_NOT_USED; |
| 2354 // server and client list of supported protocols. | 2354 |
| 2355 if (negotiation_extension_ == kExtensionNPN) { | 2355 switch (negotiated_protocol_) { |
|
davidben
2016/08/17 19:44:11
Why not just log the kProtoFoo values?
Bence
2016/08/18 13:37:34
Two reasons: (1) I want to fix the values here, cl
davidben
2016/08/25 18:10:41
The enum is small enough that I think it's fine to
Bence
2016/08/27 00:59:46
Done.
| |
| 2356 if (npn_status_ == kNextProtoNoOverlap) { | 2356 case kProtoUnknown: |
| 2357 sample += 1000; | 2357 protocol = ALPN_NOT_USED; |
|
davidben
2016/08/17 19:44:11
[Note this will result in a larger histogram, but
davidben
2016/08/17 19:44:56
By the way, this assumes we don't allow unknown AL
Bence
2016/08/18 13:37:34
Acknowledged.
Bence
2016/08/18 13:37:34
I actually consider this an important feature: I w
davidben
2016/08/25 18:10:41
Sounds good.
| |
| 2358 } else { | 2358 break; |
| 2359 sample += 500; | 2359 case kProtoHTTP11: |
| 2360 } | 2360 protocol = ALPN_HTTP11_NEGOTIATED; |
| 2361 } else { | 2361 break; |
| 2362 DCHECK_EQ(kExtensionALPN, negotiation_extension_); | 2362 case kProtoHTTP2: |
| 2363 protocol = ALPN_HTTP2_NEGOTIATED; | |
| 2364 break; | |
| 2365 case kProtoQUIC1SPDY3: | |
| 2366 NOTREACHED(); | |
| 2367 protocol = ALPN_NOT_USED; | |
| 2363 } | 2368 } |
| 2364 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSLProtocolNegotiation", sample); | 2369 UMA_HISTOGRAM_ENUMERATION("Net.AlpnNegotiatedProtocol", protocol, ALPN_MAX); |
|
davidben
2016/08/17 19:44:11
Nit: I think it'd be clearest if all the SSL histo
Bence
2016/08/18 13:37:34
Done.
| |
| 2365 } | 2370 } |
| 2366 | 2371 |
| 2367 void SSLClientSocketImpl::RecordChannelIDSupport() const { | 2372 void SSLClientSocketImpl::RecordChannelIDSupport() const { |
| 2368 // Since this enum is used for a histogram, do not change or re-use values. | 2373 // Since this enum is used for a histogram, do not change or re-use values. |
| 2369 enum { | 2374 enum { |
| 2370 DISABLED = 0, | 2375 DISABLED = 0, |
| 2371 CLIENT_ONLY = 1, | 2376 CLIENT_ONLY = 1, |
| 2372 CLIENT_AND_SERVER = 2, | 2377 CLIENT_AND_SERVER = 2, |
| 2373 // CLIENT_NO_ECC is unused now. | 2378 // CLIENT_NO_ECC is unused now. |
| 2374 // CLIENT_BAD_SYSTEM_TIME is unused now. | 2379 // CLIENT_BAD_SYSTEM_TIME is unused now. |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 2386 } | 2391 } |
| 2387 UMA_HISTOGRAM_ENUMERATION("DomainBoundCerts.Support", supported, | 2392 UMA_HISTOGRAM_ENUMERATION("DomainBoundCerts.Support", supported, |
| 2388 CHANNEL_ID_USAGE_MAX); | 2393 CHANNEL_ID_USAGE_MAX); |
| 2389 } | 2394 } |
| 2390 | 2395 |
| 2391 bool SSLClientSocketImpl::IsChannelIDEnabled() const { | 2396 bool SSLClientSocketImpl::IsChannelIDEnabled() const { |
| 2392 return ssl_config_.channel_id_enabled && channel_id_service_; | 2397 return ssl_config_.channel_id_enabled && channel_id_service_; |
| 2393 } | 2398 } |
| 2394 | 2399 |
| 2395 } // namespace net | 2400 } // namespace net |
| OLD | NEW |