Scroll to navigation

fr::ssl::SSL_CTX_set_tmp_dh_callback(3SSL) OpenSSL fr::ssl::SSL_CTX_set_tmp_dh_callback(3SSL)
 

NOM

SSL_CTX_set_tmp_dh_callback, SSL_CTX_set_tmp_dh, SSL_set_tmp_dh_callback, SSL_set_tmp_dh - Gérer les clefs DH pour l’échange de clefs éphémères

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 taille_clef);
long SSL_CTX_set_tmp_dh(SSL_CTX *ctx, DH *dh);
void SSL_set_tmp_dh_callback(SSL *ctx,
DH *(*tmp_dh_callback)(SSL *ssl, int is_export ,
int taille_clef));
long SSL_set_tmp_dh(SSL *ssl, DH *dh)

DESCRIPTION

SSL_CTX_set_tmp_dh_callback() définit la fonction de rappel à utiliser pour ctx lorsqu’un paramètre DH est nécessaire pour tmp_dh_callback. Tous les objets ssl créés à partir de ctx héritent du rappel.
SSL_CTX_set_tmp_dh() définit les paramètres DH à utiliser à dh. Tous les objets ssl créés à partir de ctx héritent de la clef.
SSL_set_tmp_dh_callback() définit le rappel seulement pour ssl.
SSL_set_tmp_dh() définit les paramètres seulement pour ssl.
Ces fonctions sont applicables aux serveurs SSL/TLS uniquement.

NOTES

Lors de l’utilisation d’un algorithme de chiffrement avec authentification RSA, un échange de clefs éphémères DH peut survenir. Les algorithmes avec clefs DSA utilisent toujours des clefs éphémères DH. Dans ces cas, les données de session sont négociées en utilisant une clef éphémère/temporaire DH et la clef fournie et authentifiée par la chaîne de certificats est utilisée uniquement pour la signature. Les algorithmes anonymes (sans serveur permanent de clefs) utilisent aussi les clefs éphémères DH.
L’usage de clef éphémère DH rend la confidentialité persistante, car la connexion ne peut être déchiffrée que lorsque la clef DH est connue. En créant une clef DH éphémère uniquement pendant la durée de la mise en œuvre du serveur, un attaquant ne peut absolument pas déchiffrer des sessions terminées même s’il se procure une clef conforme (certifiée), puisque la clef n’a été utilisée que pour la signature.
Pour réaliser l’échange de clefs DH, le serveur doit utiliser un ensemble DH (paramètres DH) et créer une clef DH. Durant la négociation, le serveur générera toujours une nouvelle clef DH si les paramètres DH sont fournis à l’aide du rappel ou si l’option SSL_OP_SINGLE_DH_USE de SSL_CTX_set_options(3) est définie (ou les deux). Le serveur créera immédiatement une clef DH si les paramètres DH sont fournis à l’aide de SSL_CTX_set_tmp_dh() et que SSL_OP_SINGLE_DH_USE n’est pas définie. Dans ce cas, une clef peut être créée lors d’une initialisation et n’être jamais nécessaire, quoique d’un autre coté, le temps de calcul pendant la négociation est économisé.
Si des nombres premiers « forts » sont utilisés pour générer les paramètres DH, créer une nouvelle clef n’est pas strictement nécessaire à chaque initialisation de connexion mais cela améliore la confidentialité persistante. Si l’utilisation de nombres premiers « forts » n’est pas sûre, (consultez particulièrement la section ci-dessous à propos des paramètres DSA), SSL_OP_SINGLE_DH_USE doit être utilisée pour empêcher les attaques par sous-groupes. L’utilisation de SSL_OP_SINGLE_DH_USE a toujours des incidences sur le temps de calcul nécessaire à la négociation, mais ce n’est pas très important et les créateurs ou utilisateurs devraient toujours activer cette option.
Comme le temps pour générer les paramètres DH est extrêmement long, les applications ne devraient pas les créer à la volée mais les fournir. Ces paramètres DH peuvent être réutilisés puisque la clef effective est fraichement créée durant la négociation. Le risque de la réutilisation est qu’un attaquant pourrait se focaliser sur un groupe DH très souvent utilisé. Les applications devraient donc créer leurs propres paramètres DH durant le processus d’installation en utilisant la fonction d’OpenSSL dhparam(1). Dans le but de réduire le temps de calcul nécessaire, les paramètres DSA peuvent être utilisés à la place (consultez dhparam(1)), mais dans ce cas SSL_OP_SINGLE_DH_USE est obligatoire.
Les créateurs d’application peuvent compiler avec les paramètres DH. Les fichiers dh512.pem, dh1024.pem, dh2048.pem, et dh4096.pem dans le répertoire « apps » de l’actuelle distribution d’OpenSSL contenant le paramètre DH « SKIP », celui-ci utilisant des nombres premiers sûrs et, d’une manière vérifiable, générés de manière pseudo-aléatoire. Ces fichiers peuvent être convertis en code C avec l’option -C de la fonction dhparam(1). Les créateurs peuvent aussi générer leur propre jeu de paramètres en utilisant dhparam(1), mais un utilisateur ne sera jamais certain de la manière dont ces paramètres ont été créés. La création des paramètres DH lors de l’installation est donc recommandée.
Une application peut soit indiquer les paramètres DH, soit les fournir avec une fonction de rappel. La méthode avec rappel a l’avantage que le rappel peut fournir ces paramètres pour différentes longueurs de clef.
tmp_dh_callback est appelée avec la taille_clef désirée et l’information is_export. L’attribut is_export est activé lors de l’échange de clefs éphémères DH est réalisé avec un algorithme de chiffrement pour l’export.

