Como desabilitar o handshake SSL abreviado para executar um handshake completo a cada chamada no lighttpd?

4

Eu entendo o fluxo do handshake ssl, mas estou enfrentando um problema de lógica. Quando um usuário seleciona um certificado, preciso validá-lo para que o aplicativo saiba que é confiável e corresponde a qualquer usuário do sistema. Mas se não, devo permitir que o usuário peça novamente para selecionar outro. Talvez o usuário tenha vários certificados instalados em sua máquina e tenha selecionado um certificado errado por engano.

No meu cenário atual, para selecionar outro certificado, o usuário deve fechar o navegador e abrir novamente, mas isso dá uma experiência negativa ao usuário e eu quero melhorá-lo.

A solução faz um aperto de mão para cada solicitação, permitindo que o usuário selecione outra.

Mas como fazer isso?

A questão mais relevante que encontrei foi o link .

  • The full handshake is what a client and server do when they don't know each other (they have not talked previously, or that was long ago). In the full handshake, certificates are sent, and asymmetric cryptography (RSA, Diffie-Hellman...) occurs.
  • The abbreviated handshake is what a client and server remember each other; moreaccurately, they remember the algorithms and keys that they established in a previous full handshake, and agree to reuse them (technically, they reuse the "master secret" and derive from it fresh encryption keys for this connection).

Eu posso liberar qualquer cookie, fechar a guia e desativar o keep alive, um segundo handshake não abre o prompt do certificado. Ele está usando o anterior selecionado, e para chrome por exemplo, não há opção "lembre-se da minha decisão", o Firefox tem. O mesmo acontece com o Edge, Opera, Edge, etc. É um padrão?

Eu acho que ele pode ser controlado pelo lado do servidor, solicitando um novo handshake SSL. Fiz algumas intervenções para tentar resolvê-lo sozinho, mas não tive sucesso

  • no lado do cliente :

    • Limpar todos os dados, até o histórico.
    • Abrir em outro cookieless de subdomínio
  • no lado do servidor :

    • Envie o cabeçalho "Conexão: fechar"
    • Desativar o keep-alive

Fechar o navegador é o único efetivo para um novo handshake SSL, mas promoverá uma experiência ruim para o usuário.

Bem, se eu estiver limpando todos os dados do navegador, fechando conexões, removendo qualquer um vivo, e ainda estiver usando o primeiro certificado selecionado em um segundo pedido até eu fechar o navegador (matar todo o processo), há algo errado, ou com um navegador (tudo isso) ou com o servidor.

Se meu aplicativo usa SSL para autenticar usuários, não posso usar vários logins sem fechar o navegador, não está certo, deve haver uma maneira de renegociar essa autenticação.

    
por LeonanCarvalho 12.04.2017 / 22:13

1 resposta

1

Isso segue o mesmo comportamento do HTTP Basic Auth, de modo que os navegadores lembrem dessas credenciais pela duração da sessão do navegador e não forneçam uma maneira de esquecê-las.

    
por 13.04.2017 / 20:51