Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: net/socket/ssl_server_socket.h

Issue 994743003: Support for client certs in ssl_server_socket. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Passing this CL to RyanChung for further work. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/socket/ssl_client_socket_openssl.cc ('k') | net/socket/ssl_server_socket_nss.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NET_SOCKET_SSL_SERVER_SOCKET_H_ 5 #ifndef NET_SOCKET_SSL_SERVER_SOCKET_H_
6 #define NET_SOCKET_SSL_SERVER_SOCKET_H_ 6 #define NET_SOCKET_SSL_SERVER_SOCKET_H_
7 7
8 #include <vector>
9
8 #include "base/basictypes.h" 10 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
10 #include "net/base/completion_callback.h" 12 #include "net/base/completion_callback.h"
11 #include "net/base/net_export.h" 13 #include "net/base/net_export.h"
12 #include "net/socket/ssl_socket.h" 14 #include "net/socket/ssl_socket.h"
13 #include "net/socket/stream_socket.h" 15 #include "net/socket/stream_socket.h"
16 #include "net/ssl/ssl_client_cert_type.h"
14 17
15 namespace crypto { 18 namespace crypto {
16 class RSAPrivateKey; 19 class RSAPrivateKey;
17 } // namespace crypto 20 } // namespace crypto
18 21
19 namespace net { 22 namespace net {
20 23
24 class CertVerifier;
21 struct SSLServerConfig; 25 struct SSLServerConfig;
22 class X509Certificate; 26 class X509Certificate;
27 typedef std::vector<scoped_refptr<X509Certificate>> CertificateList;
23 28
24 class SSLServerSocket : public SSLSocket { 29 class SSLServerSocket : public SSLSocket {
25 public: 30 public:
26 ~SSLServerSocket() override {} 31 ~SSLServerSocket() override {}
27 32
28 // Perform the SSL server handshake, and notify the supplied callback 33 // Perform the SSL server handshake, and notify the supplied callback
29 // if the process completes asynchronously. If Disconnect is called before 34 // if the process completes asynchronously. If Disconnect is called before
30 // completion then the callback will be silently, as for other StreamSocket 35 // completion then the callback will be silently, as for other StreamSocket
31 // calls. 36 // calls.
32 virtual int Handshake(const CompletionCallback& callback) = 0; 37 virtual int Handshake(const CompletionCallback& callback) = 0;
38
39 // Indicates whether a client certificate is to be required by the upcoming
40 // Handshake.
41 virtual void SetRequireClientCert(bool require_client_cert) = 0;
42
43 // Provides the list of certificates whose names are to be included in the
44 // CertificateRequest handshake message. Calling this function is only useful
45 // if certificates are allowed.
46 virtual void SetClientCertCAList(
47 const CertificateList& client_cert_ca_list) = 0;
48
49 // Indicates that a client certificate is not only allowed but required, and
50 // provides the CertificateVerifier that is to be used to verify it during the
51 // handshake. The |client_cert_verifier| continues to be owned by the caller,
52 // and must exist at least until the handshake has completed.
53 // This function is meaningful only if client certificates are allowed.
54 // NOTES:
55 // 1. If no CertificateVerifier is provided, then a client certificate may
56 // still be allowed (if ssl_config.send_client_cert is true), but in that case
57 // verification must be done after the handshake has completed, by which time
58 // the session will have been cached, and may be subject to resumption.
59 // 2. The |client_cert_verifier| must provide its response synchronously, and
60 // blocks the IO thread while it runs. This results from a limitation of NSS.
61 // If ERR_IO_PENDING is returned, this is considered a verification failure.
62 // 3. For verifying a client certificate, the CertVerifier::Verify method
63 // will be called with input parameters as follows:
64 // - cert: the cert to be verified
65 // - hostname: empty string
66 // - flags: 0
67 // - crl_set: NULL
68 virtual void SetClientCertVerifier(CertVerifier* client_cert_verifier) = 0;
33 }; 69 };
34 70
35 // Configures the underlying SSL library for the use of SSL server sockets. 71 // Configures the underlying SSL library for the use of SSL server sockets.
36 // 72 //
37 // Due to the requirements of the underlying libraries, this should be called 73 // Due to the requirements of the underlying libraries, this should be called
38 // early in process initialization, before any SSL socket, client or server, 74 // early in process initialization, before any SSL socket, client or server,
39 // has been used. 75 // has been used.
40 // 76 //
41 // Note: If a process does not use SSL server sockets, this call may be 77 // Note: If a process does not use SSL server sockets, this call may be
42 // omitted. 78 // omitted.
(...skipping 12 matching lines...) Expand all
55 // returned socket. 91 // returned socket.
56 NET_EXPORT scoped_ptr<SSLServerSocket> CreateSSLServerSocket( 92 NET_EXPORT scoped_ptr<SSLServerSocket> CreateSSLServerSocket(
57 scoped_ptr<StreamSocket> socket, 93 scoped_ptr<StreamSocket> socket,
58 X509Certificate* certificate, 94 X509Certificate* certificate,
59 crypto::RSAPrivateKey* key, 95 crypto::RSAPrivateKey* key,
60 const SSLServerConfig& ssl_config); 96 const SSLServerConfig& ssl_config);
61 97
62 } // namespace net 98 } // namespace net
63 99
64 #endif // NET_SOCKET_SSL_SERVER_SOCKET_H_ 100 #endif // NET_SOCKET_SSL_SERVER_SOCKET_H_
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_openssl.cc ('k') | net/socket/ssl_server_socket_nss.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698