*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> SSL_CTX_need_tmp_rsa (3)              
Title
Content
Arch
Section
 

SSL_CTX_set_tmp_rsa_callback(3)

Contents


NAME    [Toc]    [Back]

       SSL_CTX_set_tmp_rsa_callback,         SSL_CTX_set_tmp_rsa,
       SSL_CTX_need_tmp_rsa,            SSL_set_tmp_rsa_callback,
       SSL_set_tmp_rsa,  SSL_need_tmp_rsa  -  Handle RSA keys for
       ephemeral key exchange

SYNOPSIS    [Toc]    [Back]

       #include <openssl/ssl.h>

       voidSSL_CTX_set_tmp_rsa_callback(
               SSL_CTX *ctx,
               RSA *(*cb)(SSL *ssl,
               int is_export,
               int keylength) ); long SSL_CTX_set_tmp_rsa(
               SSL_CTX*ctx,
               RSA *rsa ); long SSL_CTX_need_tmp_rsa(
               SSL_CTX ); voidSSL_set_tmp_rsa_callback(
               SSL_CTX *ctx,
               RSA *(*tmp_rsa_callback)(SSL *ssl,
               int is_export,
               int keylength) ); long SSL_set_tmp_rsa(
               SSL *ssl,
               RSA *rsa ); long SSL_need_tmp_rsa(
               SSL *ssl,
               RSA *(*tmp_rsa_callback)(SSL *ssl,
               int is_export,
               int keylength) );

DESCRIPTION    [Toc]    [Back]

       The SSL_CTX_set_tmp_rsa_callback() and function  sets  the
       callback  function  for  ctx  to  be  used  when  a temporary/ephemeral
 RSA key is required to  tmp_rsa_callback().
       The callback is inherited by all SSL objects newly created
       from ctx  with SSL_new().  Already created SSL objects are
       not affected.

       The   SSL_CTX_set_tmp_rsa()   function   sets  the  temporary/ephemeral
 RSA key to be used to be rsa.  The  key  is
       inherited  by  all SSL objects newly created from ctx with
       SSL_new. Already created SSL objects are not affected.

       The SSL_CTX_need_tmp_rsa() function returns 1 if a  temporary/ephemeral
  RSA key is needed for RSA-based, strengthlimited
 exportable ciphersuites because an RSA key with  a
       keysize larger than 512 bits is installed.

       The  SSL_set_tmp_rsa_callback() function sets the callback
       only for ssl.

       The SSL_set_tmp_rsa() function sets the key only for  ssl.

       The  SSL_need_tmp_rsa()  function  returns  1  if a temporary/ephemeral
 RSA key is  needed for RSA-based, strengthlimited
  exportable ciphersuites because an RSA key with a
       keysize larger than 512 bits is installed.

       These functions apply to SSL/TLS servers only.





NOTES    [Toc]    [Back]

       When using a cipher with RSA authentication, an  ephemeral
       RSA  key exchange can take place. In this case the session
       data are negotiated using the ephemeral/temporary RSA  key
       and  the RSA key supplied and certified by the certificate
       chain is only used for signing.

       Under previous export restrictions, ciphers with RSA  keys
       shorter  (512 bits) than the usual key length of 1024 bits
       were created. To use these ciphers with RSA keys of  usual
       length,  an  ephemeral  key exchange must be performed, as
       the normal (certified) key cannot be used directly.

       Using ephemeral RSA key exchange yields  forward  secrecy,
       as  the connection can only be decrypted, when the RSA key
       is known. By generating a temporary  RSA  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)
 RSA key, as this key was used for     signing  only.
       The  downside  is that creating an RSA key is computationally
 expensive.

       Additionally, the use of ephemeral  RSA  key  exchange  is
       only  allowed in the TLS standard, when the RSA key can be
       used for signing only, that is for export  ciphers.  Using
       ephemeral RSA key exchange for other purposes violates the
       standard and can break interoperability with clients.   We
       recommend  using  the  EDH  (Ephemeral Diffie-Hellman) key
       exchange instead of the  ephemeral  RSA  key  exchange  in
       order     to     achieve     forward     secrecy.     (See
       SSL_CTX_set_tmp_dh_callback().)

       On OpenSSL servers, ephemeral RSA key exchange is disabled
       by  default  and  must  be  explicitly  enabled  using the
       SSL_OP_EPHEMERAL_RSA option of SSL_CTX_set_options(), violating
  the  TLS/SSL  standard.  When  ephemeral  RSA  key
       exchange is required for export ciphers  it  automatically
       will be used without this option.

       An  application may either directly specify the key or can
       supply the key  via  a  callback  function.  The  callback
       approach  has the advantage that the callback may generate
       the key only in case it is actually  needed.  Because  the
       generation  of  an  RSA  key  is costly, it will lead to a
       significant delay in the handshake procedure.

       Another advantage of the callback function is that it  can
       supply     keys    of    different    size    (e.g.    for
       SSL_OP_EPHEMERAL_RSA usage) while the explicit setting  of
       the key is only useful for key size of 512 bits to satisfy
       the export restricted  ciphers  and  does  give  away  key
       length if a longer key would be allowed.

       The tmp_rsa_callback() is called with the keylength needed
       and the is_export information. The is_export flag is  set,
       when  the  ephemeral RSA key exchange is performed with an
       export cipher.







