簡介
本文檔介紹思科身份服務引擎(ISE)中的傳輸層安全(TLS)會話恢復。
必要條件
需求
- 傳輸層安全(TLS)握手流程知識。
- 受保護的可擴展身份驗證協定(PEAP)流知識
- 思科身份服務引擎知識
採用元件
本文件中的資訊是以下列軟體和硬體版本為依據
- 思科身分識別服務引擎3.2
- ISE虛擬機器(VM)
- Windows 10 PC
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
TLS會話恢復是一種用於消除初始TLS握手開銷的技術。它允許以前建立TLS會話的客戶端和伺服器恢復該會話,而無需重複資源密集型握手過程。
優勢
- 它通過避免初始握手的資源密集型步驟和所需的時間來減少延遲。
- 它還通過跳過密集的金鑰交換和證書驗證過程來減少伺服器上的計算負載。
設定
在ISE上,要啟用TLS會話,請恢復PEAP:
Administration > System > Settings > Protocols > PEAP > check the Enable PEAP Session Resume
預設情況下,ISE將會話保留7200秒。
或者,您可以啟用Enable Fast Reconnect(啟用快速重新連線),這樣會繞過PEAP的內部方法,並允許更快的重新身份驗證。在諸如無線漫遊等應用中它是理想的。
ISE PEAP會話恢復配置
還必須啟用請求方中的快速重新連線。
此配置用於Windows本機請求方啟用Fast Reconnect。
Windows 10請求方配置
此配置用於AnyConnect網路訪問模組(NAM)配置檔案編輯器以啟用快速重新連線。
AnyConnect NAM配置
驗證
初始身份驗證
在初始PEAP身份驗證中,您可以看到在TLS握手期間,Client Hello中的Session ID欄位為空。
初始TLS握手
ISE通過伺服器Hello響應,其中包括會話ID 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207,以及證書和伺服器金鑰。
使用會話ID的初始伺服器Hello
在prrt-server.log中,您可以看到握手消息和會話ID,並且它已被儲存在快取中。
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
接下來,客戶端使用客戶端金鑰交換和更改密碼規范進行響應。
客戶端金鑰交換和其他屬性
最後,伺服器還會使用更改密碼規范進行響應,並完成TLS握手。
從伺服器端更改密碼規範
在RADIUS即時日誌步驟中,您可以看到完整的TLS握手在第一次身份驗證期間發生。
RADIUS即時日誌TLS握手步驟
內部方法還執行完整的Microsoft質詢握手身份驗證協定(MSCHAPv2)身份驗證。
RADIUS即時日誌內部方法步驟
重新驗證期間
重新驗證期間,使用者端會在使用者端Hello中傳送從初始驗證得知的相同作業階段ID 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207。
會話恢復期間的客戶端Hello
然後,ISE確認此會話ID存在於安全套接字層(SSL)會話快取中,並且它們都會經過簡短TLS握手。在縮寫TLS握手過程中不會交換證書或金鑰資訊,並且會重複使用以前協商的金鑰。
會話恢復中的伺服器Hello
在prrt-server.log中,您可以看到,在收到客戶端Hello後,ISE確認該會話正在重複使用,並跳過證書和金鑰交換。
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
最後,客戶端還以更改密碼規范進行響應,並完成TLS握手。
客戶端更改密碼規範會話恢復
在RADIUS即時日誌步驟中,您可以看到在重新身份驗證期間發生簡短的TLS握手。
RADIUS即時日誌TLS會話恢復步驟
在重新驗證中,您可以看到已跳過內部方法。
RADIUS即時日誌PEAP快速重新連線
常見問題
1)會話恢復與快速重新連線是否相互獨立?
是,快速重新連線是一個可選功能,可繞過Inner身份驗證方法。啟用「會話恢復」時,並非必須啟用「快速重新連線」。
2)啟用會話恢復是否會導致任何安全風險?
伺服器在與瀏覽器(客戶端)的初始握手過程中分配一個隨機會話ID。 客戶端和伺服器儲存此會話ID以及會話金鑰和連線狀態。要恢復會話,客戶端將儲存的會話ID和第一條協定消息(ClientHello)傳送到伺服器。如果伺服器識別出連線並願意恢復會話,它會使用相同的會話ID來回覆以重建相應的會話。這樣可快速建立安全連線,而且不會因重複使用先前協商的會話資料而失去安全性。
3)TLS會話ID是否複製到其他節點?
否,TLS會話ID儲存在PSN上。它不會複製到其他PSN。如果PSN重新啟動或服務重新啟動,所有會話ID都可能會從快取中丟失,並且下次必須執行完全TLS握手。