Provided by: manpages-fr-extra_20151231_all bug

NOM

       SSL_CTX_set_tlsext_ticket_key_cb - Définir un rappel pour le traitement de ticket de
       session

SYNOPSIS

        #include <openssl/tls1.h>

        long SSL_CTX_set_tlsext_ticket_key_cb(SSL_CTX sslctx,
               int (*cb)(SSL *s, unsigned char key_name[16],
                      unsigned char iv[EVP_MAX_IV_LENGTH],
                   EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc));

DESCRIPTION

       SSL_CTX_set_tlsext_ticket_key_cb() définit une fonction de rappel cb pour gérer les
       tickets de session pour le contexte SSL sslctx. Les tickets de session définis dans la
       RFC5077 procurent une amélioration de capacité de reprise de session là où
       l’implémentation du serveur ne requiert pas la conservation de l’état par session. Cela ne
       s’applique qu’à TLS et il n’existe pas d’implémentation pour SSLv3.

       Le rappel est disponible lorsque la bibliothèque OpenSSL a été construite sans que
       OPENSSL_NO_TLSEXT soit défini.

       La fonction de rappel cb sera appelée pour chaque client qui initie une session TLS
       lorsque l’extension de ticket de session est présentée dans le message « hello » de TLS.
       C’est la charge de cette fonction de créer ou d'extraire les paramètres de chiffrement et
       de conserver leur état.

       La bibliothèque OpenSSL utilise la fonction de rappel pour mettre en œuvre un état commun
       de construction de ticket selon la section 4 de la RFC5077, et est telle que l’état de
       session l’état est inutile et qu’un petit ensemble de variables de chiffrement doit être
       conservé par l’implémentation de la fonction de rappel.

       Pour réutiliser une session, un client TLS doit envoyer une extension de ticket de session
       au serveur. Le client ne peut envoyer qu’un seul ticket de session. Le serveur, à l’aide
       de la fonction de rappel, soit accepte de réutiliser les données du ticket de session,
       soit démarre une initialisation de connexion TLS complète pour créer un nouveau ticket de
       session.

       Avant d’utiliser la fonction de rappel, ctx et hctx sont initialisés avec respectivement
       EVP_CIPHER_CTX_init et HMAC_CTX_init.

       Pour les nouveaux tickets de session, quand le client n’en présente pas, qu'une recherche
       de ticket échoue, ou qu'un renouvellement d’option est présenté, la fonction de rappel
       sera demandée avec enc égal à 1. La bibliothèque OpenSSl demande que la fonction définisse
       un name arbitraire, initialise iv, et définisse le contexte du chiffrement ctx et le
       contexte du hachage hctx.

       Le name comporte 16 caractères et est utilisé comme clef d’identification.

       La longueur de iv est la longueur du vecteur d’initialisation de l’algorithme de
       chiffrement correspondant. La longueur maximale est EVP_MAX_IV_LENGTH octets définie dans
       evp.h.

       Le vecteur d’initialisation iv doit être une valeur aléatoire. Le contexte de chiffrement
       ctx doit utiliser le vecteur iv. Le contexte peut être défini en utilisant
       EVP_EncryptInit_ex. Le contexte HMAC peut l’être avec HMAC_Init_ex.

       Quand un client présente un ticket de session, la fonction de rappel sera appelée avec enc
       défini à 0, signifiant que la fonction cb doit retrouver un ensemble de paramètres. Dans
       ce cas, name et iv ont déjà été séparés du ticket de session. La bibliothèque OpenSSl
       s’attend à ce que name soit utilisé pour récupérer les paramètres de chiffrement et que le
       contexte de chiffrement ctx soit défini pour retrouver les paramètres et le vecteur
       d’initialisation iv, en utilisant une fonction telle que EVP_DecryptInit_ex. hctx doit
       être défini avec HMAC_Init_ex.

       Si name est toujours valable mais qu’un renouvellement du ticket est demandé, la fonction
       de rappel renverra 2. La bibliothèque appellera de nouveau le rappel avec un argument pour
       enc égal à 1 pour définir le nouveau ticket.

       La valeur de retour de la fonction cb est utilisée par OpenSSL pour déterminer quel est le
       traitement à venir. Les valeurs suivantes signifient :

       2   Cela indique que ctx et hctx ont été définis et que la session peut continuer avec ces
           paramètres. En plus, cela indique que le ticket de session est dans une période de
           renouvellement et devrait être renouvelé. La bibliothèque OpenSSL appellera de nouveau
           cb avec un argument enc de 1 pour définir le nouveau ticket (consultez la RFC5077 3.3,
           paragraphe 2).

       1   Cela indique que ctx et hctx ont été définis et que la session peut continuer avec ces
           paramètres.

       0   Cela indique qu’il n’a pas été possible de définir ou retrouver un ticket de session
           et que la session SSL/TLS continuera par une négociation d’un ensemble de paramètres
           de chiffrement ou en utilisant le mécanisme de reprise alternatif de SSL/TLS par
           identifiants de session.

           Si appelée avec enc égal 0, la bibliothèque appellera de nouveau cb pour obtenir un
           nouveau jeu de paramètres.

       inférieur à 0
           Cela indique une erreur.