EXAMPLES    [Toc]    [Back]

       Generate temporary RSA keys to prepare ephemeral  RSA  key
       exchange.  As  the generation of an RSA key costs a lot of
       computer time, they are saved for later reuse.  For demonstration
  purposes,  two  keys  for 512 bits and 1024 bits
       respectively are generated.  ...

          /* Set up ephemeral RSA stuff */

          RSA *rsa_512 =3D NULL;

          RSA *rsa_1024 =3D NULL;



          rsa_512 =3D RSA_generate_key(512,RSA_F4,NULL,NULL);

          if (rsa_512 =3D=3D NULL)

              evaluate_error_queue();



          rsa_1024 =3D RSA_generate_key(1024,RSA_F4,NULL,NULL);

          if (rsa_1024 =3D=3D NULL)

            evaluate_error_queue();



          ...



          RSA  *tmp_rsa_callback(SSL  *s,  int   is_export,   int
       keylength)

          {

             RSA *rsa_tmp=3DNULL;



             switch (keylength) {

             case 512:

               if (rsa_512)

                 rsa_tmp =3D rsa_512;

               else  {  /* generate on the fly, should not happen
       in this example =

       */

                 rsa_tmp              =3D              RSA_generate_key(keylength,RSA_F4,NULL,NULL);


                 rsa_512 =3D rsa_tmp; /* Remember for later reuse
       */

               }

               break;

             case 1024:

               if (rsa_1024)

                 rsa_tmp=3Drsa_1024;

               else

                 should_not_happen_in_this_example();

               break;

             default:

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

       there */

               if (rsa_1024)

                 rsa_tmp=3Drsa_1024;

               else

                 rsa_tmp=3Drsa_512; /* Use at least a shorter key
       */

             }

             return(rsa_tmp);

          }




RETURN VALUES    [Toc]    [Back]

       The           SSL_CTX_set_tmp_rsa_callback()           and
       SSL_set_tmp_rsa_callback()  functions  do not return diagnostic
 output.

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

       The SSL_CTX_need_tmp_rsa() and  SSL_need_tmp_rsa()  funcitons
 return 1 if a temporary  RSA key is needed and 0 otherwise.

SEE ALSO    [Toc]    [Back]

      
      
       Commands: ciphers(1)

       Functions:       ssl(3),        SSL_CTX_set_cipher_list(3)
       ,SSL_CTX_set_options(3) , SSL_CTX_set_tmp_dh_callback(3),,
       SSL_new(3)



                                  SSL_CTX_set_tmp_rsa_callback(3)
[ Back ]
 Similar pages
Name OS Title
SSL_set_tmp_dh_callback OpenBSD handle DH keys for ephemeral key exchange
SSL_CTX_set_tmp_dh_callback Tru64 Handle DH keys for ephemeral key exchange
SSL_CTX_set_tmp_dh Tru64 Handle DH keys for ephemeral key exchange
SSL_set_tmp_dh_callback Tru64 Handle DH keys for ephemeral key exchange
SSL_set_tmp_dh Tru64 Handle DH keys for ephemeral key exchange
SSL_CTX_set_tmp_dh_callback NetBSD handle DH keys for ephemeral key exchange
SSL_set_tmp_dh OpenBSD handle DH keys for ephemeral key exchange
SSL_CTX_set_tmp_dh OpenBSD handle DH keys for ephemeral key exchange
SSL_CTX_set_tmp_dh_callback OpenBSD handle DH keys for ephemeral key exchange
st_addr_to_file Tru64 convert an address in an object to a file handle, procedure handle, line number, or symbol handle an...
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service