| 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 5345d8e5b41347ecdc9950b16e50c4f70d1a8e96..a3a89ea57a553d6917971999ed3c493e90141c12 100644
|
| --- a/net/socket/ssl_client_socket_impl.cc
|
| +++ b/net/socket/ssl_client_socket_impl.cc
|
| @@ -70,10 +70,6 @@ namespace {
|
| // overlap with any value of the net::Error range, including net::OK).
|
| const int kNoPendingResult = 1;
|
|
|
| -// If a client doesn't have a list of protocols that it supports, but
|
| -// the server supports NPN, choosing "http/1.1" is the best answer.
|
| -const char kDefaultSupportedNPNProtocol[] = "http/1.1";
|
| -
|
| // Default size of the internal BoringSSL buffers.
|
| const int kDefaultOpenSSLBufferSize = 17 * 1024;
|
|
|
| @@ -248,10 +244,6 @@ class SSLClientSocketImpl::SSLContext {
|
| // is currently not sent on the network.
|
| // TODO(haavardm): Remove setting quiet shutdown once 118366 is fixed.
|
| SSL_CTX_set_quiet_shutdown(ssl_ctx_.get(), 1);
|
| - // Note that SSL_OP_DISABLE_NPN is used to disable NPN if
|
| - // ssl_config_.next_proto is empty.
|
| - SSL_CTX_set_next_proto_select_cb(ssl_ctx_.get(), SelectNextProtoCallback,
|
| - NULL);
|
|
|
| // Disable the internal session cache. Session caching is handled
|
| // externally (i.e. by SSLClientSessionCache).
|
| @@ -316,16 +308,6 @@ class SSLClientSocketImpl::SSLContext {
|
| return socket->CertVerifyCallback(store_ctx);
|
| }
|
|
|
| - static int SelectNextProtoCallback(SSL* ssl,
|
| - unsigned char** out,
|
| - unsigned char* outlen,
|
| - const unsigned char* in,
|
| - unsigned int inlen,
|
| - void* arg) {
|
| - SSLClientSocketImpl* socket = GetInstance()->GetClientSocketFromSSL(ssl);
|
| - return socket->SelectNextProtoCallback(out, outlen, in, inlen);
|
| - }
|
| -
|
| static int NewSessionCallback(SSL* ssl, SSL_SESSION* session) {
|
| SSLClientSocketImpl* socket = GetInstance()->GetClientSocketFromSSL(ssl);
|
| return socket->NewSessionCallback(session);
|
| @@ -514,9 +496,7 @@ SSLClientSocketImpl::SSLClientSocketImpl(
|
| ssl_session_cache_shard_(context.ssl_session_cache_shard),
|
| next_handshake_state_(STATE_NONE),
|
| disconnected_(false),
|
| - npn_status_(kNextProtoUnsupported),
|
| negotiated_protocol_(kProtoUnknown),
|
| - negotiation_extension_(kExtensionUnknown),
|
| channel_id_sent_(false),
|
| certificate_verified_(false),
|
| signature_result_(kNoPendingResult),
|
| @@ -697,7 +677,6 @@ void SSLClientSocketImpl::Disconnect() {
|
|
|
| start_cert_verification_time_ = base::TimeTicks();
|
|
|
| - npn_status_ = kNextProtoUnsupported;
|
| negotiated_protocol_ = kProtoUnknown;
|
|
|
| channel_id_sent_ = false;
|
| @@ -1065,9 +1044,6 @@ int SSLClientSocketImpl::Init() {
|
| wire_protos.size());
|
| }
|
|
|
| - if (ssl_config_.npn_protos.empty())
|
| - SSL_set_options(ssl_, SSL_OP_DISABLE_NPN);
|
| -
|
| if (ssl_config_.signed_cert_timestamps_enabled) {
|
| SSL_enable_signed_cert_timestamps(ssl_);
|
| SSL_enable_ocsp_stapling(ssl_);
|
| @@ -1205,18 +1181,13 @@ int SSLClientSocketImpl::DoHandshakeComplete(int result) {
|
| if (tb_was_negotiated_ && !SSL_get_extms_support(ssl_))
|
| return ERR_SSL_PROTOCOL_ERROR;
|
|
|
| - // SSL handshake is completed. If NPN wasn't negotiated, see if ALPN was.
|
| - if (npn_status_ == kNextProtoUnsupported) {
|
| - const uint8_t* alpn_proto = NULL;
|
| - unsigned alpn_len = 0;
|
| - SSL_get0_alpn_selected(ssl_, &alpn_proto, &alpn_len);
|
| - if (alpn_len > 0) {
|
| - base::StringPiece proto(reinterpret_cast<const char*>(alpn_proto),
|
| - alpn_len);
|
| - negotiated_protocol_ = NextProtoFromString(proto);
|
| - npn_status_ = kNextProtoNegotiated;
|
| - negotiation_extension_ = kExtensionALPN;
|
| - }
|
| + const uint8_t* alpn_proto = NULL;
|
| + unsigned alpn_len = 0;
|
| + SSL_get0_alpn_selected(ssl_, &alpn_proto, &alpn_len);
|
| + if (alpn_len > 0) {
|
| + base::StringPiece proto(reinterpret_cast<const char*>(alpn_proto),
|
| + alpn_len);
|
| + negotiated_protocol_ = NextProtoFromString(proto);
|
| }
|
|
|
| RecordNegotiatedProtocol();
|
| @@ -1987,56 +1958,6 @@ int SSLClientSocketImpl::CertVerifyCallback(X509_STORE_CTX* store_ctx) {
|
| return 1;
|
| }
|
|
|
| -// SelectNextProtoCallback is called by OpenSSL during the handshake. If the
|
| -// server supports NPN, selects a protocol from the list that the server
|
| -// provides. According to third_party/boringssl/src/ssl/ssl_lib.c, the
|
| -// callback can assume that |in| is syntactically valid.
|
| -int SSLClientSocketImpl::SelectNextProtoCallback(unsigned char** out,
|
| - unsigned char* outlen,
|
| - const unsigned char* in,
|
| - unsigned int inlen) {
|
| - if (ssl_config_.npn_protos.empty()) {
|
| - *out = reinterpret_cast<uint8_t*>(
|
| - const_cast<char*>(kDefaultSupportedNPNProtocol));
|
| - *outlen = arraysize(kDefaultSupportedNPNProtocol) - 1;
|
| - npn_status_ = kNextProtoUnsupported;
|
| - return SSL_TLSEXT_ERR_OK;
|
| - }
|
| -
|
| - // Assume there's no overlap between our protocols and the server's list.
|
| - npn_status_ = kNextProtoNoOverlap;
|
| -
|
| - // For each protocol in server preference order, see if we support it.
|
| - for (unsigned int i = 0; i < inlen; i += in[i] + 1) {
|
| - for (NextProto next_proto : ssl_config_.npn_protos) {
|
| - const std::string proto = NextProtoToString(next_proto);
|
| - if (in[i] == proto.size() &&
|
| - memcmp(&in[i + 1], proto.data(), in[i]) == 0) {
|
| - // We found a match.
|
| - negotiated_protocol_ = next_proto;
|
| - *out = const_cast<unsigned char*>(in) + i + 1;
|
| - *outlen = in[i];
|
| - npn_status_ = kNextProtoNegotiated;
|
| - break;
|
| - }
|
| - }
|
| - if (npn_status_ == kNextProtoNegotiated)
|
| - break;
|
| - }
|
| -
|
| - // If we didn't find a protocol, we select the last one from our list.
|
| - if (npn_status_ == kNextProtoNoOverlap) {
|
| - negotiated_protocol_ = ssl_config_.npn_protos.back();
|
| - // NextProtoToString returns a pointer to a static string.
|
| - const char* proto = NextProtoToString(negotiated_protocol_);
|
| - *out = reinterpret_cast<unsigned char*>(const_cast<char*>(proto));
|
| - *outlen = strlen(proto);
|
| - }
|
| -
|
| - negotiation_extension_ = kExtensionNPN;
|
| - return SSL_TLSEXT_ERR_OK;
|
| -}
|
| -
|
| long SSLClientSocketImpl::MaybeReplayTransportError(BIO* bio,
|
| int cmd,
|
| const char* argp,
|
| @@ -2147,7 +2068,7 @@ bool SSLClientSocketImpl::IsRenegotiationAllowed() const {
|
| if (tb_was_negotiated_)
|
| return false;
|
|
|
| - if (npn_status_ == kNextProtoUnsupported)
|
| + if (negotiated_protocol_ == kProtoUnknown)
|
| return ssl_config_.renego_allowed_default;
|
|
|
| for (NextProto allowed : ssl_config_.renego_allowed_for_protos) {
|
|
|