SSL_CTX_set_tmp_dh_callback man page on DigitalUNIX

Man page or keyword search:  
man Server   12896 pages
apropos Keyword Search (all sections)
Output format
DigitalUNIX logo
[printable version]

SSL_CTX_set_tmp_dh_callback(3)			SSL_CTX_set_tmp_dh_callback(3)

NAME
       SSL_CTX_set_tmp_dh_callback,  SSL_CTX_set_tmp_dh,  SSL_set_tmp_dh_call‐
       back, SSL_set_tmp_dh - Handle DH keys for ephemeral key exchange

SYNOPSIS
       #include <openssl/ssl.h>

       void SSL_CTX_set_tmp_dh_callback(
	       SSL_CTX *ctx,
	       DH *(*tmp_dh_callback)(SSL *ssl,
	       int is_export,
	       int keylength) );

       ); long SSL_CTX_set_tmp_dh(
	       SSL_CTX *ctx,
	       DH *dh ); void SSL_set_tmp_dh_callback(
	       SSL_CTX *ctx,
	       DH *(*tmp_dh_callback)(SSL *ssl,
	       int is_export,
	       int keylength) ); long SSL_set_tmp_dh(
	       SSL *ssl,
	       DH *dh),
	       DH *(*tmp_dh_callback)(SSL *ssl,
	       int is_export,
	       int keylength) );

DESCRIPTION
       The SSL_CTX_set_tmp_dh_callback() function sets the  callback  function
       for  ctx to be used when DH parameters are required to tmp_dh_callback.
       The callback is inherited by all ssl objects created from ctx.

       The SSL_CTX_set_tmp_dh() function sets DH parameters to be used	to  be
       dh.  The	 key  is  inherited  by	 all ssl objects created from ctx. The
       SSL_set_tmp_dh_callback() function sets the callback only for ssl.

       The SSL_set_tmp_dh() function sets the parameters only for ssl.

       These functions apply to SSL/TLS servers only.

NOTES
       When using a cipher  with  RSA  authentication,	an  ephemeral  DH  key
       exchange	 can take place. Ciphers with DSA keys always use ephemeral DH
       keys as well.  In these cases, the session data	are  negotiated	 using
       the   ephemeral/temporary  DH key and the key supplied and certified by
       the certificate chain is	 only  used  for  signing.  Anonymous  ciphers
       (without a permanent server key) also use ephemeral DH keys.

       Using  ephemeral DH key exchange yields forward secrecy, as the connec‐
       tion can only be decrypted, when the DH key is known. By	 generating  a
       temporary  DH  key  inside the server application that is lost when the
       application is left, it becomes impossible for an attacker  to  decrypt
       past  sessions,	even if he gets hold of the normal (certified) key, as
       this key was only used for signing.

       In order to perform a DH key exchange the server must use  a  DH	 group
       (DH  parameters) and generate a DH key. The server will always generate
       a new DH key during the negotiation, when the DH parameters  are	  sup‐
       plied  via  callback  and/or  when  the	SSL_OP_SINGLE_DH_USE option of
       SSL_CTX_set_options() is set. It will immediately create a DH key, when
       DH  parameters  are  supplied  via SSL_CTX_set_tmp_dh() and SSL_OP_SIN‐
       GLE_DH_USE is not set. In this case, it may happen that a key is gener‐
       ated  on	 initialization without later being needed, while on the other
       hand the computer time during the negotiation is being saved.

       If strong primes were used to generate the DH  parameters,  it  is  not
       necessary to generate a new key for each handshake, but it does improve
       forward secrecy. If it is not assured that  strong  primes  were	 used,
       SSL_OP_SINGLE_DH_USE  must  be  used in order to prevent small subgroup
       attacks. Always using SSL_OP_SINGLE_DH_USE has an impact	 on  the  com‐
       puter  time  needed  during  negotiation. Because it is not very large,
       application authors and users  should  consider	always	enabling  this
       option.

       Because generating DH parameters is extremely time consuming, an appli‐
       cation should not generate the parameters on the	 fly  but  supply  the
       parameters.  DH	parameters  can	 be reused, as the actual key is newly
       generated during the negotiation. The risk in reusing DH parameters  is
       that an attacker may specialize on a very often used DH group. Applica‐
       tions should therefore generate their  own  DH  parameters  during  the
       installation process using the openssl dhparam(1) application. In order
       to reduce the computer time needed for this generation, it is  possible
       to  use	DSA  parameters	 instead  (see	dhparam(1)),  but in this case
       SSL_OP_SINGLE_DH_USE is mandatory.

       Application authors can compile	in  DH	parameters.  Files  dh512.pem,
       dh1024.pem,  dh2048.pem, and dh4096 in the 'apps' directory of the cur‐
       rent version of the OpenSSL distribution contain the 'SKIP' DH  parame‐
       ters,   which use safe primes and were generated verifiably pseudo-ran‐
       domly. These files can be converted into C code using the -C option  of
       the  dhparam  application.  Authors  may also generate their own set of
       parameters using dhparam, but a user may not be sure how the parameters
       were  generated.	  We  recommend the generation of DH parameters during
       installation.

       An application may either directly specify the  DH  parameters  or  can
       supply the DH parameters via a callback function. The callback approach
       has the advantage that the callback may supply DH parameters for	  dif‐
       ferent key lengths.

       The  tmp_dh_callback  is	 called	 with  the  keylength  needed  and the
       is_export information. The is_export option is set when	the  ephemeral
       DH key exchange is performed with an export cipher.

