Index: net/socket/ssl_client_socket_impl.cc |
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc |
index 3202d4375d4b5439341265ab00071c347315ebbd..97c67521063c9c9ba8d1545d9499aac6baec277f 100644 |
--- a/net/socket/ssl_client_socket_impl.cc |
+++ b/net/socket/ssl_client_socket_impl.cc |
@@ -1172,11 +1172,6 @@ int SSLClientSocketImpl::DoHandshakeComplete(int result) { |
const uint8_t* ocsp_response_raw; |
size_t ocsp_response_len; |
SSL_get0_ocsp_response(ssl_.get(), &ocsp_response_raw, &ocsp_response_len); |
- std::string ocsp_response; |
- if (ocsp_response_len > 0) { |
- ocsp_response_.assign(reinterpret_cast<const char*>(ocsp_response_raw), |
- ocsp_response_len); |
- } |
set_stapled_ocsp_response_received(ocsp_response_len != 0); |
UMA_HISTOGRAM_BOOLEAN("Net.OCSPResponseStapled", ocsp_response_len != 0); |
@@ -1258,10 +1253,16 @@ int SSLClientSocketImpl::DoVerifyCert(int result) { |
start_cert_verification_time_ = base::TimeTicks::Now(); |
+ const uint8_t* ocsp_response_raw; |
+ size_t ocsp_response_len; |
+ SSL_get0_ocsp_response(ssl_.get(), &ocsp_response_raw, &ocsp_response_len); |
+ base::StringPiece ocsp_response( |
+ reinterpret_cast<const char*>(ocsp_response_raw), ocsp_response_len); |
+ |
return cert_verifier_->Verify( |
CertVerifier::RequestParams(server_cert_, host_and_port_.host(), |
ssl_config_.GetCertVerifyFlags(), |
- ocsp_response_, CertificateList()), |
+ ocsp_response.as_string(), CertificateList()), |
// TODO(davidben): Route the CRLSet through SSLConfig so |
// SSLClientSocket doesn't depend on SSLConfigService. |
SSLConfigService::GetCRLSet().get(), &server_cert_verify_result_, |
@@ -1319,8 +1320,15 @@ int SSLClientSocketImpl::DoVerifyCertComplete(int result) { |
SSLInfo ssl_info; |
bool ok = GetSSLInfo(&ssl_info); |
DCHECK(ok); |
+ |
+ const uint8_t* ocsp_response_raw; |
+ size_t ocsp_response_len; |
+ SSL_get0_ocsp_response(ssl_.get(), &ocsp_response_raw, &ocsp_response_len); |
+ base::StringPiece ocsp_response( |
+ reinterpret_cast<const char*>(ocsp_response_raw), ocsp_response_len); |
+ |
transport_security_state_->CheckExpectStaple(host_and_port_, ssl_info, |
- ocsp_response_); |
+ ocsp_response); |
} |
completed_connect_ = true; |
@@ -1557,15 +1565,20 @@ int SSLClientSocketImpl::VerifyCT() { |
const uint8_t* sct_list_raw; |
size_t sct_list_len; |
SSL_get0_signed_cert_timestamp_list(ssl_.get(), &sct_list_raw, &sct_list_len); |
- std::string sct_list; |
- if (sct_list_len > 0) |
- sct_list.assign(reinterpret_cast<const char*>(sct_list_raw), sct_list_len); |
+ base::StringPiece sct_list(reinterpret_cast<const char*>(sct_list_raw), |
+ sct_list_len); |
+ |
+ const uint8_t* ocsp_response_raw; |
+ size_t ocsp_response_len; |
+ SSL_get0_ocsp_response(ssl_.get(), &ocsp_response_raw, &ocsp_response_len); |
+ base::StringPiece ocsp_response( |
+ reinterpret_cast<const char*>(ocsp_response_raw), ocsp_response_len); |
// Note that this is a completely synchronous operation: The CT Log Verifier |
// gets all the data it needs for SCT verification and does not do any |
// external communication. |
cert_transparency_verifier_->Verify( |
- server_cert_verify_result_.verified_cert.get(), ocsp_response_, sct_list, |
+ server_cert_verify_result_.verified_cert.get(), ocsp_response, sct_list, |
&ct_verify_result_.scts, net_log_); |
ct_verify_result_.ct_policies_applied = true; |