Existe uma maneira de solicitar novamente um certificado TLS do cliente depois que o usuário já esteve (recentemente) no site - sem precisar limpar o histórico? De preferência com nginx.
A maneira como o nginx funciona ssl_verify_client optional_no_ca
é que, depois de selecionar nenhum na primeira visita, o navegador se lembra disso e não pergunta novamente - evento quando a conexão TCP (e, portanto, TLS) é fechada (pode-se forçar isso sem manter ativo, mesmo para certas raízes).
A renegociação de TLS foi desabilitada no TLS.1.3, mas isso fala sobre SSL_verify_client_post_handshake
- isso poderia ser utilizado de alguma forma?
Ou isso é uma coisa do histórico do navegador? (ou seja, o servidor da web pode fazer o que quer que seja, e o navegador continuaria com a escolha feita)
Soluções alternativas que funcionam, mas não são ideais porque o usuário não pode simplesmente clicar em um link:
- faça com que o usuário reinicie o navegador (ou no caso do Firefox: limpe o pop-up "logins ativos" "limpar histórico recente");
- usar origens diferentes (ou seja, porta ou domínio) para os sites "cert-less" e "cert-ful";
A diretiva
ssl_verify_client
não pode ser usada em nenhum nível inferior da configuração do que umserver
bloco, portanto, para ter uma configuração diferente, você precisará usar umserver
bloco diferente, o que também significa um nome de host e/ou porta diferente. Então, sua única solução real é, como você disse: