Introduction
Ce document décrit la reprise de session TLS (Transport Layer Security) dans Cisco Identity Services Engine (ISE).
Conditions préalables
Exigences
- Connaissance du processus de connexion TLS (Transport Layer Security).
- Connaissance du flux PEAP (Protected Extensible Authentication Protocol)
- Connaissance de Cisco Identity Services Engine
Composants utilisés
Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes
- Cisco Identity Services Engine 3.2
- Machine virtuelle ISE (VM)
- PC Windows 10
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
Informations générales
La reprise de session TLS est une technique utilisée pour éliminer la surcharge de la connexion TLS initiale. Elle permet à un client et à un serveur qui ont précédemment établi une session TLS de reprendre cette session sans répéter le processus de connexion gourmand en ressources.
Avantages
- Il réduit la latence en évitant les étapes gourmandes en ressources de la connexion initiale et le temps nécessaire pour ce faire.
- Il réduit également la charge de calcul sur le serveur en ignorant les processus intensifs d'échange de clés et de validation de certificats.
Configurer
Sur ISE, pour activer la session TLS, reprenez pour PEAP :
Administration > System > Settings > Protocols > PEAP > cochez Enable PEAP Session Resume
Par défaut, ISE conserve la session pendant 7 200 secondes.
Vous pouvez éventuellement activer l'option Enable Fast Reconnect, qui à son tour contourne la méthode interne du protocole PEAP et permet une réauthentification encore plus rapide. Elle est souhaitable dans les applications telles que l'itinérance sans fil.
Configuration de reprise de session ISE PEAP
La reconnexion rapide doit également être activée dans le demandeur.
Cette configuration permet au demandeur natif Windows d'activer la reconnexion rapide.
Configuration du demandeur Windows 10
Cette configuration est destinée à l'éditeur de profil AnyConnect Network Access Module (NAM) pour activer la reconnexion rapide.
Configuration NAM AnyConnect
Vérifier
Authentification initiale
Dans l'authentification PEAP initiale, vous pouvez voir que le champ ID de session est vide dans le champ Client Hello pendant la connexion TLS.
Connexion TLS initiale
ISE répond avec le message Server Hello, qui inclut l'ID de session 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207, ainsi que le certificat et la clé du serveur.
Hello de serveur initial avec ID de session
Dans le fichier prt-server.log, vous pouvez voir les messages d'échange avec l'ID de session et vérifier qu'il a été conservé dans le cache.
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
Ensuite, le client répond en indiquant Client Key Exchange et Change Cipher Spec.
Échange de clés client et autres attributs
Enfin, le serveur répond également en indiquant Change Cipher Specs (Modifier les spécifications de chiffrement) et la connexion TLS est terminée.
Modifier les spécifications de chiffrement côté serveur
Dans les étapes du journal en direct RADIUS, vous pouvez voir que la connexion TLS complète se produit lors de la première authentification.
Étapes de la connexion TLS du journal RADIUS Live
La méthode interne effectue également l'authentification complète du protocole d'authentification à échanges confirmés Microsoft (MSCHAPv2).
Étapes de la méthode interne RADIUS Live Log
Lors de la réauthentification
Lors de la réauthentification, le client envoie le même ID de session 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 dans le paquet Hello du client, qui a appris de l'authentification initiale.
Client Hello pendant la reprise de session
ISE confirme ensuite que cet ID de session est présent dans le cache de session SSL (Secure Socket Layer) et qu'ils passent tous deux par ce que l'on appelle une connexion TLS abrégée. Aucun certificat ou aucune information de clé n'est échangé lors de la connexion TLS abrégée et les clés précédemment négociées sont réutilisées.
Serveur Hello dans Reprise de session
Dans le fichier prt-server.log, vous pouvez voir qu'après avoir reçu le paquet Client Hello, ISE a confirmé que la session était réutilisée et a ignoré l'échange de certificat et de clé.
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
Enfin, le client répond également en modifiant les spécifications de chiffrement et la connexion TLS est terminée.
Client Change Cipher Spec Session Resume
Dans les étapes du journal en direct RADIUS, vous pouvez voir que la connexion TLS abrégée se produit pendant la ré-authentification.
Étapes de reprise de session TLS du journal RADIUS Live
Dans la ré-authentification, vous pouvez voir que la méthode interne est ignorée.
Reconnexion rapide PEAP du journal en direct RADIUS
Forum aux questions
1) La reprise de session et la reconnexion rapide sont-elles indépendantes l’une de l’autre ?
Oui, la reconnexion rapide est une fonctionnalité facultative qui permet de contourner la méthode d'authentification interne. Il n'est pas obligatoire d'activer la reconnexion rapide lorsque la reprise de session est activée.
2) L'activation de la reprise de session entraîne-t-elle un risque de sécurité ?
Le serveur attribue un ID de session aléatoire lors de la connexion initiale avec le navigateur (client). Le client et le serveur stockent cet ID de session avec les clés de session et les états de connexion. Pour reprendre une session, le client envoie au serveur l'ID de session stocké avec le premier message de protocole (ClientHello). Si le serveur reconnaît la connexion et souhaite reprendre la session, il répond avec le même ID de session pour rétablir la session correspondante. Cela permet d'établir une connexion sécurisée rapidement et sans perte de sécurité puisque vous réutilisez les données de session précédemment négociées.
3) Les ID de session TLS sont-ils répliqués sur d’autres noeuds ?
Non, les ID de session TLS sont stockés sur le PSN lui-même. Il ne se réplique pas sur d'autres PSN. En cas de redémarrage ou de redémarrage du service PSN, tous les ID de session peuvent être perdus dans le cache et la prochaine connexion TLS complète doit avoir lieu.