| Index: net/socket/ssl_client_socket_openssl.cc
|
| diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc
|
| index 9338bcf96c45cf9734247215a45bcea3f1c26a4c..88965f5688d2bbe129f8a34e483e92d5df49bfe4 100644
|
| --- a/net/socket/ssl_client_socket_openssl.cc
|
| +++ b/net/socket/ssl_client_socket_openssl.cc
|
| @@ -843,6 +843,10 @@ int SSLClientSocketOpenSSL::Init() {
|
| ssl_config_.fastradio_padding_enabled &&
|
| ssl_config_.fastradio_padding_eligible);
|
|
|
| + // By default, renegotiations are rejected. After the initial handshake
|
| + // completes, some application protocols may re-enable it.
|
| + SSL_set_reject_peer_renegotiations(ssl_, 1);
|
| +
|
| return OK;
|
| }
|
|
|
| @@ -949,6 +953,9 @@ int SSLClientSocketOpenSSL::DoHandshake() {
|
| SSL_get0_signed_cert_timestamp_list(ssl_, &sct_list, &sct_list_len);
|
| set_signed_cert_timestamps_received(sct_list_len != 0);
|
|
|
| + if (IsRenegotiationAllowed())
|
| + SSL_set_reject_peer_renegotiations(ssl_, 0);
|
| +
|
| // Verify the certificate.
|
| UpdateServerCert();
|
| GotoState(STATE_VERIFY_CERT);
|
| @@ -1886,6 +1893,18 @@ std::string SSLClientSocketOpenSSL::GetSessionCacheKey() const {
|
| return result;
|
| }
|
|
|
| +bool SSLClientSocketOpenSSL::IsRenegotiationAllowed() const {
|
| + if (npn_status_ == kNextProtoUnsupported)
|
| + return ssl_config_.renego_allowed_default;
|
| +
|
| + NextProto next_proto = NextProtoFromString(npn_proto_);
|
| + for (NextProto allowed : ssl_config_.renego_allowed_for_protos) {
|
| + if (next_proto == allowed)
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| scoped_refptr<X509Certificate>
|
| SSLClientSocketOpenSSL::GetUnverifiedServerCertificateChain() const {
|
| return server_cert_;
|
|
|