Passa al contenuto principale

3.3. Messaggio di handshake NewSessionTicket

Questo messaggio è inviato dal server durante l'handshake TLS prima del messaggio ChangeCipherSpec. Questo messaggio DEVE (MUST) essere inviato se il server ha incluso un'estensione SessionTicket nel ServerHello. Questo messaggio NON DEVE (MUST NOT) essere inviato se il server non ha incluso un'estensione SessionTicket nel ServerHello. Questo messaggio è incluso nell'hash usato per creare e verificare il messaggio Finished. Nel caso di un handshake completo, il server DEVE (MUST) verificare il messaggio Finished del client prima di inviare il ticket. Il client NON DEVE (MUST NOT) considerare il ticket valido finché non ha verificato il messaggio Finished del server. Se il server determina che non vuole includere un ticket dopo aver incluso l'estensione SessionTicket nel ServerHello, invia un ticket di lunghezza zero nel messaggio di handshake NewSessionTicket.

Se il server verifica con successo il ticket del client, PUÒ (MAY) rinnovare il ticket includendo un messaggio di handshake NewSessionTicket dopo il ServerHello nell'handshake abbreviato. Il client dovrebbe iniziare a usare il nuovo ticket il prima possibile dopo aver verificato il messaggio Finished del server per le nuove connessioni. Si noti che, poiché il ticket aggiornato viene emesso prima che l'handshake sia completato, è possibile che il client non metta in uso il nuovo ticket prima di avviare nuove connessioni. Il server NON DEVE (MUST NOT) presumere che il client abbia effettivamente ricevuto il ticket aggiornato finché non ha verificato con successo il messaggio Finished del client.

Al messaggio di handshake NewSessionTicket è stato assegnato il numero 4 e la sua definizione è fornita alla fine di questa sezione. Il campo ticket_lifetime_hint contiene un suggerimento da parte del server su quanto a lungo il ticket debba essere memorizzato. Il valore indica la durata in secondi come numero intero senza segno a 32 bit in ordine di byte di rete rispetto al momento in cui il ticket viene ricevuto. Un valore pari a zero è riservato per indicare che la durata del ticket non è specificata. Un client DOVREBBE (SHOULD) eliminare il ticket e lo stato associato quando il tempo scade. PUÒ (MAY) eliminare il ticket prima in base alla politica locale. Un server PUÒ (MAY) considerare un ticket valido per un periodo di tempo più breve o più lungo di quanto indicato nel 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;