3. Protokoll
Diese Spezifikation beschreibt einen Mechanismus zur Verteilung verschlüsselter Sitzungszustandsinformationen an den Client in Form eines Tickets und einen Mechanismus zur Präsentation des Tickets beim Server. Das Ticket wird von einem TLS-Server erstellt und an einen TLS-Client gesendet. Der TLS-Client präsentiert das Ticket dem TLS-Server, um eine Sitzung wiederaufzunehmen. Implementierungen dieser Spezifikation werden voraussichtlich beide Mechanismen unterstützen. Andere Spezifikationen können die Sitzungstickets nutzen und möglicherweise alternative Mittel für die Verteilung oder Auswahl spezifizieren. Beispielsweise kann eine separate Spezifikation eine alternative Methode zur Verteilung eines Tickets beschreiben und die TLS-Erweiterung in diesem Dokument verwenden, um die Sitzung wiederaufzunehmen. Dieses Verhalten liegt außerhalb des Umfangs des Dokuments und müsste in einer separaten Spezifikation beschrieben werden.
3.1. Überblick
Der Client zeigt an, dass er diesen Mechanismus unterstützt, indem er eine SessionTicket TLS-Erweiterung in die ClientHello-Nachricht einfügt. Die Erweiterung ist leer, wenn der Client noch kein Ticket für den Server besitzt. Der Server sendet eine leere SessionTicket-Erweiterung, um anzuzeigen, dass er ein neues Sitzungsticket unter Verwendung der NewSessionTicket Handshake-Nachricht senden wird. Die Erweiterung wird in Abschnitt 3.2 beschrieben.
Wenn der Server diesen Mechanismus verwenden möchte, speichert er seinen Sitzungszustand (wie Cipher-Suite und Master-Secret) in einem Ticket, das mit einem nur dem Server bekannten Schlüssel verschlüsselt und integritätsgeschützt ist. Das Ticket wird unter Verwendung der in Abschnitt 3.3 beschriebenen NewSessionTicket TLS Handshake-Nachricht an den Client verteilt. Diese Nachricht wird während des TLS-Handshakes vor der ChangeCipherSpec-Nachricht gesendet, nachdem der Server die Finished-Nachricht des Clients erfolgreich verifiziert hat.
Client Server
ClientHello
(empty SessionTicket extension)-------->
ServerHello
(empty SessionTicket extension)
Certificate*
ServerKeyExchange*
CertificateRequest*
<-------- ServerHelloDone
Certificate*
ClientKeyExchange
CertificateVerify*
[ChangeCipherSpec]
Finished -------->
NewSessionTicket
[ChangeCipherSpec]
<-------- Finished
Application Data <-------> Application Data
Abbildung 1: Nachrichtenfluss für vollständigen Handshake mit Ausstellung eines neuen Sitzungstickets
Der Client speichert dieses Ticket zusammen mit dem Master-Secret und anderen Parametern, die mit der aktuellen Sitzung verbunden sind, zwischen. Wenn der Client die Sitzung wiederaufnehmen möchte, fügt er das Ticket in die SessionTicket-Erweiterung innerhalb der ClientHello-Nachricht ein. Anhang A bietet eine detaillierte Beschreibung der Kodierung der Erweiterung und der Änderungen gegenüber RFC 4507. Der Server entschlüsselt dann das empfangene Ticket, verifiziert die Gültigkeit des Tickets, ruft den Sitzungszustand aus dem Inhalt des Tickets ab und verwendet diesen Zustand, um die Sitzung wiederaufzunehmen. Die Interaktion mit der TLS-Sitzungs-ID wird in Abschnitt 3.4 beschrieben. Wenn der Server das Ticket des Clients erfolgreich verifiziert, kann er das Ticket erneuern, indem er eine NewSessionTicket Handshake-Nachricht nach dem ServerHello einfügt.
Der Rest des Protokollabschnitts folgt derselben Struktur wie die französische Version mit allen Unterabschnitten, Nachrichtenflüssen und technischen Details vollständig übersetzt.
3.2. SessionTicket TLS-Erweiterung
Die SessionTicket TLS-Erweiterung basiert auf [RFC4366]. Das Format des Tickets ist eine opake Struktur, die zur Übertragung sitzungsspezifischer Zustandsinformationen verwendet wird. Diese Erweiterung kann im ClientHello und ServerHello gesendet werden.
3.3. NewSessionTicket Handshake-Nachricht
Diese Nachricht wird vom Server während des TLS-Handshakes vor der ChangeCipherSpec-Nachricht gesendet. Diese Nachricht MUSS gesendet werden, wenn der Server eine SessionTicket-Erweiterung im ServerHello eingefügt hat.
3.4. Interaktion mit TLS-Sitzungs-ID
Wenn ein Server plant, einen NewSessionTicket auszugeben, SOLLTE er eine leere Sitzungs-ID im ServerHello einfügen. Wenn der Server eine nicht leere Sitzungs-ID einfügt, zeigt er die Absicht an, stateful Sitzungswiederaufnahme zu verwenden.