소개
이 문서에서는 Cisco ISE(Identity Services Engine)의 TLS(Transport Layer Security) 세션 재개에 대해 설명합니다.
사전 요구 사항
요구 사항
- TLS(Transport Layer Security) 핸드셰이크 프로세스에 대한 지식
- PEAP(Protected Extensible Authentication Protocol) 흐름 지식
- Cisco Identity Services Engine에 대한 지식
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- Cisco Identity Services Engine 3.2
- ISE VM(가상 머신)
- 윈도우 10 PC
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
TLS 세션 재개는 초기 TLS 핸드셰이크의 오버헤드를 제거하는 데 사용되는 기술입니다. 이 기술을 사용하면 이전에 TLS 세션을 설정한 클라이언트와 서버가 리소스 집약적인 핸드셰이크 프로세스를 반복하지 않고 해당 세션을 재개할 수 있습니다.
장점
- 초기 핸드셰이크의 리소스 집약적인 단계 및 이를 수행하는 데 필요한 시간을 방지하여 레이턴시를 줄입니다.
- 또한 집약적인 키 교환 및 인증서 검증 프로세스를 건너뛰어 서버의 연산 부하를 줄입니다.
구성
ISE에서 TLS 세션을 활성화하려면 PEAP에 대해 다시 시작합니다.
Administration > System > Settings > Protocols > PEAP > Enable PEAP Session Resume을 선택합니다
기본적으로 ISE는 7200초 동안 세션을 유지합니다.
선택적으로, Enable Fast Reconnect(빠른 재연결 활성화)를 활성화할 수 있습니다. 그러면 PEAP의 내부 방법이 우회되고 더 빠른 재인증이 허용됩니다. 무선 로밍과 같은 애플리케이션에서 바람직하다.
ISE PEAP 세션 재개 컨피그레이션
빠른 재연결은 신청자에서도 활성화되어야 합니다.
이 컨피그레이션은 Windows 기본 신청자가 빠른 재연결을 사용하도록 설정하기 위한 것입니다.
Windows 10 서플리컨트 구성
이 컨피그레이션은 AnyConnect NAM(Network Access Module) 프로파일 편집기에서 빠른 재연결을 활성화하기 위한 것입니다.
AnyConnect NAM 컨피그레이션
다음을 확인합니다.
초기 인증
초기 PEAP 인증에서 TLS 핸드셰이크 중에 Client Hello에서 Session ID 필드가 비어 있는 것을 확인할 수 있습니다.
초기 TLS 핸드셰이크
ISE는 Server Hello(서버 Hello)로 응답합니다. 여기에는 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 세션 ID가 인증서 및 서버 키와 함께 포함됩니다.
세션 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 Challenge Handshake Authentication Protocol(MSCHAPv2) 인증도 수행합니다.
RADIUS 라이브 로그 내부 방법 단계
재인증 중
재인증 중에 클라이언트는 초기 인증에서 학습한 Client Hello에서 동일한 세션 ID 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207을 전송합니다.
세션 재개 중 클라이언트 Hello
그런 다음 ISE는 이 세션 ID가 SSL(Secure Socket Layer) 세션 캐시에 있음을 확인하고 둘 다 축약된 TLS 핸드셰이크라고 하는 것을 거칩니다. 축약된 TLS 핸드셰이크 중에는 인증서 또는 키 정보가 교환되지 않으며 이전에 협상된 키를 다시 사용합니다.
세션 재시작의 서버 Hello
prrt-server.log에서 Client 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 빠른 재연결
자주 묻는 질문(FAQ)
1) 세션 재개 및 빠른 재연결은 서로 독립적입니까?
예, 빠른 재연결은 인증의 내부 방법이 우회되는 선택적 기능입니다. 세션 재시작이 활성화된 경우 빠른 재연결을 활성화해야 하는 것은 아닙니다.
2) 세션 재개를 활성화하면 보안 위험이 발생합니까?
서버는 브라우저(클라이언트)와의 초기 핸드셰이크 중에 임의의 세션 ID를 할당합니다. 클라이언트와 서버는 세션 키 및 연결 상태와 함께 이 세션 ID를 저장합니다. 세션을 재개하기 위해 클라이언트는 첫 번째 프로토콜 메시지(ClientHello)와 함께 저장된 세션 ID를 서버로 전송합니다. 서버가 연결을 인식하고 세션을 다시 시작할 의향이 있는 경우 동일한 세션 ID로 응답하면서 해당 세션을 다시 설정합니다. 이렇게 하면 이전에 협상한 세션 데이터를 다시 사용하므로 보안 연결을 신속하게 설정하고 보안을 잃지 않을 수 있습니다.
3) TLS 세션 ID가 다른 노드로 복제됩니까?
아니요. TLS 세션 ID는 PSN 자체에 저장됩니다. 다른 PSN으로 복제되지 않습니다. PSN의 재부팅 또는 서비스 재시작의 경우 모든 세션 ID가 캐시에서 손실될 수 있으며 다음에 전체 TLS 핸드셰이크가 발생해야 합니다.