PKCS7_sign_add_signer() docs.
[openssl.git] / doc / ssl / SSL_CTX_set_tmp_dh_callback.pod
index 7ea4514a1976e473a25d4d57717fb0241913a5cc..29d1f8a6fbfe71bac84ae30bdc7bcec92f6d82f8 100644 (file)
@@ -29,17 +29,18 @@ The key is inherited by all B<ssl> objects created from B<ctx>.
 
 SSL_set_tmp_dh_callback() sets the callback only for B<ssl>.
 
-SSL_set_tmp_dh() sets the paramters only for B<ssl>.
+SSL_set_tmp_dh() sets the parameters only for B<ssl>.
 
 These functions apply to SSL/TLS servers only.
 
 =head1 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
-as anonymous ciphers. In this case the session data are negotiated using the
+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 connection
 can only be decrypted, when the DH key is known. By generating a temporary
@@ -49,26 +50,48 @@ 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 automatically
-generate the DH key when required, as it is computationally cheap
-(retrieve a random number). The server will reuse the DH key for further
-connections, unless the SSL_OP_SINGLE_DH_USE option of
-L<SSL_CTX_set_options(3)|SSL_CTX_set_options(3)> is set, in which case
-a new DH key for each negotiation will be generated.
+(DH parameters) and generate a DH key. The server will always generate a new
+DH key during the negotiation, when the DH parameters are supplied via
+callback and/or when the SSL_OP_SINGLE_DH_USE option of
+L<SSL_CTX_set_options(3)|SSL_CTX_set_options(3)> is set. It will
+immediately create a DH key, when DH parameters are supplied via
+SSL_CTX_set_tmp_dh() and SSL_OP_SINGLE_DH_USE is not set. In this case,
+it may happen that a key is generated 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 strictly
+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 (see especially
+the section about DSA parameters below), 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 computer time needed during negotiation, but it is not
+very large, so application authors/users should consider to always enable
+this option.
 
 As generating DH parameters is extremely time consuming, an application
 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. Therefore application authors
-should not copy the DH parameters from other applications or the OpenSSL
-example application, if they compile in parameters, but generate their
-own set of parameters using e.g. the openssl L<dhparam(1)|dhparam(1)>
-application with the B<-C> option. An application may also generate
-its own set of DH parameters during the installation procedure on a specific
-host, so that each host uses different parameters.
-
-An application my either directly specify the DH parameters or
+may specialize on a very often used DH group. Applications should therefore
+generate their own DH parameters during the installation process using the
+openssl L<dhparam(1)|dhparam(1)> application. In order to reduce the computer
+time needed for this generation, it is possible to use DSA parameters
+instead (see L<dhparam(1)|dhparam(1)>), but in this case SSL_OP_SINGLE_DH_USE
+is mandatory.
+
+Application authors may compile in DH parameters. Files dh512.pem,
+dh1024.pem, dh2048.pem, and dh4096 in the 'apps' directory of current
+version of the OpenSSL distribution contain the 'SKIP' DH parameters,
+which use safe primes and were generated verifiably pseudo-randomly.
+These files can be converted into C code using the B<-C> option of the
+L<dhparam(1)|dhparam(1)> application.
+Authors may also generate their own set of parameters using
+L<dhparam(1)|dhparam(1)>, but a user may not be sure how the parameters were
+generated. The generation of DH parameters during installation is therefore
+recommended.
+
+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 different
 key lengths.
@@ -140,6 +163,7 @@ on failure. Check the error queue to find out the reason of failure.
 =head1 SEE ALSO
 
 L<ssl(3)|ssl(3)>, L<SSL_CTX_set_cipher_list(3)|SSL_CTX_set_cipher_list(3)>,
+L<SSL_CTX_set_tmp_rsa_callback(3)|SSL_CTX_set_tmp_rsa_callback(3)>,
 L<SSL_CTX_set_options(3)|SSL_CTX_set_options(3)>,
 L<ciphers(1)|ciphers(1)>, L<dhparam(1)|dhparam(1)>