RETURN VALUES
       The  SSL_CTX_set_tmp_dh_callback()  and SSL_set_tmp_dh_callback() func‐
       tions do not return diagnostic output.

       The SSL_CTX_set_tmp_dh() and SSL_set_tmp_dh()  functions	 return	 1  on
       success	and 0 on failure. Check the error queue to find out the reason
       of failure.

EXAMPLES
       Handle DH parameters for key lengths of 512 and 1024 bits  (error  han‐
       dling partly left out): ...  /* Set up ephemeral DH stuff */ DH *dh_512
       = NULL; DH *dh_1024 = NULL; FILE *paramfile; ...	 /*  "openssl  dhparam
       -out dh_param_512.pem -2 512" */

	  paramfile =3D fopen("dh_param_512.pem", "r");

	  if (paramfile) {

	    dh_512 =3D PEM_read_DHparams(paramfile, NULL, NULL, NULL);

	    fclose(paramfile);

	  }

	  /* "openssl dhparam -out dh_param_1024.pem -2 1024" */

	  paramfile =3D fopen("dh_param_1024.pem", "r");

	  if (paramfile) {

	    dh_1024 =3D PEM_read_DHparams(paramfile, NULL, NULL, NULL);

	    fclose(paramfile);

	  }

	  ...

	  /* "openssl dhparam -C -2 512" etc... */

	  DH *get_dh512() { ... }

	  DH *get_dh1024() { ... }

	  DH *tmp_dh_callback(SSL *s, int is_export, int keylength)

	  {

	     DH *dh_tmp=3DNULL;

	     switch (keylength) {

	     case 512:

	       if (!dh_512)

		 dh_512 =3D get_dh512();

	       dh_tmp =3D dh_512;

	       break;

	     case 1024:

	       if (!dh_1024)

		 dh_1024 =3D get_dh1024();

	       dh_tmp =3D dh_1024;

	       break;

	     default:

	       /* Generating a key on the fly is very costly, so use what is =

       there */

	       setup_dh_parameters_like_above();

	     }

	     return(dh_tmp);

	  } }

SEE ALSO
       Files: ciphers(1) dhparam(1)

       Functions:  ssl(3) SSL_CTX_set_cipher_list(3) SSL_CTX_set_tmp_rsa_call‐
       back(3) SSL_CTX_set_options(3)

						SSL_CTX_set_tmp_dh_callback(3)
[top]

List of man pages available for DigitalUNIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net