Rechnernetze
Home Nach oben

Das TLS-Handshake-Protokoll

TLS-Handshake-Protokoll  
besteht aus drei Unterprotokollen, mit denen die Kommunikationspartner
Sicherheitsparameter für das TLS-Record-Protokoll austauschen können,
sich selbst authentisieren können,
ausgehandelte Sicherheitsparameter instanzieren können,
Fehlermeldungen austauschen können.
Das Handshake-Protokoll handelt eines TLS-Sitzung aus, die durch folgende Parameter spezifiziert ist:
Sitzung-Identifizierung,
Zertifizierung der Gegenstelle,
Kompressions-Methode,
Cipher-Spec legt die verwendeten Chiffren fest,
Master-Secret zur Schlüsselberechnung,
Fortsetzungsflag, um neue TLS-Sitzungen zu kreieren.
Change-Cipher-Spec-Protokoll  
Änderung in der Verschlüsselungsstrategie, 
z.B. um Verschlüsselungsverfahren zu ändern 
andere Schlüssel verwenden
beim Handshake-Verfahren zur Aufnahme der Datenübertragung 
Change-Cipher-Spec-Nachricht 
bewirkt beim Empfänger Kopieren der aktuellen Pending-State-Parameter in Current-State
Alert-Protokoll  
sendet im Fehlerfall Warnung an Gegenstelle
Art und Schwere des Fehlers dargestellt 
"Fatale" Fehler führen zu Abbruch der Verbindung
andere Sitzungen dürfen fortgesetzt werden 
Sitzungsidentifikator (session identifier) muss ungültig gemacht werden
Alert-Nachrichten werden verschlüsselt und komprimiert übertragen
Closure-Alert  
garantiert ordnungsgemäßen Abbruch einer Verbindung 
kein Angriff durch nicht beendete Sitzungen (truncation attack). 
Closure-Alert kann jeder Teilnehmer jederzeit auslösen, ehe er Sitzung beendet
auslösender Teilnehmer braucht nicht auf entsprechende Antwort der Gegenstelle zu warten
Ein Fehler-Alert kann folgende Nachrichten beinhalten:
unexpected_message
bad_record_mac
decryption_failed
record_overflow
decompression_failure
handshake_failure
bad_certificate
unsupported_certificate
certificate_revoked
certificate_expired
certificate_unknown
illegal_parameter
unknown_ca
access_denied
decode_error
decrypt_error
export_restriction
protocol_version
insufficient_security
internal_error
user_canceled
no_renegotiation
Einige dieser Nachrichten legen die schwere des Fehlers fest
z.B. bad_record_mac ist stets fatal
andere lassen dem Sender die Möglichkeit, diese selbst zu bestimmen
TLS-Handshake-Protokoll dient dem Aushandeln der o.g. Sicherheits-Parameter einer Verbindung. 
arbeitet oberhalb des TLS-Record-Layers 
besteht aus folgenden Schritten:
In Hello-Nachrichten wird sich 
über Algorithmen geeinigt und 
Zufallszahlen ausgetauscht.
Danach wird ein Premaster-Secret vereinbart.
Client und Server können sich gegeneinander authentifizieren.
Danach wird aus dem Master-Secret ein Premaster-Secret abgeleitet.
Dem Record-Layer werden Sicherheitsparameter übergeben.
Client und Server können sich vergewissern, dass 
Gegenstelle die gleichen Sicherheitsparameter verwendet 
kein Angreifer in Handshake eingemischt hat
Angreifer kann u.U. erreichen, dass 
zwei Kommunikationspartner geringste Sicherheitsstufe aushandeln, 
beispielsweise Port blockiert oder 
unauthentifizierte Verbindungen aufbaut 
die Anwendungsschichten sollten über ausgehandelte Sicherheitsstufe informiert werden
Der Standard empfiehlt ausdrücklich, 
Daten nicht über 40 Bit Schlüssel- Algorithmen zu versenden 
wenn für Benutzer entsprechenden Wert darstellen
Das TLS-Protokoll soll diese Sicherheitsanforderungen unterstützen. 
Um Verbindung aufzunehmen, 
sendet Client ein "client hello"-Nachricht an Server, 
Server antwortet mit "server hello"-Nachricht (andernfalls fataler Fehler)
In diesen Nachrichten werden Security-Parameter ausgetauscht.

Handshake Protocol overview

Mit ? versehene Nachrichten gesendet
nur optional oder 
unter bestimmten Umständen
Nach Hallo-Nachrichten die Zertifikate ausgetauscht
um sich gegenseitig zu identifizieren. 
"Laden" des Current-State (ChangeCipherSpec) startet gesicherte Verbindung
Verbindung wiederaufnehmen oder 
kopieren (mit gleichen Parametern neue Verbindung aufnehmen), 
so wird das folgende Protokoll verwendet: