
#use wml::openssl-macros area=docs page=ssl

<title>Documents, ssl(3)</title>

<h1>ssl(3)</h1>

#use wml::imp::generic

{:
## What's this? [[s|(<STRONG>[^<].+?)</A>(</STRONG><DD>)|$1$2|sg]]
[[s|<P>\s+<P>|<P>|sg]]
[[s|<P>\s+</|</|sg]]
[[s|<DD>\s*<DT>|<DD>&nbsp;<DT>|sg]]
[[s|<DD>\s*</DL>|<DD>&nbsp;</DL>|sg]]
[[s|\[|&#91;|sg]]
[[s|\]|&#93;|sg]]

<!-- INDEX BEGIN -->

<UL>

	<LI><A HREF="#NAME">NAME</A>
	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
	<LI><A HREF="#DATA_STRUCTURES">DATA STRUCTURES</A>
	<LI><A HREF="#HEADER_FILES">HEADER FILES</A>
	<LI><A HREF="#API_FUNCTIONS">API FUNCTIONS</A>
	<UL>

		<LI><A HREF="#DEALING_WITH_PROTOCOL_METHODS">DEALING WITH PROTOCOL METHODS</A>
		<LI><A HREF="#DEALING_WITH_CIPHERS">DEALING WITH CIPHERS</A>
		<LI><A HREF="#DEALING_WITH_PROTOCOL_CONTEXTS">DEALING WITH PROTOCOL CONTEXTS</A>
		<LI><A HREF="#DEALING_WITH_SESSIONS">DEALING WITH SESSIONS</A>
		<LI><A HREF="#DEALING_WITH_CONNECTIONS">DEALING WITH CONNECTIONS</A>
	</UL>

	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
	<LI><A HREF="#HISTORY">HISTORY</A>
</UL>
<!-- INDEX END -->

<HR>
<P>
<HR>
<H1><A NAME="NAME">NAME</A></H1>
<P>
SSL - OpenSSL SSL/TLS library

</P>
<P>
<HR>
<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
<P>
<HR>
<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
<P>
The OpenSSL <STRONG>ssl</STRONG> library implements the Secure Sockets Layer (SSL v2/v3) and Transport Layer
Security (TLS v1) protocols. It provides a rich API which is documented
here.

</P>
<P>
At first the library must be initialized; see
<A HREF="../ssl/SSL_library_init.html#">SSL_library_init(3)</A>.

</P>
<P>
Then an <STRONG>SSL_CTX</STRONG> object is created as a framework to establish TLS/SSL enabled connections
(see <A HREF="../ssl/SSL_CTX_new.html#">SSL_CTX_new(3)</A>). Various options regarding certificates, algorithms etc. can be set in
this object.

</P>
<P>
When a network connection has been created, it can be assigned to an
<STRONG>SSL</STRONG> object. After the <STRONG>SSL</STRONG> object has been created using
<A HREF="../ssl/SSL_new.html#">SSL_new(3)</A>, <A HREF="../ssl/SSL_set_fd.html#">SSL_set_fd(3)</A> or
<A HREF="../ssl/SSL_set_bio.html#">SSL_set_bio(3)</A> can be used to associate the network connection with the object.

</P>
<P>
Then the TLS/SSL handshake is performed using
<A HREF="../ssl/SSL_accept.html#">SSL_accept(3)</A> or <A HREF="../ssl/SSL_connect.html#">SSL_connect(3)</A>
respectively.
<A HREF="../ssl/SSL_read.html#">SSL_read(3)</A> and <A HREF="../ssl/SSL_write.html#">SSL_write(3)</A> are used to read and write data on the TLS/SSL connection.
<A HREF="../ssl/SSL_shutdown.html#">SSL_shutdown(3)</A> can be used to shut down the TLS/SSL connection.

</P>
<P>
<HR>
<H1><A NAME="DATA_STRUCTURES">DATA STRUCTURES</A></H1>
<P>
Currently the OpenSSL <STRONG>ssl</STRONG> library functions deals with the following data structures:

</P>
<DL>
<DT><STRONG><A NAME="item_SSL_METHOD"><STRONG>SSL_METHOD</STRONG> (SSL Method)</A></STRONG><DD>
<P>
That's a dispatch structure describing the internal <STRONG>ssl</STRONG> library methods/functions which implement the various protocol versions
(SSLv1, SSLv2 and TLSv1). It's needed to create an <STRONG>SSL_CTX</STRONG>.

</P>
<DT><STRONG><A NAME="item_SSL_CIPHER"><STRONG>SSL_CIPHER</STRONG> (SSL Cipher)</A></STRONG><DD>
<P>
This structure holds the algorithm information for a particular cipher
which are a core part of the SSL/TLS protocol. The available ciphers are
configured on a <STRONG>SSL_CTX</STRONG> basis and the actually used ones are then part of the
<STRONG>SSL_SESSION</STRONG>.

</P>
<DT><STRONG><A NAME="item_SSL_CTX"><STRONG>SSL_CTX</STRONG> (SSL Context)</A></STRONG><DD>
<P>
That's the global context structure which is created by a server or client
once per program life-time and which holds mainly default values for the
<STRONG>SSL</STRONG> structures which are later created for the connections.

</P>
<DT><STRONG><A NAME="item_SSL_SESSION"><STRONG>SSL_SESSION</STRONG> (SSL Session)</A></STRONG><DD>
<P>
This is a structure containing the current TLS/SSL session details for a
connection: <STRONG>SSL_CIPHER</STRONG>s, client and server certificates, keys, etc.

</P>
<DT><STRONG><A NAME="item_SSL"><STRONG>SSL</STRONG> (SSL Connection)</A></STRONG><DD>
<P>
That's the main SSL/TLS structure which is created by a server or client
per established connection. This actually is the core structure in the SSL
API. Under run-time the application usually deals with this structure which
has links to mostly all other structures.

</P>
</DL>
<P>
<HR>
<H1><A NAME="HEADER_FILES">HEADER FILES</A></H1>
<P>
Currently the OpenSSL <STRONG>ssl</STRONG> library provides the following C header files containing the prototypes for
the data structures and and functions:

</P>
<DL>
<DT><STRONG><A NAME="item_ssl"><STRONG>ssl.h</STRONG></A></STRONG><DD>
<P>
That's the common header file for the SSL/TLS API. Include it into your
program to make the API of the <STRONG>ssl</STRONG> library available. It internally includes both more private SSL headers and
headers from the <STRONG>crypto</STRONG> library. Whenever you need hard-core details on the internals of the SSL
API, look inside this header file.

</P>
<DT><STRONG><A NAME="item_ssl2"><STRONG>ssl2.h</STRONG></A></STRONG><DD>
<P>
That's the sub header file dealing with the SSLv2 protocol only.
<EM>Usually you don't have to include it explicitly because
it's already included by ssl.h</EM>.

</P>
<DT><STRONG><A NAME="item_ssl3"><STRONG>ssl3.h</STRONG></A></STRONG><DD>
<P>
That's the sub header file dealing with the SSLv3 protocol only.
<EM>Usually you don't have to include it explicitly because
it's already included by ssl.h</EM>.

</P>
<DT><STRONG><A NAME="item_ssl23"><STRONG>ssl23.h</STRONG></A></STRONG><DD>
<P>
That's the sub header file dealing with the combined use of the SSLv2 and
SSLv3 protocols.
<EM>Usually you don't have to include it explicitly because
it's already included by ssl.h</EM>.

</P>
<DT><STRONG><A NAME="item_tls1"><STRONG>tls1.h</STRONG></A></STRONG><DD>
<P>
That's the sub header file dealing with the TLSv1 protocol only.
<EM>Usually you don't have to include it explicitly because
it's already included by ssl.h</EM>.

</P>
</DL>
<P>
<HR>
<H1><A NAME="API_FUNCTIONS">API FUNCTIONS</A></H1>
<P>
Currently the OpenSSL <STRONG>ssl</STRONG> library exports 214 API functions. They are documented in the following:

</P>
<P>
<HR>
<H2><A NAME="DEALING_WITH_PROTOCOL_METHODS">DEALING WITH PROTOCOL METHODS</A></H2>
<P>
Here we document the various API functions which deal with the SSL/TLS
protocol methods defined in <STRONG>SSL_METHOD</STRONG> structures.

</P>
<DL>
<DT><STRONG><A NAME="item_const">const SSL_METHOD *<STRONG>SSLv2_client_method</STRONG>(void);</A></STRONG><DD>
<P>
Constructor for the SSLv2 SSL_METHOD structure for a dedicated client.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>SSLv2_server_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the SSLv2 SSL_METHOD structure for a dedicated server.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>SSLv2_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the SSLv2 SSL_METHOD structure for combined client and
server.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>SSLv3_client_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the SSLv3 SSL_METHOD structure for a dedicated client.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>SSLv3_server_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the SSLv3 SSL_METHOD structure for a dedicated server.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>SSLv3_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the SSLv3 SSL_METHOD structure for combined client and
server.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>TLSv1_client_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the TLSv1 SSL_METHOD structure for a dedicated client.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>TLSv1_server_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the TLSv1 SSL_METHOD structure for a dedicated server.

</P>
<DT><STRONG>const SSL_METHOD *<STRONG>TLSv1_method</STRONG>(void);</STRONG><DD>
<P>
Constructor for the TLSv1 SSL_METHOD structure for combined client and
server.

</P>
</DL>
<P>
<HR>
<H2><A NAME="DEALING_WITH_CIPHERS">DEALING WITH CIPHERS</A></H2>
<P>
Here we document the various API functions which deal with the SSL/TLS
ciphers defined in <STRONG>SSL_CIPHER</STRONG> structures.

</P>
<DL>
<DT><STRONG><A NAME="item_char">char *<STRONG>SSL_CIPHER_description</STRONG>(SSL_CIPHER *cipher, char *buf, int len);</A></STRONG><DD>
<P>
Write a string to <EM>buf</EM> (with a maximum size of <EM>len</EM>) containing a human readable description of <EM>cipher</EM>. Returns <EM>buf</EM>.

</P>
<DT><STRONG><A NAME="item_int">int <STRONG>SSL_CIPHER_get_bits</STRONG>(SSL_CIPHER *cipher, int *alg_bits);</A></STRONG><DD>
<P>
Determine the number of bits in <EM>cipher</EM>. Because of export crippled ciphers there are two bits: The bits the
algorithm supports in general (stored to
<EM>alg_bits</EM>) and the bits which are actually used (the return value).

</P>
<DT><STRONG>const char *<STRONG>SSL_CIPHER_get_name</STRONG>(SSL_CIPHER *cipher);</STRONG><DD>
<P>
Return the internal name of <EM>cipher</EM> as a string. These are the various strings defined by the <EM>SSL2_TXT_xxx</EM>, <EM>SSL3_TXT_xxx</EM> and <EM>TLS1_TXT_xxx</EM>
definitions in the header files.

</P>
<DT><STRONG>char *<STRONG>SSL_CIPHER_get_version</STRONG>(SSL_CIPHER *cipher);</STRONG><DD>
<P>
Returns a string like ``<CODE>TLSv1/SSLv3</CODE>'' or ``<CODE>SSLv2</CODE>'' which indicates the SSL/TLS protocol version to which <EM>cipher</EM> belongs (i.e. where it was defined in the specification the first time).

</P>
</DL>
<P>
<HR>
<H2><A NAME="DEALING_WITH_PROTOCOL_CONTEXTS">DEALING WITH PROTOCOL CONTEXTS</A></H2>
<P>
Here we document the various API functions which deal with the SSL/TLS
protocol context defined in the <STRONG>SSL_CTX</STRONG> structure.

</P>
<DL>
<DT><STRONG>int <STRONG>SSL_CTX_add_client_CA</STRONG>(SSL_CTX *ctx, X509 *x);</STRONG><DD>
<DT><STRONG><A NAME="item_long">long <STRONG>SSL_CTX_add_extra_chain_cert</STRONG>(SSL_CTX *ctx, X509 *x509);</A></STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_add_session</STRONG>(SSL_CTX *ctx, SSL_SESSION *c);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_check_private_key</STRONG>(const SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_CTX_ctrl</STRONG>(SSL_CTX *ctx, int cmd, long larg, char *parg);</STRONG><DD>
<DT><STRONG><A NAME="item_void">void <STRONG>SSL_CTX_flush_sessions</STRONG>(SSL_CTX *s, long t);</A></STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_free</STRONG>(SSL_CTX *a);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_CTX_get_app_data</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG><A NAME="item_X509_STORE">X509_STORE *<STRONG>SSL_CTX_get_cert_store</STRONG>(SSL_CTX *ctx);</A></STRONG><DD>
<DT><STRONG><A NAME="item_STACK">STACK *<STRONG>SSL_CTX_get_client_CA_list</STRONG>(const SSL_CTX *ctx);</A></STRONG><DD>
<DT><STRONG>int (*<STRONG>SSL_CTX_get_client_cert_cb</STRONG>(SSL_CTX *ctx))(SSL *ssl, X509 **x509, EVP_PKEY **pkey);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_CTX_get_ex_data</STRONG>(const SSL_CTX *s, int idx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_get_ex_new_index</STRONG>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))</STRONG><DD>
<DT><STRONG>void (*<STRONG>SSL_CTX_get_info_callback</STRONG>(SSL_CTX *ctx))(SSL *ssl, int cb, int ret);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_get_quiet_shutdown</STRONG>(const SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_get_session_cache_mode</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_CTX_get_timeout</STRONG>(const SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int (*<STRONG>SSL_CTX_get_verify_callback</STRONG>(const SSL_CTX *ctx))(int ok, X509_STORE_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_get_verify_mode</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_load_verify_locations</STRONG>(SSL_CTX *ctx, char *CAfile, char *CApath);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_CTX_need_tmp_RSA</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>SSL_CTX *<STRONG>SSL_CTX_new</STRONG>(const SSL_METHOD *meth);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_remove_session</STRONG>(SSL_CTX *ctx, SSL_SESSION *c);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_accept</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_accept_good</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_accept_renegotiate</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_cache_full</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_cb_hits</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_connect</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_connect_good</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_connect_renegotiate</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_get_cache_size</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>SSL_SESSION *(*<STRONG>SSL_CTX_sess_get_get_cb</STRONG>(SSL_CTX *ctx))(SSL *ssl, unsigned char *data, int len, int *copy);</STRONG><DD>
<DT><STRONG>int (*<STRONG>SSL_CTX_sess_get_new_cb</STRONG>(SSL_CTX *ctx)(SSL *ssl, SSL_SESSION *sess);</STRONG><DD>
<DT><STRONG>void (*<STRONG>SSL_CTX_sess_get_remove_cb</STRONG>(SSL_CTX *ctx)(SSL_CTX *ctx, SSL_SESSION *sess);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_hits</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_misses</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_number</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_sess_set_cache_size</STRONG>(SSL_CTX *ctx,t);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_sess_set_get_cb</STRONG>(SSL_CTX *ctx, SSL_SESSION *(*cb)(SSL *ssl, unsigned char *data, int len, int *copy));</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_sess_set_new_cb</STRONG>(SSL_CTX *ctx, int (*cb)(SSL *ssl, SSL_SESSION *sess));</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_sess_set_remove_cb</STRONG>(SSL_CTX *ctx, void (*cb)(SSL_CTX *ctx, SSL_SESSION *sess));</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_sess_timeouts</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG><A NAME="item_LHASH">LHASH *<STRONG>SSL_CTX_sessions</STRONG>(SSL_CTX *ctx);</A></STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_app_data</STRONG>(SSL_CTX *ctx, void *arg);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_cert_store</STRONG>(SSL_CTX *ctx, X509_STORE *cs);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_cert_verify_cb</STRONG>(SSL_CTX *ctx, int (*cb)(), char *arg)</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_set_cipher_list</STRONG>(SSL_CTX *ctx, char *str);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_client_CA_list</STRONG>(SSL_CTX *ctx, STACK *list);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_client_cert_cb</STRONG>(SSL_CTX *ctx, int (*cb)(SSL *ssl, X509 **x509, EVP_PKEY **pkey));</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_default_passwd_cb</STRONG>(SSL_CTX *ctx, int (*cb);(void))</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_default_read_ahead</STRONG>(SSL_CTX *ctx, int m);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_set_default_verify_paths</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_set_ex_data</STRONG>(SSL_CTX *s, int idx, char *arg);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_info_callback</STRONG>(SSL_CTX *ctx, void (*cb)(SSL *ssl, int cb, int ret));</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_msg_callback</STRONG>(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_msg_callback_arg</STRONG>(SSL_CTX *ctx, void *arg);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_options</STRONG>(SSL_CTX *ctx, unsigned long op);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_quiet_shutdown</STRONG>(SSL_CTX *ctx, int mode);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_session_cache_mode</STRONG>(SSL_CTX *ctx, int mode);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_set_ssl_version</STRONG>(SSL_CTX *ctx, const SSL_METHOD *meth);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_timeout</STRONG>(SSL_CTX *ctx, long t);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_CTX_set_tmp_dh</STRONG>(SSL_CTX* ctx, DH *dh);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_CTX_set_tmp_dh_callback</STRONG>(SSL_CTX *ctx, DH *(*cb)(void));</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_CTX_set_tmp_rsa</STRONG>(SSL_CTX *ctx, RSA *rsa);</STRONG><DD>
<DT><STRONG><A NAME="item_SSL_CTX_set_tmp_rsa_callback">SSL_CTX_set_tmp_rsa_callback</A></STRONG><DD>
<P>
<CODE>long &lt;STRONG&gt;SSL_CTX_set_tmp_rsa_callback&lt;/STRONG&gt;(SSL_CTX *&lt;STRONG&gt;ctx&lt;/STRONG&gt;, RSA *(*&lt;STRONG&gt;cb&lt;/STRONG&gt;)(SSL *&lt;STRONG&gt;ssl&lt;/STRONG&gt;, int &lt;STRONG&gt;export&lt;/STRONG&gt;, int &lt;STRONG&gt;keylength&lt;/STRONG&gt;));</CODE>



</P>
<P>
Sets the callback which will be called when a temporary private key is
required. The <STRONG><CODE>export</CODE></STRONG> flag will be set if the reason for needing a temp key is that an export
ciphersuite is in use, in which case,
<STRONG><CODE>keylength</CODE></STRONG> will contain the required keylength in bits. Generate a key of appropriate
size (using ???) and return it.

</P>
<DT><STRONG><A NAME="item_SSL_set_tmp_rsa_callback">SSL_set_tmp_rsa_callback</A></STRONG><DD>
<P>
long <STRONG>SSL_set_tmp_rsa_callback</STRONG>(SSL *ssl, RSA *(*cb)(SSL *ssl, int export, int keylength));

</P>
<P>
The same as <STRONG>SSL_CTX_set_tmp_rsa_callback</STRONG>, except it operates on an SSL session instead of a context.

</P>
<DT><STRONG>void <STRONG>SSL_CTX_set_verify</STRONG>(SSL_CTX *ctx, int mode, int (*cb);(void))</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_PrivateKey</STRONG>(SSL_CTX *ctx, EVP_PKEY *pkey);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_PrivateKey_ASN1</STRONG>(int type, SSL_CTX *ctx, unsigned char *d, long len);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_PrivateKey_file</STRONG>(SSL_CTX *ctx, char *file, int type);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_RSAPrivateKey</STRONG>(SSL_CTX *ctx, RSA *rsa);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_RSAPrivateKey_ASN1</STRONG>(SSL_CTX *ctx, unsigned char *d, long len);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_RSAPrivateKey_file</STRONG>(SSL_CTX *ctx, char *file, int type);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_certificate</STRONG>(SSL_CTX *ctx, X509 *x);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_certificate_ASN1</STRONG>(SSL_CTX *ctx, int len, unsigned char *d);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_certificate_file</STRONG>(SSL_CTX *ctx, char *file, int type);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_psk_client_callback</STRONG>(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_CTX_use_psk_identity_hint</STRONG>(SSL_CTX *ctx, const char *hint);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_CTX_set_psk_server_callback</STRONG>(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));</STRONG><DD>
</DL>
<P>
<HR>
<H2><A NAME="DEALING_WITH_SESSIONS">DEALING WITH SESSIONS</A></H2>
<P>
Here we document the various API functions which deal with the SSL/TLS
sessions defined in the <STRONG>SSL_SESSION</STRONG> structures.

</P>
<DL>
<DT><STRONG>int <STRONG>SSL_SESSION_cmp</STRONG>(const SSL_SESSION *a, const SSL_SESSION *b);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_SESSION_free</STRONG>(SSL_SESSION *ss);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_SESSION_get_app_data</STRONG>(SSL_SESSION *s);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_SESSION_get_ex_data</STRONG>(const SSL_SESSION *s, int idx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_SESSION_get_ex_new_index</STRONG>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_SESSION_get_time</STRONG>(const SSL_SESSION *s);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_SESSION_get_timeout</STRONG>(const SSL_SESSION *s);</STRONG><DD>
<DT><STRONG><A NAME="item_unsigned">unsigned long <STRONG>SSL_SESSION_hash</STRONG>(const SSL_SESSION *a);</A></STRONG><DD>
<DT><STRONG>SSL_SESSION *<STRONG>SSL_SESSION_new</STRONG>(void);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_SESSION_print</STRONG>(BIO *bp, const SSL_SESSION *x);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_SESSION_print_fp</STRONG>(FILE *fp, const SSL_SESSION *x);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_SESSION_set_app_data</STRONG>(SSL_SESSION *s, char *a);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_SESSION_set_ex_data</STRONG>(SSL_SESSION *s, int idx, char *arg);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_SESSION_set_time</STRONG>(SSL_SESSION *s, long t);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_SESSION_set_timeout</STRONG>(SSL_SESSION *s, long t);</STRONG><DD>
</DL>
<P>
<HR>
<H2><A NAME="DEALING_WITH_CONNECTIONS">DEALING WITH CONNECTIONS</A></H2>
<P>
Here we document the various API functions which deal with the SSL/TLS
connection defined in the <STRONG>SSL</STRONG> structure.

</P>
<DL>
<DT><STRONG>int <STRONG>SSL_accept</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_add_dir_cert_subjects_to_stack</STRONG>(STACK *stack, const char *dir);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_add_file_cert_subjects_to_stack</STRONG>(STACK *stack, const char *file);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_add_client_CA</STRONG>(SSL *ssl, X509 *x);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_alert_desc_string</STRONG>(int value);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_alert_desc_string_long</STRONG>(int value);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_alert_type_string</STRONG>(int value);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_alert_type_string_long</STRONG>(int value);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_check_private_key</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_clear</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_clear_num_renegotiations</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_connect</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_copy_session_id</STRONG>(SSL *t, const SSL *f);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_ctrl</STRONG>(SSL *ssl, int cmd, long larg, char *parg);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_do_handshake</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>SSL *<STRONG>SSL_dup</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>STACK *<STRONG>SSL_dup_CA_list</STRONG>(STACK *sk);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_free</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>SSL_CTX *<STRONG>SSL_get_SSL_CTX</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_app_data</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG><A NAME="item_X509">X509 *<STRONG>SSL_get_certificate</STRONG>(const SSL *ssl);</A></STRONG><DD>
<DT><STRONG>const char *<STRONG>SSL_get_cipher</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_cipher_bits</STRONG>(const SSL *ssl, int *alg_bits);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_cipher_list</STRONG>(const SSL *ssl, int n);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_cipher_name</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_cipher_version</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>STACK *<STRONG>SSL_get_ciphers</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>STACK *<STRONG>SSL_get_client_CA_list</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>SSL_CIPHER *<STRONG>SSL_get_current_cipher</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_get_default_timeout</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_error</STRONG>(const SSL *ssl, int i);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_ex_data</STRONG>(const SSL *ssl, int idx);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_ex_data_X509_STORE_CTX_idx</STRONG>(void);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_ex_new_index</STRONG>(long argl, char *argp, int (*new_func);(void), int (*dup_func)(void), void (*free_func)(void))</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_fd</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>void (*<STRONG>SSL_get_info_callback</STRONG>(const SSL *ssl);)()</STRONG><DD>
<DT><STRONG>STACK *<STRONG>SSL_get_peer_cert_chain</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>X509 *<STRONG>SSL_get_peer_certificate</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG><A NAME="item_EVP_PKEY">EVP_PKEY *<STRONG>SSL_get_privatekey</STRONG>(SSL *ssl);</A></STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_quiet_shutdown</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG><A NAME="item_BIO">BIO *<STRONG>SSL_get_rbio</STRONG>(const SSL *ssl);</A></STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_read_ahead</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>SSL_SESSION *<STRONG>SSL_get_session</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_shared_ciphers</STRONG>(const SSL *ssl, char *buf, int len);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_shutdown</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>const SSL_METHOD *<STRONG>SSL_get_ssl_method</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_state</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_get_time</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_get_timeout</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int (*<STRONG>SSL_get_verify_callback</STRONG>(const SSL *ssl))(int,X509_STORE_CTX *)</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_get_verify_mode</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_get_verify_result</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_get_version</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>BIO *<STRONG>SSL_get_wbio</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_in_accept_init</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_in_before</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_in_connect_init</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_in_init</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_is_init_finished</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>STACK *<STRONG>SSL_load_client_CA_file</STRONG>(char *file);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_load_error_strings</STRONG>(void);</STRONG><DD>
<DT><STRONG>SSL *<STRONG>SSL_new</STRONG>(SSL_CTX *ctx);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_num_renegotiations</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_peek</STRONG>(SSL *ssl, void *buf, int num);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_pending</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_read</STRONG>(SSL *ssl, void *buf, int num);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_renegotiate</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_rstate_string</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_rstate_string_long</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_session_reused</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_accept_state</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_app_data</STRONG>(SSL *ssl, char *arg);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_bio</STRONG>(SSL *ssl, BIO *rbio, BIO *wbio);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_cipher_list</STRONG>(SSL *ssl, char *str);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_client_CA_list</STRONG>(SSL *ssl, STACK *list);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_connect_state</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_ex_data</STRONG>(SSL *ssl, int idx, char *arg);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_fd</STRONG>(SSL *ssl, int fd);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_info_callback</STRONG>(SSL *ssl, void (*cb);(void))</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_msg_callback</STRONG>(SSL *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_msg_callback_arg</STRONG>(SSL *ctx, void *arg);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_options</STRONG>(SSL *ssl, unsigned long op);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_quiet_shutdown</STRONG>(SSL *ssl, int mode);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_read_ahead</STRONG>(SSL *ssl, int yes);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_rfd</STRONG>(SSL *ssl, int fd);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_session</STRONG>(SSL *ssl, SSL_SESSION *session);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_shutdown</STRONG>(SSL *ssl, int mode);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_ssl_method</STRONG>(SSL *ssl, const SSL_METHOD *meth);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_time</STRONG>(SSL *ssl, long t);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_timeout</STRONG>(SSL *ssl, long t);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_verify</STRONG>(SSL *ssl, int mode, int (*callback);(void))</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_verify_result</STRONG>(SSL *ssl, long arg);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_set_wfd</STRONG>(SSL *ssl, int fd);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_shutdown</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_state</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_state_string</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>char *<STRONG>SSL_state_string_long</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>long <STRONG>SSL_total_renegotiations</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_PrivateKey</STRONG>(SSL *ssl, EVP_PKEY *pkey);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_PrivateKey_ASN1</STRONG>(int type, SSL *ssl, unsigned char *d, long len);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_PrivateKey_file</STRONG>(SSL *ssl, char *file, int type);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_RSAPrivateKey</STRONG>(SSL *ssl, RSA *rsa);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_RSAPrivateKey_ASN1</STRONG>(SSL *ssl, unsigned char *d, long len);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_RSAPrivateKey_file</STRONG>(SSL *ssl, char *file, int type);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_certificate</STRONG>(SSL *ssl, X509 *x);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_certificate_ASN1</STRONG>(SSL *ssl, int len, unsigned char *d);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_certificate_file</STRONG>(SSL *ssl, char *file, int type);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_version</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_want</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_want_nothing</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_want_read</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_want_write</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_want_x509_lookup</STRONG>(const SSL *ssl);</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_write</STRONG>(SSL *ssl, const void *buf, int num);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_psk_client_callback</STRONG>(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));</STRONG><DD>
<DT><STRONG>int <STRONG>SSL_use_psk_identity_hint</STRONG>(SSL *ssl, const char *hint);</STRONG><DD>
<DT><STRONG>void <STRONG>SSL_set_psk_server_callback</STRONG>(SSL *ssl, unsigned int (*callback)(SSL *ssl, const char *identity, unsigned char *psk, int max_psk_len));</STRONG><DD>
<DT><STRONG>const char *<STRONG>SSL_get_psk_identity_hint</STRONG>(SSL *ssl);</STRONG><DD>
<DT><STRONG>const char *<STRONG>SSL_get_psk_identity</STRONG>(SSL *ssl);</STRONG><DD>
</DL>
<P>
<HR>
<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
<P>
<A HREF="../apps/openssl.html#">openssl(1)</A>, <A HREF="../crypto/crypto.html#">crypto(3)</A>,
<A HREF="../ssl/SSL_accept.html#">SSL_accept(3)</A>, <A HREF="../ssl/SSL_clear.html#">SSL_clear(3)</A>,
<A HREF="../ssl/SSL_connect.html#">SSL_connect(3)</A>,
<A HREF="../ssl/SSL_CIPHER_get_name.html#">SSL_CIPHER_get_name(3)</A>,
<A HREF="../ssl/SSL_COMP_add_compression_method.html#">SSL_COMP_add_compression_method(3)</A>,
<A HREF="../ssl/SSL_CTX_add_extra_chain_cert.html#">SSL_CTX_add_extra_chain_cert(3)</A>,
<A HREF="../ssl/SSL_CTX_add_session.html#">SSL_CTX_add_session(3)</A>,
<A HREF="../ssl/SSL_CTX_ctrl.html#">SSL_CTX_ctrl(3)</A>,
<A HREF="../ssl/SSL_CTX_flush_sessions.html#">SSL_CTX_flush_sessions(3)</A>,
<A HREF="../ssl/SSL_CTX_get_ex_new_index.html#">SSL_CTX_get_ex_new_index(3)</A>,
<A HREF="../ssl/SSL_CTX_get_verify_mode.html#">SSL_CTX_get_verify_mode(3)</A>,
<A HREF="../ssl/SSL_CTX_load_verify_locations.html#">SSL_CTX_load_verify_locations(3)</A>

<A HREF="../ssl/SSL_CTX_new.html#">SSL_CTX_new(3)</A>,
<A HREF="../ssl/SSL_CTX_sess_number.html#">SSL_CTX_sess_number(3)</A>,
<A HREF="../ssl/SSL_CTX_sess_set_cache_size.html#">SSL_CTX_sess_set_cache_size(3)</A>,
<A HREF="../ssl/SSL_CTX_sess_set_get_cb.html#">SSL_CTX_sess_set_get_cb(3)</A>,
<A HREF="../ssl/SSL_CTX_sessions.html#">SSL_CTX_sessions(3)</A>,
<A HREF="../ssl/SSL_CTX_set_cert_store.html#">SSL_CTX_set_cert_store(3)</A>,
<A HREF="../ssl/SSL_CTX_set_cert_verify_callback.html#">SSL_CTX_set_cert_verify_callback(3)</A>,
<A HREF="../ssl/SSL_CTX_set_cipher_list.html#">SSL_CTX_set_cipher_list(3)</A>,
<A HREF="../ssl/SSL_CTX_set_client_CA_list.html#">SSL_CTX_set_client_CA_list(3)</A>,
<A HREF="../ssl/SSL_CTX_set_client_cert_cb.html#">SSL_CTX_set_client_cert_cb(3)</A>,
<A HREF="../ssl/SSL_CTX_set_default_passwd_cb.html#">SSL_CTX_set_default_passwd_cb(3)</A>,
<A HREF="../ssl/SSL_CTX_set_generate_session_id.html#">SSL_CTX_set_generate_session_id(3)</A>,
<A HREF="../ssl/SSL_CTX_set_info_callback.html#">SSL_CTX_set_info_callback(3)</A>,
<A HREF="../ssl/SSL_CTX_set_max_cert_list.html#">SSL_CTX_set_max_cert_list(3)</A>,
<A HREF="../ssl/SSL_CTX_set_mode.html#">SSL_CTX_set_mode(3)</A>,
<A HREF="../ssl/SSL_CTX_set_msg_callback.html#">SSL_CTX_set_msg_callback(3)</A>,
<A HREF="../ssl/SSL_CTX_set_options.html#">SSL_CTX_set_options(3)</A>,
<A HREF="../ssl/SSL_CTX_set_quiet_shutdown.html#">SSL_CTX_set_quiet_shutdown(3)</A>,
<A HREF="../ssl/SSL_CTX_set_session_cache_mode.html#">SSL_CTX_set_session_cache_mode(3)</A>,
<A HREF="../ssl/SSL_CTX_set_session_id_context.html#">SSL_CTX_set_session_id_context(3)</A>,
<A HREF="../ssl/SSL_CTX_set_ssl_version.html#">SSL_CTX_set_ssl_version(3)</A>,
<A HREF="../ssl/SSL_CTX_set_timeout.html#">SSL_CTX_set_timeout(3)</A>,
<A HREF="../ssl/SSL_CTX_set_tmp_rsa_callback.html#">SSL_CTX_set_tmp_rsa_callback(3)</A>,
<A HREF="../ssl/SSL_CTX_set_tmp_dh_callback.html#">SSL_CTX_set_tmp_dh_callback(3)</A>,
<A HREF="../ssl/SSL_CTX_set_verify.html#">SSL_CTX_set_verify(3)</A>,
<A HREF="../ssl/SSL_CTX_use_certificate.html#">SSL_CTX_use_certificate(3)</A>,
<A HREF="../ssl/SSL_alert_type_string.html#">SSL_alert_type_string(3)</A>,
<A HREF="../ssl/SSL_do_handshake.html#">SSL_do_handshake(3)</A>,
<A HREF="../ssl/SSL_get_SSL_CTX.html#">SSL_get_SSL_CTX(3)</A>,
<A HREF="../ssl/SSL_get_ciphers.html#">SSL_get_ciphers(3)</A>,
<A HREF="../ssl/SSL_get_client_CA_list.html#">SSL_get_client_CA_list(3)</A>,
<A HREF="../ssl/SSL_get_default_timeout.html#">SSL_get_default_timeout(3)</A>,
<A HREF="../ssl/SSL_get_error.html#">SSL_get_error(3)</A>,
<A HREF="../ssl/SSL_get_ex_data_X509_STORE_CTX_idx.html#">SSL_get_ex_data_X509_STORE_CTX_idx(3)</A>,
<A HREF="../ssl/SSL_get_ex_new_index.html#">SSL_get_ex_new_index(3)</A>,
<A HREF="../ssl/SSL_get_fd.html#">SSL_get_fd(3)</A>,
<A HREF="../ssl/SSL_get_peer_cert_chain.html#">SSL_get_peer_cert_chain(3)</A>,
<A HREF="../ssl/SSL_get_rbio.html#">SSL_get_rbio(3)</A>,
<A HREF="../ssl/SSL_get_session.html#">SSL_get_session(3)</A>,
<A HREF="../ssl/SSL_get_verify_result.html#">SSL_get_verify_result(3)</A>,
<A HREF="../ssl/SSL_get_version.html#">SSL_get_version(3)</A>,
<A HREF="../ssl/SSL_library_init.html#">SSL_library_init(3)</A>,
<A HREF="../ssl/SSL_load_client_CA_file.html#">SSL_load_client_CA_file(3)</A>,
<A HREF="../ssl/SSL_new.html#">SSL_new(3)</A>,
<A HREF="../ssl/SSL_pending.html#">SSL_pending(3)</A>,
<A HREF="../ssl/SSL_read.html#">SSL_read(3)</A>,
<A HREF="../ssl/SSL_rstate_string.html#">SSL_rstate_string(3)</A>,
<A HREF="../ssl/SSL_session_reused.html#">SSL_session_reused(3)</A>,
<A HREF="../ssl/SSL_set_bio.html#">SSL_set_bio(3)</A>,
<A HREF="../ssl/SSL_set_connect_state.html#">SSL_set_connect_state(3)</A>,
<A HREF="../ssl/SSL_set_fd.html#">SSL_set_fd(3)</A>,
<A HREF="../ssl/SSL_set_session.html#">SSL_set_session(3)</A>,
<A HREF="../ssl/SSL_set_shutdown.html#">SSL_set_shutdown(3)</A>,
<A HREF="../ssl/SSL_shutdown.html#">SSL_shutdown(3)</A>,
<A HREF="../ssl/SSL_state_string.html#">SSL_state_string(3)</A>,
<A HREF="../ssl/SSL_want.html#">SSL_want(3)</A>,
<A HREF="../ssl/SSL_write.html#">SSL_write(3)</A>,
<A HREF="../ssl/SSL_SESSION_free.html#">SSL_SESSION_free(3)</A>,
<A HREF="../ssl/SSL_SESSION_get_ex_new_index.html#">SSL_SESSION_get_ex_new_index(3)</A>,
<A HREF="../ssl/SSL_SESSION_get_time.html#">SSL_SESSION_get_time(3)</A>,
<A HREF="../ssl/d2i_SSL_SESSION.html#">d2i_SSL_SESSION(3)</A>,
<A HREF="../ssl/SSL_CTX_set_psk_client_callback.html#">SSL_CTX_set_psk_client_callback(3)</A>,
<A HREF="../ssl/SSL_CTX_use_psk_identity_hint.html#">SSL_CTX_use_psk_identity_hint(3)</A>,
<A HREF="../ssl/SSL_get_psk_identity.html#">SSL_get_psk_identity(3)</A>



</P>
<P>
<HR>
<H1><A NAME="HISTORY">HISTORY</A></H1>
<P>
The <A HREF="../ssl/ssl.html#">ssl(3)</A> document appeared in OpenSSL 0.9.2

</P>
:}


