Introdução
Este documento descreve a retomada da sessão TLS no Cisco Identity Services Engine (ISE).
Pré-requisitos
Requisitos
- Conhecimento do processo de handshake do protocolo TLS.
- Conhecimento do fluxo do protocolo PEAP protegido
- Conhecimento do Cisco Identity Services Engine
Componentes Utilizados
As informações neste documento são baseadas nestas versões de software e hardware
- Cisco Identity Services Engine 3.2
- Máquina virtual (VM) do ISE
- PC com Windows 10
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
Informações de Apoio
A retomada da sessão TLS é uma técnica usada para eliminar a sobrecarga do handshake TLS inicial. Ela permite que um cliente e um servidor que tenham estabelecido anteriormente uma sessão TLS continuem essa sessão sem repetir o processo de handshake intensivo de recursos.
Vantagens
- Ele reduz a latência, evitando as etapas de uso intensivo de recursos do handshake inicial e o tempo necessário para fazer isso.
- Ele também reduz a carga computacional no servidor ignorando os processos intensivos de troca de chave e validação de certificado.
Configurar
No ISE, para ativar a sessão TLS, continue para PEAP:
Administration > System > Settings > Protocols > PEAP > marque a opção Enable PEAP Session Resume
Por padrão, o ISE mantém a sessão por 7.200 segundos.
Opcionalmente, você pode ativar a opção Ativar reconexão rápida, que, por sua vez, ignora o método interno do PEAP e permite uma reautenticação ainda mais rápida. É desejável em aplicativos como roaming sem fio.
Configuração de Retomada de Sessão PEAP do ISE
A reconexão rápida também deve ser habilitada no suplicante.
Esta configuração é para o solicitante nativo do Windows habilitar a reconexão rápida.
Configuração do solicitante do Windows 10
Esta configuração é para o editor de perfil do Módulo de acesso à rede (NAM) do AnyConnect para ativar a reconexão rápida.
Configuração do AnyConnect NAM
Verificar
Autenticação inicial
Na autenticação PEAP inicial, você pode ver que o campo ID da sessão está em branco no Hello do cliente durante o handshake TLS.
Handshake TLS inicial
O ISE responde com o Server Hello, que inclui uma ID de sessão 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 junto com o certificado e a chave do servidor.
Hello inicial do servidor com ID de sessão
No prt-server.log, você pode ver as mensagens de handshake junto com o ID da sessão e que ele foi preservado no 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
Em seguida, o cliente responde com a Especificação de Troca de Chaves e Alteração de Cifras do Cliente.
Troca de Chave de Cliente e Outros Atributos
Finalmente, o servidor também responde com as Especificações de alteração de codificação e o handshake TLS é concluído.
Alterar especificação de cifra do lado do servidor
Nas etapas de registro ao vivo do RADIUS, você pode ver que o handshake TLS completo acontece durante a primeira autenticação.
Etapas de handshake TLS de registro ao vivo RADIUS
O método interno também executa a autenticação completa do Microsoft Challenge Handshake Authentication Protocol (MSCHAPv2).
Etapas do Método Interno de Log ao Vivo do RADIUS
Durante a reautenticação
Durante a reautenticação, o cliente envia a mesma ID de sessão 869175266faf4eec5fb4334f819e25221fa0cf3cbf0e458806369063dba59207 no Hello do cliente que aprendeu com a autenticação inicial.
Hello do Cliente Durante Retomada da Sessão
Em seguida, o ISE confirma que essa ID de sessão está presente no cache de sessão do Secure Socket Layer (SSL) e ambos passam pelo que é conhecido como handshake TLS abreviado. Nenhuma informação de certificado ou chave é trocada durante o handshake TLS abreviado e as chaves negociadas anteriormente são reutilizadas.
Servidor Hello em Sessão Resume
No prt-server.log, você pode ver que depois de receber o Hello do cliente, o ISE confirmou que a sessão está sendo reutilizada e ignora a troca de certificado e chave.
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
Finalmente, o Cliente também responde com as especificações de cifra de alteração e o handshake TLS é concluído.
Continuar Sessão de Especificação de Codificação de Alteração de Cliente
Nas etapas de registro ao vivo do RADIUS, você pode ver que o handshake TLS abreviado acontece durante a reautenticação.
Etapas de Retomada da Sessão TLS do Log ao Vivo do RADIUS
Na reautenticação, você pode ver que o método interno é ignorado.
Reconexão rápida PEAP de registro ao vivo RADIUS
Perguntas mais freqüentes
1) O Session Resume e o Fast Reconnect são independentes um do outro?
Sim, a reconexão rápida é um recurso opcional em que o método interno de autenticação é ignorado. Não é obrigatório habilitar a reconexão rápida quando o retorno da sessão estiver habilitado.
2) A ativação da sessão continua a causar algum risco à segurança?
O servidor atribui um ID de sessão aleatório durante o handshake inicial com o navegador (cliente). O cliente e o servidor armazenam essa ID de sessão junto com as chaves de sessão e os estados de conexão. Para retomar uma sessão, o cliente envia a ID da sessão armazenada com a primeira mensagem de protocolo (ClientHello) ao servidor. Se o servidor reconhecer a conexão e estiver disposto a retomar a sessão, ele responderá com a mesma ID de sessão para restabelecer a respectiva sessão. Isso permite que uma conexão segura seja estabelecida rapidamente e sem perda de segurança, já que você está reutilizando os dados de sessão negociados anteriormente.
3) As IDs de sessão TLS são replicadas para outros nós?
Não, as IDs de sessão TLS são armazenadas no próprio PSN. Ele não é replicado para outras PSNs. Em caso de reinicialização ou reinicialização do serviço da PSN, todas as IDs de sessão podem ser perdidas do cache e a próxima vez que o handshake TLS completo deve ocorrer.