EXEMPLES

Prise en charge des paramètres DH pour des longueurs de clef de 512 et 1024 bits. (la gestion des erreurs est délaissée).
 ...
 /* Définir ce qui concerne DH éphémère */
 DH *dh_512 = NULL;
 DH *dh_1024 = NULL;
 FILE *<fich_param>;
 ...
 /* "openssl dhparam -out dh_param_512.pem -2 512" */
 I<fich_param> = fopen("dh_param_512.pem", "r");
 if (I<fich_param>) {
   dh_512 = PEM_read_DHparams(I<fich_param>, NULL, NULL, NULL);
   fclose(I<fich_param>);
 }
 /* "openssl dhparam -out dh_param_1024.pem -2 1024" */
 I<fich_param> = fopen("dh_param_1024.pem", "r");
 if (I<fich_param>) {
   dh_1024 = PEM_read_DHparams(I<fich_param>, NULL, NULL, NULL);
   fclose(I<fich_param>);
 }
 ...
 /* "openssl dhparam -C -2 512" etc. */
 DH *get_dh512() { ... }
 DH *get_dh1024() { ... }
 DH *tmp_dh_callback(SSL *s, int is_export, int taille_clef)
 {
    DH *dh_tmp=NULL;
    switch (taille_clef) {
    case 512:
      if (!dh_512)
        dh_512 = get_dh512();
      dh_tmp = dh_512;
      break;
    case 1024:
      if (!dh_1024)
        dh_1024 = get_dh1024();
      dh_tmp = dh_1024;
      break;
    default:
      /* Créer une clef à la volée est très cher, aussi utilisez ceci */
      setup_dh_parameters_like_above();
    }
    return(dh_tmp);
 }

VALEURS DE RETOUR

SSL_CTX_set_tmp_dh_callback() et SSL_set_tmp_dh_callback() ne renvoient pas d’information de diagnostic.
SSL_CTX_set_tmp_dh() et SSL_set_tmp_dh() renvoient 1 en cas de réussite et 0 en cas d’échec.

VOIR AUSSI

ssl(3), SSL_CTX_set_cipher_list(3), SSL_CTX_set_tmp_rsa_callback(3), SSL_CTX_set_options(3), ciphers(1), dhparam(1)

TRADUCTION

La traduction de cette page de manuel est maintenue par les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.
2015-01-30 1.0.1k