Aller au contenu principal

3.3. Message de handshake NewSessionTicket

Ce message est envoyé par le serveur pendant le handshake TLS avant le message ChangeCipherSpec. Ce message DOIT (MUST) être envoyé si le serveur a inclus une extension SessionTicket dans le ServerHello. Ce message NE DOIT PAS (MUST NOT) être envoyé si le serveur n'a pas inclus d'extension SessionTicket dans le ServerHello. Ce message est inclus dans le hachage utilisé pour créer et vérifier le message Finished. Dans le cas d'un handshake complet, le serveur DOIT (MUST) vérifier le message Finished du client avant d'envoyer le ticket. Le client NE DOIT PAS (MUST NOT) considérer le ticket comme valide tant qu'il n'a pas vérifié le message Finished du serveur. Si le serveur détermine qu'il ne souhaite pas inclure de ticket après avoir inclus l'extension SessionTicket dans le ServerHello, il envoie alors un ticket de longueur nulle dans le message de handshake NewSessionTicket.

Si le serveur vérifie avec succès le ticket du client, il PEUT (MAY) alors renouveler le ticket en incluant un message de handshake NewSessionTicket après le ServerHello dans le handshake abrégé. Le client devrait commencer à utiliser le nouveau ticket dès que possible après avoir vérifié le message Finished du serveur pour les nouvelles connexions. Notez que, comme le ticket mis à jour est émis avant la fin du handshake, il est possible que le client ne mette pas le nouveau ticket en service avant d'initier de nouvelles connexions. Le serveur NE DOIT PAS (MUST NOT) supposer que le client a réellement reçu le ticket mis à jour tant qu'il n'a pas vérifié avec succès le message Finished du client.

Le message de handshake NewSessionTicket s'est vu attribuer le numéro 4 et sa définition est donnée à la fin de cette section. Le champ ticket_lifetime_hint contient une indication du serveur sur la durée pendant laquelle le ticket devrait être stocké. La valeur indique la durée de vie en secondes sous la forme d'un entier non signé de 32 bits en ordre d'octets réseau, par rapport au moment de la réception du ticket. La valeur zéro est réservée pour indiquer que la durée de vie du ticket n'est pas spécifiée. Un client DEVRAIT (SHOULD) supprimer le ticket et l'état associé lorsque le délai expire. Il PEUT (MAY) supprimer le ticket plus tôt en fonction de sa politique locale. Un serveur PEUT (MAY) considérer un ticket comme valide pendant une période plus courte ou plus longue que celle indiquée dans ticket_lifetime_hint.

   struct {
HandshakeType msg_type;
uint24 length;
select (HandshakeType) {
case hello_request: HelloRequest;
case client_hello: ClientHello;
case server_hello: ServerHello;
case certificate: Certificate;
case server_key_exchange: ServerKeyExchange;
case certificate_request: CertificateRequest;
case server_hello_done: ServerHelloDone;
case certificate_verify: CertificateVerify;
case client_key_exchange: ClientKeyExchange;
case finished: Finished;
case session_ticket: NewSessionTicket; /* NEW */
} body;
} Handshake;
   struct {
uint32 ticket_lifetime_hint;
opaque ticket<0..2^16-1>;
} NewSessionTicket;