NOTES

       La reprise de session court-circuite TLS de façon à ce que la négociation de certificat du
       client ne se produise pas. Pour cela, le certificat du client et toute autre information
       sur l’état de la négociation sont chiffrés dans le ticket. Dans une reprise de session,
       les applications auront toute l’information d’état disponible comme après une pleine
       négociation.

       Si un attaquant pouvait obtenir la clef utilisée pour chiffrer le ticket de session, il
       pourrait, pour tout ticket utilisant cette clef, obtenir la clef secrète maître et
       déchiffrer tous les messages émis par cette session, même si la suite de chiffrement prend
       en charge la confidentialité persistante. Par conséquent, les applications peuvent vouloir
       utiliser plusieurs clefs et éviter les clefs utilisées sur un long terme et stockées dans
       des fichiers.

       Les applications peuvent utiliser des clefs plus longues pour conserver un niveau de
       sécurité constant. Par exemple, si la suite de chiffrement est basée sur 256 bits mais que
       la clef du ticket est basée sur 128 bits, la sécurité d’ensemble est basée sur 128 bits
       car le cassage de la clef de ticket permettra à un attaquant d’obtenir les clefs de
       session.

EXEMPLES

       Implémentation de référence :
         SSL_CTX_set_tlsext_ticket_key_cb(SSL,ssl_tlsext_ticket_key_cb);
         ...

         static int ssl_tlsext_ticket_key_cb(SSL *s,
                                             unsigned char key_name[16],
                                             unsigned char *iv, EVP_CIPHER_CTX *ctx,
                                             HMAC_CTX *hctx, int enc)
         {
             if (enc) { /* créer une nouvelle session */
                 if (RAND_bytes(iv, EVP_MAX_IV_LENGTH) ) {
                     return -1; /* entropie insuffisante */
                 }

                 key = currentkey(); /* quelque chose à mettre en œuvre */
                 if ( !key ) {
                     /* la clef actuelle n’existe pas ou n’est pas valable */
                     key = createkey(); /* quelque chose à mettre en œuvre.
                                         * createkey doit initialiser un nom,
                                         * une clef AES, une clef HMAC et
                                         * peut-être une date limite. */
                     if ( !key ) { /* la clef n’a pu être créée */
                         return 0;
                     }
                 }
                 memcpy(key_name, key->name, 16);

                 EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
                                    key->aes_key, iv);
                 HMAC_Init_ex(&hctx, key->hmac_key, 16, EVP_sha256(), NULL);

                 return 1;

             } else { /* retrouver une session */
                 key = findkey(name);

                 if  (!key || key->expire < now() ) {
                     return 0;
                 }

                 HMAC_Init_ex(&hctx, key->hmac_key, 16, EVP_sha256(), NULL);
                 EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
                                    key->aes_key, iv);

                 if (key->expire < ( now() - RENEW_TIME ) ) {
                     /* return 2 ~ cette session doit obtenir un nouveau
                        ticket même si l’actuel est encore valable */
                     return 2;
                 }
                 return 1;

             }
         }

VALEURS DE RETOUR

       0 est renvoyé pour signifier qu’une fonction de rappel est définie.

VOIR AUSSI

       ssl(3), SSL_set_session(3), SSL_session_reused(3), SSL_CTX_add_session(3),
       SSL_CTX_sess_number(3), SSL_CTX_sess_set_get_cb(3), SSL_CTX_set_session_id_context(3),

HISTORIQUE

       Cette fonction a été introduite dans OpenSSL 0.9.8h

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.

1.0.2a 1.0.2c                               2015-1fr::ssl::SSL_CTX_set_tlsext_ticket_key_cb(3SSL)