Sommario

Introduzione

Prerequisiti

Requisiti

Componenti usati

Premesse

Configurazione

Verifica

Autenticazione iniziale

Durante la riautenticazione

Domande frequenti

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.