Library: NetSSL_OpenSSL
Package: SSLCore
Header: Poco/Net/Context.h
This class encapsulates context information for an SSL server or client, such as the certificate verification mode and the location of certificates and private key files, as well as the list of supported ciphers.
The Context class is also used to control SSL session caching on the server and client side.
Direct Base Classes: Poco::RefCountedObject
All Base Classes: Poco::RefCountedObject
Member Functions: addChainCertificate, disableStatelessSessionResumption, enableExtendedCertificateVerification, enableSessionCache, extendedCertificateVerificationEnabled, flushSessionCache, getSessionCacheSize, getSessionTimeout, sessionCacheEnabled, setSessionCacheSize, setSessionTimeout, sslContext, usage, useCertificate, usePrivateKey, verificationMode
Inherited Functions: duplicate, referenceCount, release
typedef Poco::AutoPtr < Context > Ptr;
Context is used by a client.
Context is used by a server.
VERIFY_NONE = 0x00
Server: The server will not send a client certificate request to the client, so the client will not send a certificate.
Client: If not using an anonymous cipher (by default disabled), the server will send a certificate which will be checked, but the result of the check will be ignored.
VERIFY_RELAXED = 0x01
Server: The server sends a client certificate request to the client. The certificate returned (if any) is checked. If the verification process fails, the TLS/SSL handshake is immediately terminated with an alert message containing the reason for the verification failure.
Client: The server certificate is verified, if one is provided. If the verification process fails, the TLS/SSL handshake is immediately terminated with an alert message containing the reason for the verification failure.
VERIFY_STRICT = 0x01 | 0x02
Server: If the client did not return a certificate, the TLS/SSL handshake is immediately terminated with a handshake failure alert.
Client: Same as VERIFY_RELAXED.
VERIFY_ONCE = 0x01 | 0x04
Server: Only request a client certificate on the initial TLS/SSL handshake. Do not ask for a client certificate again in case of a renegotiation.
Client: Same as VERIFY_RELAXED.
Context(
Usage usage,
const std::string & caLocation,
VerificationMode verificationMode = VERIFY_RELAXED,
int verificationDepth = 9,
bool loadDefaultCAs = false,
const std::string & cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"
);
Creates a Context.
Note that a private key and/or certificate must be specified with usePrivateKey()/useCertificate() before the Context can be used.
Context(
Usage usage,
const std::string & privateKeyFile,
const std::string & certificateFile,
const std::string & caLocation,
VerificationMode verificationMode = VERIFY_RELAXED,
int verificationDepth = 9,
bool loadDefaultCAs = false,
const std::string & cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"
);
Creates a Context.
Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired event must be handled.
~Context();
Destroys the Context.
void addChainCertificate(
const Poco::Crypto::X509Certificate & certificate
);
Adds a certificate for certificate chain validation.
void disableStatelessSessionResumption();
Newer versions of OpenSSL support RFC 4507 tickets for stateless session resumption.
The feature can be disabled by calling this method.
void enableExtendedCertificateVerification(
bool flag = true
);
Enable or disable the automatic post-connection extended certificate verification.
See X509Certificate::verify() for more information.
void enableSessionCache(
bool flag = true
);
Enable or disable SSL/TLS session caching. For session caching to work, it must be enabled on the server, as well as on the client side.
The default is disabled session caching.
To enable session caching on the server side, use the two-argument version of this method to specify a session ID context.
void enableSessionCache(
bool flag,
const std::string & sessionIdContext
);
Enables or disables SSL/TLS session caching on the server. For session caching to work, it must be enabled on the server, as well as on the client side.
SessionIdContext contains the application's unique session ID context, which becomes part of each session identifier generated by the server within this context. SessionIdContext can be an arbitrary sequence of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH.
A non-empty sessionIdContext should be specified even if session caching is disabled to avoid problems with clients requesting to reuse a session (e.g. Firefox 3.6).
This method may only be called on SERVER_USE Context objects.
bool extendedCertificateVerificationEnabled() const;
Returns true if and only if automatic extended certificate verification is enabled.
void flushSessionCache();
Flushes the SSL session cache on the server.
This method may only be called on SERVER_USE Context objets.
std::size_t getSessionCacheSize() const;
Returns the current maximum size of the server session cache.
This method may only be called on SERVER_USE Context objets.
long getSessionTimeout() const;
Returns the timeout (in seconds) of cached sessions on the server.
This method may only be called on SERVER_USE Context objets.
bool sessionCacheEnabled() const;
Returns true if and only if the session cache is enabled.
void setSessionCacheSize(
std::size_t size
);
Sets the maximum size of the server session cache, in number of sessions. The default size (according to OpenSSL documentation) is 1024*20, which may be too large for many applications, especially on embedded platforms with limited memory.
Specifying a size of 0 will set an unlimited cache size.
This method may only be called on SERVER_USE Context objets.
void setSessionTimeout(
long seconds
);
Sets the timeout (in seconds) of cached sessions on the server. A cached session will be removed from the cache if it has not been used for the given number of seconds.
This method may only be called on SERVER_USE Context objets.
SSL_CTX * sslContext() const;
Returns the underlying OpenSSL SSL Context object.
Usage usage() const;
Returns whether the context is for use by a client or by a server.
void useCertificate(
const Poco::Crypto::X509Certificate & certificate
);
Sets the certificate to be used by the Context.
To set-up a complete certificate chain, it might be necessary to call addChainCertificate() to specify additional certificates.
Note that useCertificate() must always be called before usePrivateKey().
void usePrivateKey(
const Poco::Crypto::RSAKey & key
);
Sets the private key to be used by the Context.
Note that useCertificate() must always be called before usePrivateKey().
Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired event must be handled.
Context::VerificationMode verificationMode() const;
Returns the verification mode.