Zum Hauptinhalt springen

3.3. NewSessionTicket Handshake-Nachricht

Diese Nachricht wird vom Server während des TLS-Handshakes vor der ChangeCipherSpec-Nachricht gesendet. Diese Nachricht MUSS (MUST) gesendet werden, wenn der Server eine SessionTicket-Erweiterung in das ServerHello aufgenommen hat. Diese Nachricht DARF NICHT (MUST NOT) gesendet werden, wenn der Server keine SessionTicket-Erweiterung in das ServerHello aufgenommen hat. Diese Nachricht ist im Hash enthalten, der zum Erstellen und Verifizieren der Finished-Nachricht verwendet wird. Im Fall eines vollständigen Handshakes MUSS (MUST) der Server die Finished-Nachricht des Clients verifizieren, bevor er das Ticket sendet. Der Client DARF NICHT (MUST NOT) das Ticket als gültig behandeln, bis er die Finished-Nachricht des Servers verifiziert hat. Wenn der Server feststellt, dass er kein Ticket aufnehmen möchte, nachdem er die SessionTicket-Erweiterung in das ServerHello aufgenommen hat, dann sendet er ein Ticket der Länge null in der NewSessionTicket-Handshake-Nachricht.

Wenn der Server das Ticket des Clients erfolgreich verifiziert, dann KANN (MAY) er das Ticket erneuern, indem er im verkürzten Handshake nach dem ServerHello eine NewSessionTicket-Handshake-Nachricht aufnimmt. Der Client sollte das neue Ticket so bald wie möglich verwenden, nachdem er die Finished-Nachricht des Servers für neue Verbindungen verifiziert hat. Beachten Sie, dass, da das aktualisierte Ticket ausgegeben wird, bevor der Handshake abgeschlossen ist, es möglich ist, dass der Client das neue Ticket nicht in Gebrauch nimmt, bevor er neue Verbindungen initiiert. Der Server DARF NICHT (MUST NOT) annehmen, dass der Client das aktualisierte Ticket tatsächlich erhalten hat, bis er die Finished-Nachricht des Clients erfolgreich verifiziert hat.

Der NewSessionTicket-Handshake-Nachricht wurde die Nummer 4 zugewiesen, und ihre Definition ist am Ende dieses Abschnitts angegeben. Das Feld ticket_lifetime_hint enthält einen Hinweis vom Server darüber, wie lange das Ticket gespeichert werden sollte. Der Wert gibt die Lebensdauer in Sekunden als 32-Bit-Ganzzahl ohne Vorzeichen in Netzwerk-Byte-Reihenfolge relativ zum Zeitpunkt des Empfangs des Tickets an. Ein Wert von null ist reserviert, um anzuzeigen, dass die Lebensdauer des Tickets nicht spezifiziert ist. Ein Client SOLLTE (SHOULD) das Ticket und den zugehörigen Zustand löschen, wenn die Zeit abläuft. Er KANN (MAY) das Ticket früher basierend auf der lokalen Richtlinie löschen. Ein Server KANN (MAY) ein Ticket für einen kürzeren oder längeren Zeitraum als im ticket_lifetime_hint angegeben als gültig behandeln.

   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;