TLS-Handshakeprotokoll
Das TLS-Handshakeprotokoll ( Transport Layer Security ) ist für die Authentifizierung und den Schlüsselaustausch verantwortlich, die zum Einrichten oder Fortsetzen sicherer Sitzungen erforderlich sind. Beim Einrichten einer sicheren Sitzung verwaltet das Handshake-Protokoll Folgendes:
- Cipher Suite-Aushandlung
- Authentifizierung des Servers und optional des Clients
- Austausch von Sitzungsschlüsselinformationen.
Cipher Suite-Aushandlung
Der Client und der Server nehmen Kontakt auf und wählen die Verschlüsselungssammlung aus, die während des Nachrichtenaustauschs verwendet wird.
Authentifizierung
In TLS beweist ein Server seine Identität gegenüber dem Client. Möglicherweise muss der Client auch seine Identität gegenüber dem Server nachweisen. Die PKI, die Verwendung von Public/Private Key-Paaren, ist die Grundlage dieser Authentifizierung. Die genaue Methode, die für die Authentifizierung verwendet wird, wird durch die ausgehandelte Verschlüsselungssammlung bestimmt.
Schlüsselaustausch
Client und Server tauschen Zufallszahlen und eine spezielle Zahl aus, die als Pre-Master Secret bezeichnet wird. Diese Zahlen werden mit zusätzlichen Daten kombiniert, die es Client und Server erlauben, ihr gemeinsam genutztes Geheimnis zu erstellen, das als Geheimer Hauptschlüssel bezeichnet wird. Der geheime Hauptschlüssel wird von Client und Server verwendet, um den Schreib-MAC-Geheimschlüssel zu generieren, bei dem es sich um den sitzungsbasierten Schlüssel handelt, der für das Hashing verwendet wird, und den Schreibschlüssel , der für die Verschlüsselung verwendet wird.
Einrichten einer sicheren Sitzung mithilfe von TLS
Das TLS-Handshake-Protokoll umfasst die folgenden Schritte:
- Der Client sendet eine Nachricht vom Typ "Client hello" an den Server, zusammen mit dem zufälligen Wert des Clients und den unterstützten Verschlüsselungssammlungen.
- Der Server antwortet, indem er eine "Server hello"-Nachricht zusammen mit dem Zufallswert des Servers an den Client sendet.
- Der Server sendet sein Zertifikat zur Authentifizierung an den Client und kann vom Client ein Zertifikat anfordern. Der Server sendet die Meldung "Server hello done".
- Wenn der Server ein Zertifikat vom Client angefordert hat, sendet der Client es.
- Der Client erstellt ein zufälliges Pre-Master Secret und verschlüsselt es mit dem öffentlichen Schlüssel aus dem Serverzertifikat und sendet das verschlüsselte Pre-Master Secret an den Server.
- Der Server empfängt das Pre-Master-Geheimnis. Der Server und der Client generieren jeweils den geheimen Hauptschlüssel und die Sitzungsschlüssel basierend auf dem Pre-Master Secret.
- Der Client sendet die Benachrichtigung "Verschlüsselungsspezifikation ändern" an den Server, um anzugeben, dass der Client die neuen Sitzungsschlüssel zum Hashing und Verschlüsseln von Nachrichten verwendet. Der Client sendet auch die Meldung "Client finished".
- Der Server empfängt "Verschlüsselungsspezifikation ändern" und wechselt den Sicherheitsstatus der Datensatzebene mithilfe der Sitzungsschlüssel auf symmetrische Verschlüsselung. Der Server sendet die Meldung "Server abgeschlossen" an den Client.
- Client und Server können jetzt Anwendungsdaten über den gesicherten Kanal austauschen, den sie eingerichtet haben. Alle Nachrichten, die von Client zu Server und von Server zu Client gesendet werden, werden mit dem Sitzungsschlüssel verschlüsselt.
Fortsetzen einer sicheren Sitzung mithilfe von TLS
Der Client sendet eine Nachricht vom Typ "Client hello" mithilfe der Sitzungs-ID der sitzung, die fortgesetzt werden soll.
Der Server überprüft seinen Sitzungscache auf eine entsprechende Sitzungs-ID. Wenn eine Übereinstimmung gefunden wird und der Server die Sitzung fortsetzen kann, sendet er die Meldung "Server hello" mit der Sitzungs-ID.
Hinweis
Wenn keine Übereinstimmung mit der Sitzungs-ID gefunden wird, generiert der Server eine neue Sitzungs-ID, und der TLS-Client und -Server führen einen vollständigen Handshake aus.
Client und Server müssen Nachrichten vom Typ "Verschlüsselungsspezifikation ändern" austauschen und nachrichten vom Typ "Client abgeschlossen" und "Server abgeschlossen" senden.
Client und Server können jetzt den Austausch von Anwendungsdaten über den sicheren Kanal fortsetzen.