Introduzione
Questo documento descrive la ripresa della sessione TLS (Transport Layer Security) in Cisco Identity Services Engine (ISE).
Prerequisiti
Requisiti
- Processo di handshake TLS (Transport Layer Security).
- Conoscenza del flusso PEAP (Protected Extensible Authentication Protocol)
- Conoscenza di Cisco Identity Services Engine
Componenti usati
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware
- Cisco Identity Services Engine 3.2
- Macchina virtuale ISE
- PC Windows 10
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Premesse
La ripresa della sessione TLS è una tecnica utilizzata per eliminare il sovraccarico dell'handshake TLS iniziale. Consente a un client e a un server che hanno precedentemente stabilito una sessione TLS di riprendere la sessione senza ripetere il processo di handshake con uso intensivo delle risorse.
Vantaggi
- Riduce la latenza evitando i passaggi dell'handshake iniziale che richiedono un uso intensivo delle risorse e il tempo necessario per farlo.
- Riduce inoltre il carico di calcolo sul server ignorando i processi intensivi di scambio di chiavi e convalida dei certificati.
Configurazione
Su ISE, per abilitare la sessione TLS, riprendere per PEAP:
Amministrazione > Sistema > Impostazioni > Protocolli > PEAP > selezionare Abilita ripresa sessione PEAP
Per impostazione predefinita, ISE tiene la sessione per 7200 secondi.
Facoltativamente, è possibile abilitare l'opzione Abilita riconnessione rapida, che a sua volta ignora il metodo interno di PEAP e consente una riautenticazione ancora più veloce. È consigliabile in applicazioni quali il roaming wireless.
ISE PEAP Session Resume Config
La riconnessione rapida deve essere abilitata anche nel supplicant.
Questa configurazione consente al supplicant nativo di Windows di abilitare la riconnessione rapida.
Configurazione di Windows 10 Supplicant
Questa configurazione consente all'editor dei profili AnyConnect Network Access Module (NAM) di abilitare la riconnessione rapida.
Configurazione AnyConnect NAM
Verifica
Autenticazione iniziale
Durante l'autenticazione PEAP iniziale, è possibile notare che il campo ID sessione è vuoto in Client Hello durante l'handshake TLS.
Handshake TLS iniziale
ISE risponde con Server Hello, che include un ID sessione 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 insieme al certificato e alla chiave del server.
Hello del server iniziale con ID sessione
Nel file prrt-server.log è possibile visualizzare i messaggi dell'handshake insieme all'ID della sessione e verificare che sia stato conservato nella 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
Il cliente risponde quindi con le opzioni Scambio chiave client e Cambia specifica crittografia.
Scambio chiave client e altri attributi
Infine, il server risponde anche con Change Cipher Specs e l'handshake TLS viene completato.
Modifica delle specifiche di crittografia dal lato server
Nei passaggi del registro attivo RADIUS, è possibile verificare che l'handshake TLS completo viene eseguito durante la prima autenticazione.
Passi handshake TLS registro attivo RADIUS
Il metodo Inner esegue inoltre l'autenticazione MSCHAPv2 (Microsoft Challenge Handshake Authentication Protocol) completa.
Passi del metodo interno del log RADIUS Live
Durante la riautenticazione
Durante la riautenticazione, il client invia lo stesso ID sessione 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 nel client Hello che ha imparato dall'autenticazione iniziale.
Salve del client durante la ripresa della sessione
L'ISE conferma quindi che l'ID sessione è presente nella cache di sessione SSL (Secure Sockets Layer) ed entrambi eseguono quello che è noto come handshake TLS abbreviato. Durante l'handshake TLS abbreviato non vengono scambiate informazioni sul certificato o sulla chiave e le chiavi negoziate in precedenza vengono riutilizzate.
Server Hello in ripresa sessione
Nel file prrt-server.log, è possibile verificare che dopo aver ricevuto il messaggio Client Hello, ISE ha confermato che la sessione viene riutilizzata e ignora lo scambio di certificati e chiavi.
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
Infine, il client risponde anche modificando le specifiche di cifratura e completando l'handshake TLS.
Ripresa della sessione di modifica delle specifiche di crittografia client
Nei passaggi del registro attivo RADIUS, è possibile verificare che l'handshake TLS abbreviato avviene durante la riautenticazione.
Passi di ripresa sessione TLS registro attivo RADIUS
Durante la riautenticazione, è possibile notare che il metodo interno viene ignorato.
Riconnessione rapida PEAP log RADIUS Live
Domande frequenti
1) La ripresa della sessione e la riconnessione rapida sono indipendenti l'una dall'altra?
Sì, la riconnessione rapida è una funzionalità facoltativa in cui il metodo di autenticazione interno viene ignorato. Non è obbligatorio abilitare la riconnessione rapida quando è abilitata la ripresa della sessione.
2) L'abilitazione della ripresa della sessione comporta rischi per la sicurezza?
Il server assegna un ID sessione casuale durante l'handshake iniziale con il browser (client). Il client e il server archiviano questo ID sessione insieme alle chiavi di sessione e agli stati di connessione. Per riprendere una sessione, il client invia al server l'ID della sessione archiviato con il primo messaggio di protocollo (ClientHello). Se il server riconosce la connessione e desidera riprendere la sessione, risponde con lo stesso ID sessione per ristabilire la sessione corrispondente. Ciò consente di stabilire rapidamente una connessione sicura senza alcuna perdita di sicurezza poiché si stanno riutilizzando i dati della sessione negoziati in precedenza.
3) Gli ID sessione TLS vengono replicati in altri nodi?
No, gli ID sessione TLS vengono archiviati nel PSN stesso. Non viene replicata in altri nomi PSN. In caso di riavvio del PSN o di riavvio del servizio, tutti gli ID sessione possono andare persi dalla cache ed è necessario eseguire il successivo handshake TLS completo.