Einleitung
In diesem Dokument wird die TLS-Sitzungswiederaufnahme (Transport Layer Security) in der Cisco Identity Services Engine (ISE) beschrieben.
Voraussetzungen
Anforderungen
- Kenntnis des TLS-Handshake-Prozesses (Transport Layer Security)
- Kenntnis des PEAP-Datenflusses (Protected Extensible Authentication Protocol)
- Kenntnisse der Cisco Identity Services Engine
Verwendete Komponenten
Die Informationen in diesem Dokument basierend auf folgenden Software- und Hardware-Versionen
- Cisco Identity Services Engine 3.2
- Virtuelles System der ISE (VM)
- Windows 10-PC
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.
Hintergrundinformationen
Die TLS-Sitzungswiederaufnahme ist eine Technik, die verwendet wird, um den Overhead des ursprünglichen TLS-Handshakes zu eliminieren. Sie ermöglicht es einem Client und Server, die zuvor eine TLS-Sitzung eingerichtet haben, diese Sitzung fortzusetzen, ohne den ressourcenintensiven Handshake-Prozess zu wiederholen.
Vorteile
- Es reduziert die Latenz, indem es die ressourcenintensiven Schritte des ersten Handshakes und die dafür erforderliche Zeit vermeidet.
- Außerdem wird die Rechenlast auf dem Server verringert, da die aufwändigen Prozesse für den Schlüsselaustausch und die Zertifikatsvalidierung übersprungen werden.
Konfigurieren
Setzen Sie die TLS-Sitzung auf der ISE für PEAP fort:
Administration > System > Einstellungen > Protokolle > PEAP > überprüfen Sie die Option PEAP-Sitzungswiederaufnahme aktivieren.
Standardmäßig wird die Sitzung von der ISE für 7.200 Sekunden gehalten.
Optional können Sie die Option Enable Fast Reconnect (Schnelle Wiederverbindung aktivieren) aktivieren, die wiederum die innere PEAP-Methode umgeht und eine noch schnellere Neuauthentifizierung ermöglicht. Dies ist bei Anwendungen wie Wireless-Roaming wünschenswert.
ISE PEAP-Sitzungswiederaufnahme - Konfiguration
Die Funktion für die schnelle Wiederverbindung muss ebenfalls in der Komponente aktiviert sein.
Diese Konfiguration ist für native Windows-Supplicants zur Aktivierung von Fast Reconnect vorgesehen.
Windows 10 - Komponentenkonfiguration
Diese Konfiguration ist für den Profil-Editor des AnyConnect Network Access Module (NAM) zur Aktivierung von Fast Reconnect vorgesehen.
AnyConnect NAM-Konfiguration
Überprüfung
Anfängliche Authentifizierung
Bei der anfänglichen PEAP-Authentifizierung sehen Sie, dass das Feld "Session ID" (Sitzungs-ID) bei "Client Hello" während des TLS-Handshakes leer ist.
Erster TLS-Handshake
Die ISE antwortet mit dem Server Hello, das die Sitzungs-ID 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 zusammen mit dem Zertifikat und dem Serverschlüssel enthält.
Begrüßung des ersten Servers mit Sitzungs-ID
In der Datei prrt-server.log werden die Handshake-Meldungen zusammen mit der Sitzungs-ID angezeigt, und dass sie im Cache beibehalten wurde.
Crypto,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x14), ret: 1, long string: SSLv3/TLS read client hello,SSLConnection.cpp:4495
Crypto,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY received client hello message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 5,SSLConnection.cpp:4510
Eap,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,cntx=0000452308,sesn=labpan01/494696177/7940,CPMSessionID=0A6A25D0000000100030EDBC,user=host/LABPCSK.vmlab.local,CallingStationID=B4-96-91-26-DE-2E,FramedIPAddress=10.106.37.25,CLIENT HELLO, new session,EapTlsProtocol.cpp:1463
Eap,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,cntx=0000452308,sesn=labpan01/494696177/7940,CPMSessionID=0A6A25D0000000100030EDBC,user=host/LABPCSK.vmlab.local,CallingStationID=B4-96-91-26-DE-2E,FramedIPAddress=10.106.37.25,Session id
0000: 86 91 75 26 6f af 4e ec 5f b4 33 4f 81 9e 25 22 ..u&o.N._.3O..%"
0010: 1f a0 cf 3c bf 0e 45 88 06 36 90 63 db a5 92 07 ...<..E..6.c.... ,EapTlsProtocol.cpp:1473
Crypto,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x16), ret: 1, long string: SSLv3/TLS write server hello,SSLConnection.cpp:4495
Crypto,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent server hello message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:13:20,542,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 9,SSLConnection.cpp:4510
Crypto,2024-02-12 19:13:20,543,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x17), ret: 1, long string: SSLv3/TLS write certificate,SSLConnection.cpp:4495
Crypto,2024-02-12 19:13:20,543,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent server certificate,SSLConnection.cpp:4498
Crypto,2024-02-12 19:13:20,543,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 11,SSLConnection.cpp:4510
Crypto,2024-02-12 19:13:20,581,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x18), ret: 1, long string: SSLv3/TLS write key exchange,SSLConnection.cpp:4495
Crypto,2024-02-12 19:13:20,581,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent server key exchange message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:13:20,581,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 13,SSLConnection.cpp:4510
Crypto,2024-02-12 19:13:20,581,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x1a), ret: 1, long string: SSLv3/TLS write server done,SSLConnection.cpp:4495
Crypto,2024-02-12 19:13:20,581,DEBUG,0x7f8f923fc700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent server done message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:13:20,737,DEBUG,0x7f8f91df9700,NIL-CONTEXT,shutting session id
0000: 86 91 75 26 6f af 4e ec 5f b4 33 4f 81 9e 25 22 ..u&o.N._.3O..%"
0010: 1f a0 cf 3c bf 0e 45 88 06 36 90 63 db a5 92 07 ...<..E..6.c.... ,SSLConnection.cpp:337
Crypto,2024-02-12 19:13:20,737,DEBUG,0x7f8f91df9700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.pvDone - session is being preserved in cache,SSLConnection.cpp:355
Als Nächstes antwortet der Client mit der Spezifikation für den Client-Schlüsselaustausch und die Änderung der Chiffre.
Austausch von Clientschlüsseln und andere Attribute
Schließlich antwortet der Server auch mit den Change Cipher Species und der TLS Handshake ist abgeschlossen.
Änderung der Cipher-Spezifikation von der Serverseite
In den Schritten des RADIUS-Live-Protokolls können Sie sehen, dass der vollständige TLS-Handshake während der ersten Authentifizierung erfolgt.
RADIUS-Live-Protokoll - TLS-Handshake-Schritte
Die Inner-Methode führt außerdem die vollständige MSCHAPv2-Authentifizierung (Microsoft Challenge Handshake Authentication Protocol) durch.
RADIUS-Live-Protokoll - interne Verfahrensschritte
Während der Neuauthentifizierung
Während der erneuten Authentifizierung sendet der Client die gleiche Sitzungs-ID wie 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 in Client Hello, das von der ursprünglichen Authentifizierung gelernt hat.
Client-Hello während der Sitzungswiederaufnahme
Die ISE bestätigt dann, dass diese Sitzungs-ID im Secure Socket Layer (SSL)-Sitzungscache vorhanden ist, und beide durchlaufen den so genannten abgekürzten TLS-Handshake. Beim TLS-Handshake werden keine Zertifikat- oder Schlüsselinformationen ausgetauscht. Zuvor vereinbarte Schlüssel werden wiederverwendet.
Server-Hello in Sitzungslebenslauf
In der Datei prrt-server.log können Sie sehen, dass die ISE nach dem Empfang von Client Hello bestätigt hat, dass die Sitzung wiederverwendet wird, und den Austausch von Zertifikaten und Schlüsseln überspringt.
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x14), ret: 1, long string: SSLv3/TLS read client hello,SSLConnection.cpp:4495
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY received client hello message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 5,SSLConnection.cpp:4510
Eap,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,cntx=0000452772,sesn=labpan01/494696177/7949,CPMSessionID=0A6A25D0000000110043ACB0,user=host/LABPCSK.vmlab.local,CallingStationID=B4-96-91-26-DE-2E,FramedIPAddress=10.106.37.25,CLIENT HELLO, session reused,EapTlsProtocol.cpp:1463
Eap,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,cntx=0000452772,sesn=labpan01/494696177/7949,CPMSessionID=0A6A25D0000000110043ACB0,user=host/LABPCSK.vmlab.local,CallingStationID=B4-96-91-26-DE-2E,FramedIPAddress=10.106.37.25,Session id
0000: 86 91 75 26 6f af 4e ec 5f b4 33 4f 81 9e 25 22 ..u&o.N._.3O..%"
0010: 1f a0 cf 3c bf 0e 45 88 06 36 90 63 db a5 92 07 ...<..E..6.c.... ,EapTlsProtocol.cpp:1473
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x16), ret: 1, long string: SSLv3/TLS write server hello,SSLConnection.cpp:4495
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent server hello message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 9,SSLConnection.cpp:4510
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x23), ret: 1, long string: SSLv3/TLS write change cipher spec,SSLConnection.cpp:4495
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent change cipher spec message,SSLConnection.cpp:4498
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Call TLS Notify Callback, event 1,SSLConnection.cpp:4510
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS LOG: where: (0x2001), ssl state (0x24), ret: 1, long string: SSLv3/TLS write finished,SSLConnection.cpp:4495
Crypto,2024-02-12 19:33:48,821,DEBUG,0x7f8f925fd700,NIL-CONTEXT,Crypto::Result=0, Crypto.SSLConnection.tlsNotifyLog - TLS log: TLS_NOTIFY sent finished message (server is ready to finish handshake),SSLConnection.cpp:4498
Schließlich antwortet der Client auch mit den Spezifikationen für die Änderungschiffre und dem TLS-Handshake.
Client-Änderung Cipher Spec Session Fortsetzen
In den RADIUS-Live-Protokollschritten wird angezeigt, dass der TLS-Handshake während der erneuten Authentifizierung erfolgt.
Schritte zur Wiederaufnahme der TLS-Sitzung im RADIUS-Live-Protokoll
Bei der erneuten Authentifizierung können Sie sehen, dass die innere Methode übersprungen wird.
RADIUS Live-Protokoll PEAP Schnelle Wiederverbindung
Häufig gestellte Fragen
1) Sind Session Resume und Fast Reconnect voneinander unabhängig?
Ja, Fast Reconnect ist eine optionale Funktion, bei der die interne Authentifizierungsmethode umgangen wird. Die schnelle Wiederherstellung muss nicht aktiviert werden, wenn Session Resume (Sitzungswiederaufnahme) aktiviert ist.
2) Besteht durch die Aktivierung der Sitzungswiederaufnahme ein Sicherheitsrisiko?
Der Server weist dem Browser (Client) während des ersten Handshakes eine zufällige Session-ID zu. Client und Server speichern diese Session-ID zusammen mit den Session-Schlüsseln und Verbindungsstatus. Um eine Sitzung wiederaufzunehmen, sendet der Client die gespeicherte Sitzungs-ID mit der ersten Protokollmeldung (ClientHello) an den Server. Wenn der Server die Verbindung erkennt und bereit ist, die Sitzung wieder aufzunehmen, antwortet er mit derselben Sitzungs-ID, um die entsprechende Sitzung wiederherzustellen. Dadurch kann schnell und ohne Sicherheitsverlust eine sichere Verbindung hergestellt werden, da Sie die zuvor ausgehandelten Sitzungsdaten wiederverwenden.
3) Werden die TLS-Sitzungs-IDs auf andere Knoten repliziert?
Nein, die TLS-Sitzungs-IDs werden im PSN selbst gespeichert. Es wird nicht auf andere PSNs repliziert. Bei einem Neustart oder einem Neustart des PSN können alle Sitzungs-IDs aus dem Cache verloren gehen, und das nächste Mal muss ein vollständiger TLS-Handshake erfolgen.