Tenho um serviço web para ser usado com ou sem certificado de cliente SSL. Os usuários terão acesso total somente quando seu navegador for autenticado com o certificado. Caso contrário, eles obtêm uma funcionalidade básica.
As configurações do nginx para isso são:
ssl_client_certificate /etc/nginx/client-cert/ca.crt;
ssl_verify_client optional;
O problema é que nenhum navegador solicita que o certificado seja selecionado ao se conectar ao serviço.
Qual é o comportamento que devo esperar quando ssl_verify_client é opcional? Devo ainda obter o prompt?
Se for, onde pode estar o problema?
Se não solicitar é o comportamento esperado, como forçaria o navegador a enviar esse certificado específico para o serviço?
Executando o nginx 1.10.3 no Ubuntu 16.04.4 LTS
configuração do nginx: https://pastebin.com/GwjVc0cZ
Do ponto de vista do cliente (ou seja, do navegador), não há diferença entre um certificado de cliente opcional ou obrigatório: em ambos os casos o servidor solicitará o certificado e somente no lado do servidor será determinado se um cliente que não enviou um certificado será aceito ou não.
Meu palpite é que seu cliente não tem certificado de nenhuma CA que você especificou dentro
/etc/nginx/client-cert/ca.crt
. Este arquivo é usado para construir a lista de CAs aceitáveis que é enviada ao cliente. Se nenhum dos certificados de cliente instalados no navegador corresponder a qualquer uma dessas CA, nenhum prompt será fornecido (já que não há nada para escolher) e nenhum certificado de cliente será enviado.