| Index: net/socket/ssl_client_socket.h
|
| diff --git a/net/socket/ssl_client_socket.h b/net/socket/ssl_client_socket.h
|
| deleted file mode 100644
|
| index 46461df2ead1fcc6f1424a7eebe533a5ffdc4768..0000000000000000000000000000000000000000
|
| --- a/net/socket/ssl_client_socket.h
|
| +++ /dev/null
|
| @@ -1,267 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef NET_SOCKET_SSL_CLIENT_SOCKET_H_
|
| -#define NET_SOCKET_SSL_CLIENT_SOCKET_H_
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/gtest_prod_util.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "net/base/load_flags.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/socket/ssl_socket.h"
|
| -#include "net/socket/stream_socket.h"
|
| -
|
| -namespace net {
|
| -
|
| -class CertPolicyEnforcer;
|
| -class CertVerifier;
|
| -class ChannelIDService;
|
| -class CTVerifier;
|
| -class HostPortPair;
|
| -class ServerBoundCertService;
|
| -class SSLCertRequestInfo;
|
| -struct SSLConfig;
|
| -class SSLInfo;
|
| -class TransportSecurityState;
|
| -class X509Certificate;
|
| -
|
| -// This struct groups together several fields which are used by various
|
| -// classes related to SSLClientSocket.
|
| -struct SSLClientSocketContext {
|
| - SSLClientSocketContext()
|
| - : cert_verifier(NULL),
|
| - channel_id_service(NULL),
|
| - transport_security_state(NULL),
|
| - cert_transparency_verifier(NULL),
|
| - cert_policy_enforcer(NULL) {}
|
| -
|
| - SSLClientSocketContext(CertVerifier* cert_verifier_arg,
|
| - ChannelIDService* channel_id_service_arg,
|
| - TransportSecurityState* transport_security_state_arg,
|
| - CTVerifier* cert_transparency_verifier_arg,
|
| - CertPolicyEnforcer* cert_policy_enforcer_arg,
|
| - const std::string& ssl_session_cache_shard_arg)
|
| - : cert_verifier(cert_verifier_arg),
|
| - channel_id_service(channel_id_service_arg),
|
| - transport_security_state(transport_security_state_arg),
|
| - cert_transparency_verifier(cert_transparency_verifier_arg),
|
| - cert_policy_enforcer(cert_policy_enforcer_arg),
|
| - ssl_session_cache_shard(ssl_session_cache_shard_arg) {}
|
| -
|
| - CertVerifier* cert_verifier;
|
| - ChannelIDService* channel_id_service;
|
| - TransportSecurityState* transport_security_state;
|
| - CTVerifier* cert_transparency_verifier;
|
| - CertPolicyEnforcer* cert_policy_enforcer;
|
| - // ssl_session_cache_shard is an opaque string that identifies a shard of the
|
| - // SSL session cache. SSL sockets with the same ssl_session_cache_shard may
|
| - // resume each other's SSL sessions but we'll never sessions between shards.
|
| - const std::string ssl_session_cache_shard;
|
| -};
|
| -
|
| -// A client socket that uses SSL as the transport layer.
|
| -//
|
| -// NOTE: The SSL handshake occurs within the Connect method after a TCP
|
| -// connection is established. If a SSL error occurs during the handshake,
|
| -// Connect will fail.
|
| -//
|
| -class NET_EXPORT SSLClientSocket : public SSLSocket {
|
| - public:
|
| - SSLClientSocket();
|
| -
|
| - // Next Protocol Negotiation (NPN) allows a TLS client and server to come to
|
| - // an agreement about the application level protocol to speak over a
|
| - // connection.
|
| - enum NextProtoStatus {
|
| - // WARNING: These values are serialized to disk. Don't change them.
|
| -
|
| - kNextProtoUnsupported = 0, // The server doesn't support NPN.
|
| - kNextProtoNegotiated = 1, // We agreed on a protocol.
|
| - kNextProtoNoOverlap = 2, // No protocols in common. We requested
|
| - // the first protocol in our list.
|
| - };
|
| -
|
| - // TLS extension used to negotiate protocol.
|
| - enum SSLNegotiationExtension {
|
| - kExtensionUnknown,
|
| - kExtensionALPN,
|
| - kExtensionNPN,
|
| - };
|
| -
|
| - // StreamSocket:
|
| - bool WasNpnNegotiated() const override;
|
| - NextProto GetNegotiatedProtocol() const override;
|
| -
|
| - // Computes a unique key string for the SSL session cache.
|
| - virtual std::string GetSessionCacheKey() const = 0;
|
| -
|
| - // Returns true if there is a cache entry in the SSL session cache
|
| - // for the cache key of the SSL socket.
|
| - //
|
| - // The cache key consists of a host and port concatenated with a session
|
| - // cache shard. These two strings are passed to the constructor of most
|
| - // subclasses of SSLClientSocket.
|
| - virtual bool InSessionCache() const = 0;
|
| -
|
| - // Sets |callback| to be run when the handshake has fully completed.
|
| - // For example, in the case of False Start, Connect() will return
|
| - // early, before the peer's TLS Finished message has been verified,
|
| - // in order to allow the caller to call Write() and send application
|
| - // data with the client's Finished message.
|
| - // In such situations, |callback| will be invoked sometime after
|
| - // Connect() - either during a Write() or Read() call, and before
|
| - // invoking the Read() or Write() callback.
|
| - // Otherwise, during a traditional TLS connection (i.e. no False
|
| - // Start), this will be called right before the Connect() callback
|
| - // is called.
|
| - //
|
| - // Note that it's not valid to mutate this socket during such
|
| - // callbacks, including deleting the socket.
|
| - //
|
| - // TODO(mshelley): Provide additional details about whether or not
|
| - // the handshake actually succeeded or not. This can be inferred
|
| - // from the result to Connect()/Read()/Write(), but may be useful
|
| - // to inform here as well.
|
| - virtual void SetHandshakeCompletionCallback(
|
| - const base::Closure& callback) = 0;
|
| -
|
| - // Gets the SSL CertificateRequest info of the socket after Connect failed
|
| - // with ERR_SSL_CLIENT_AUTH_CERT_NEEDED.
|
| - virtual void GetSSLCertRequestInfo(
|
| - SSLCertRequestInfo* cert_request_info) = 0;
|
| -
|
| - // Get the application level protocol that we negotiated with the server.
|
| - // *proto is set to the resulting protocol (n.b. that the string may have
|
| - // embedded NULs).
|
| - // kNextProtoUnsupported: *proto is cleared.
|
| - // kNextProtoNegotiated: *proto is set to the negotiated protocol.
|
| - // kNextProtoNoOverlap: *proto is set to the first protocol in the
|
| - // supported list.
|
| - virtual NextProtoStatus GetNextProto(std::string* proto) = 0;
|
| -
|
| - static NextProto NextProtoFromString(const std::string& proto_string);
|
| -
|
| - static const char* NextProtoToString(NextProto next_proto);
|
| -
|
| - static const char* NextProtoStatusToString(const NextProtoStatus status);
|
| -
|
| - static bool IgnoreCertError(int error, int load_flags);
|
| -
|
| - // ClearSessionCache clears the SSL session cache, used to resume SSL
|
| - // sessions.
|
| - static void ClearSessionCache();
|
| -
|
| - // Get the maximum SSL version supported by the underlying library and
|
| - // cryptographic implementation.
|
| - static uint16 GetMaxSupportedSSLVersion();
|
| -
|
| - virtual bool set_was_npn_negotiated(bool negotiated);
|
| -
|
| - virtual bool was_spdy_negotiated() const;
|
| -
|
| - virtual bool set_was_spdy_negotiated(bool negotiated);
|
| -
|
| - virtual void set_protocol_negotiated(NextProto protocol_negotiated);
|
| -
|
| - void set_negotiation_extension(SSLNegotiationExtension negotiation_extension);
|
| -
|
| - // Returns the ChannelIDService used by this socket, or NULL if
|
| - // channel ids are not supported.
|
| - virtual ChannelIDService* GetChannelIDService() const = 0;
|
| -
|
| - // Returns true if a channel ID was sent on this connection.
|
| - // This may be useful for protocols, like SPDY, which allow the same
|
| - // connection to be shared between multiple domains, each of which need
|
| - // a channel ID.
|
| - //
|
| - // Public for ssl_client_socket_openssl_unittest.cc.
|
| - virtual bool WasChannelIDSent() const;
|
| -
|
| - // Record which TLS extension was used to negotiate protocol and protocol
|
| - // chosen in a UMA histogram.
|
| - void RecordNegotiationExtension();
|
| -
|
| - protected:
|
| - virtual void set_channel_id_sent(bool channel_id_sent);
|
| -
|
| - virtual void set_signed_cert_timestamps_received(
|
| - bool signed_cert_timestamps_received);
|
| -
|
| - virtual void set_stapled_ocsp_response_received(
|
| - bool stapled_ocsp_response_received);
|
| -
|
| - // Records histograms for channel id support during full handshakes - resumed
|
| - // handshakes are ignored.
|
| - static void RecordChannelIDSupport(
|
| - ChannelIDService* channel_id_service,
|
| - bool negotiated_channel_id,
|
| - bool channel_id_enabled,
|
| - bool supports_ecc);
|
| -
|
| - // Records ConnectionType histograms for a successful SSL connection.
|
| - static void RecordConnectionTypeMetrics(int ssl_version);
|
| -
|
| - // Returns whether TLS channel ID is enabled.
|
| - static bool IsChannelIDEnabled(
|
| - const SSLConfig& ssl_config,
|
| - ChannelIDService* channel_id_service);
|
| -
|
| - // Determine if there is at least one enabled cipher suite that satisfies
|
| - // Section 9.2 of the HTTP/2 specification. Note that the server might still
|
| - // pick an inadequate cipher suite.
|
| - static bool HasCipherAdequateForHTTP2(
|
| - const std::vector<uint16>& cipher_suites);
|
| -
|
| - // Determine if the TLS version required by Section 9.2 of the HTTP/2
|
| - // specification is enabled. Note that the server might still pick an
|
| - // inadequate TLS version.
|
| - static bool IsTLSVersionAdequateForHTTP2(const SSLConfig& ssl_config);
|
| -
|
| - // Serializes |next_protos| in the wire format for ALPN: protocols are listed
|
| - // in order, each prefixed by a one-byte length. Any HTTP/2 protocols in
|
| - // |next_protos| are ignored if |can_advertise_http2| is false.
|
| - static std::vector<uint8_t> SerializeNextProtos(
|
| - const NextProtoVector& next_protos,
|
| - bool can_advertise_http2);
|
| -
|
| - // For unit testing only.
|
| - // Returns the unverified certificate chain as presented by server.
|
| - // Note that chain may be different than the verified chain returned by
|
| - // StreamSocket::GetSSLInfo().
|
| - virtual scoped_refptr<X509Certificate> GetUnverifiedServerCertificateChain()
|
| - const = 0;
|
| -
|
| - private:
|
| - FRIEND_TEST_ALL_PREFIXES(SSLClientSocket, SerializeNextProtos);
|
| - // For signed_cert_timestamps_received_ and stapled_ocsp_response_received_.
|
| - FRIEND_TEST_ALL_PREFIXES(SSLClientSocketTest,
|
| - ConnectSignedCertTimestampsEnabledTLSExtension);
|
| - FRIEND_TEST_ALL_PREFIXES(SSLClientSocketTest,
|
| - ConnectSignedCertTimestampsEnabledOCSP);
|
| - FRIEND_TEST_ALL_PREFIXES(SSLClientSocketTest,
|
| - ConnectSignedCertTimestampsDisabled);
|
| - FRIEND_TEST_ALL_PREFIXES(SSLClientSocketTest,
|
| - VerifyServerChainProperlyOrdered);
|
| -
|
| - // True if NPN was responded to, independent of selecting SPDY or HTTP.
|
| - bool was_npn_negotiated_;
|
| - // True if NPN successfully negotiated SPDY.
|
| - bool was_spdy_negotiated_;
|
| - // Protocol that we negotiated with the server.
|
| - NextProto protocol_negotiated_;
|
| - // True if a channel ID was sent.
|
| - bool channel_id_sent_;
|
| - // True if SCTs were received via a TLS extension.
|
| - bool signed_cert_timestamps_received_;
|
| - // True if a stapled OCSP response was received.
|
| - bool stapled_ocsp_response_received_;
|
| - // Protocol negotiation extension used.
|
| - SSLNegotiationExtension negotiation_extension_;
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_SOCKET_SSL_CLIENT_SOCKET_H_
|
|
|