Index: net/http/http_stream_factory_impl_job.cc |
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc |
index 38f185a4e9edd69b15517afa531d4c5027430020..d2c4149b234e2156296f7aa1bcb4137153082e48 100644 |
--- a/net/http/http_stream_factory_impl_job.cc |
+++ b/net/http/http_stream_factory_impl_job.cc |
@@ -1257,15 +1257,29 @@ bool HttpStreamFactoryImpl::Job::IsSpdyAlternate() const { |
void HttpStreamFactoryImpl::Job::InitSSLConfig(const HostPortPair& server, |
SSLConfig* ssl_config, |
bool is_proxy) const { |
+ if (!is_proxy) { |
+ // Prior to HTTP/2 and SPDY, some servers use TLS renegotiation to request |
+ // TLS client authentication after the HTTP request was sent. Allow |
+ // renegotiation for only those connections. |
+ // |
+ // Note that this does NOT implement the provision in |
+ // https://http2.github.io/http2-spec/#rfc.section.9.2.1 which allows the |
+ // server to request a renegotiation immediately before sending the |
+ // connection preface as waiting for the preface would cost the round trip |
+ // that False Start otherwise saves. |
+ ssl_config->renego_allowed_default = true; |
+ ssl_config->renego_allowed_for_protos.push_back(kProtoHTTP11); |
+ } |
+ |
if (proxy_info_.is_https() && ssl_config->send_client_cert) { |
// When connecting through an HTTPS proxy, disable TLS False Start so |
// that client authentication errors can be distinguished between those |
// originating from the proxy server (ERR_PROXY_CONNECTION_FAILED) and |
// those originating from the endpoint (ERR_SSL_PROTOCOL_ERROR / |
// ERR_BAD_SSL_CLIENT_AUTH_CERT). |
- // TODO(rch): This assumes that the HTTPS proxy will only request a |
- // client certificate during the initial handshake. |
- // http://crbug.com/59292 |
+ // |
+ // This assumes the proxy will only request certificates on the initial |
+ // handshake; renegotiation on the proxy connection is unsupported. |
ssl_config->false_start_enabled = false; |
} |