Chromium Code Reviews| Index: net/socket/ssl_server_socket.h |
| diff --git a/net/socket/ssl_server_socket.h b/net/socket/ssl_server_socket.h |
| index ceb9c0a27a898f85e8d812611fc2c9da3cb58c96..ee4cef86211e7ac5183656a483ddb2294de29225 100644 |
| --- a/net/socket/ssl_server_socket.h |
| +++ b/net/socket/ssl_server_socket.h |
| @@ -5,12 +5,15 @@ |
| #ifndef NET_SOCKET_SSL_SERVER_SOCKET_H_ |
| #define NET_SOCKET_SSL_SERVER_SOCKET_H_ |
| +#include <vector> |
| + |
| #include "base/basictypes.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "net/base/completion_callback.h" |
| #include "net/base/net_export.h" |
| #include "net/socket/ssl_socket.h" |
| #include "net/socket/stream_socket.h" |
| +#include "net/ssl/ssl_client_cert_type.h" |
| namespace crypto { |
| class RSAPrivateKey; |
| @@ -18,9 +21,38 @@ class RSAPrivateKey; |
| namespace net { |
| +class ClientCertVerifier; |
| struct SSLServerConfig; |
| class X509Certificate; |
| +// This struct groups together several fields which are used by various |
| +// classes related to SSLServerSocket. |
| +struct SSLServerSocketContext { |
|
davidben
2015/12/01 22:35:17
SSLClientSocketContext was kind of absurd to begin
ryanchung
2015/12/02 23:57:03
I think putting it with SSLServerConfig seem to ma
|
| + SSLServerSocketContext() : client_cert_verifier(NULL) {} |
| + |
| + // Indicates that a client certificate is required, and provides the |
| + // CertificateVerifier that is to be used to verify it during the handshake. |
| + // The |client_cert_verifier| continues to be owned by the caller, |
| + // and must exist at least until the handshake has completed. |
| + // This function is meaningful only if client certificates are required. |
| + // NOTES: |
| + // 1. If no CertificateVerifier is provided, then a client certificate may |
| + // still be allowed (if ssl_server_config.send_client_cert is true), |
| + // but in that case verification must be done after the handshake |
| + // has completed, by which time the session will have been cached, |
| + // and may be subject to resumption. |
| + // 2. The |client_cert_verifier| must provide its response synchronously, and |
| + // blocks the IO thread while it runs. This results from a limitation of NSS. |
| + // If ERR_IO_PENDING is returned, this is considered a verification failure. |
|
davidben
2015/12/01 22:35:17
This isn't even implemented in NSS, no?
ryanchung
2015/12/02 23:57:03
Sorry, that was outdated. I believe OpenSSL also r
|
| + // 3. For verifying a client certificate, the CertVerifier::Verify method |
| + // will be called with input parameters as follows: |
| + // - cert: the cert to be verified |
| + // - hostname: empty string |
| + // - flags: 0 |
| + // - crl_set: NULL |
|
davidben
2015/12/01 22:35:17
?
ryanchung
2015/12/02 23:57:03
Sorry, that was outdated. Fixed.
|
| + ClientCertVerifier* client_cert_verifier; |
| +}; |
| + |
| class SSLServerSocket : public SSLSocket { |
| public: |
| ~SSLServerSocket() override {} |
| @@ -48,8 +80,8 @@ NET_EXPORT void EnableSSLServerSockets(); |
| // The returned SSLServerSocket takes ownership of |socket|. Stubbed versions |
| // of CreateSSLServerSocket will delete |socket| and return NULL. |
| // It takes a reference to |certificate|. |
| -// The |key| and |ssl_config| parameters are copied. |key| cannot be const |
| -// because the methods used to copy its contents are non-const. |
| +// The |key| and |ssl_server_config| parameters are copied. |key| cannot be |
| +// const because the methods used to copy its contents are non-const. |
| // |
| // The caller starts the SSL server handshake by calling Handshake on the |
| // returned socket. |
| @@ -57,7 +89,16 @@ NET_EXPORT scoped_ptr<SSLServerSocket> CreateSSLServerSocket( |
| scoped_ptr<StreamSocket> socket, |
| X509Certificate* certificate, |
| crypto::RSAPrivateKey* key, |
| - const SSLServerConfig& ssl_config); |
| + const SSLServerConfig& ssl_server_config); |
| + |
| +// Creates an SSL server socket over an already-connected transport socket. |
| +// Overloads the original to add an optional context |
| +NET_EXPORT scoped_ptr<SSLServerSocket> CreateSSLServerSocket( |
| + scoped_ptr<StreamSocket> socket, |
| + X509Certificate* certificate, |
| + crypto::RSAPrivateKey* key, |
| + const SSLServerConfig& ssl_server_config, |
| + const SSLServerSocketContext& context); |
| } // namespace net |