Nginx: OCSP e certificados de cliente

Nginx: OCSP e certificados de cliente

Eu tenho uma configuração Nginx funcional com grampeamento OCSP configurado. Agora quero adicionar autenticação de certificado de cliente para vários URLs.

Então, adicionei uma ssl_client_certificatedeclaração que aponta para o certificado de CA que usamos para URLs restritos (é um certificado de CA privado, não assinado por nenhuma CA conhecida publicamente) e, como a maior parte do servidor ainda deve estar disponível publicamente, configurei ssl_verify_clientcomo optional.

Isso funciona apenas pela metade: posso executar solicitações com cURL(*), com e sem passar um certificado e receber as respostas esperadas tanto em URLs públicos quanto em URLs protegidos que verificam a presença do certificado.

Mas agora a minha pergunta: ao acessar as mesmas URLs com um navegador (sem apresentar um certificado), o Nginx responde com o erro 400. O que me deixa perplexo é que quando eu uso o Firefox Developer Tools para criar uma solicitação cURL a partir de qualquer uma das solicitações com falha e executá-los na linha de comando, funciona perfeitamente. Qual poderia ser o problema?

Além disso, até mesmo cURLs -ve --trace-asciinão mostram nada que me explique por que ele pode falhar em um navegador. Não estou colando toda a (longa) configuração aqui, se você acha que falta algo elementar, fique à vontade para comentar.

Editar: verifiquei e confirmei que cURL envia cabeçalhos Host, User-Agent, Accept, Accept-Language, Referrer, DNTbem como cookies e ID de sessão e permite a compactação exatamente como o Firefox faria.

Além disso, o Firefox e o cURL não possuem certificados de cliente que possam oferecer ao servidor e o Firefox está configurado para solicitar certificados em vez de oferecê-los automaticamente também.

Outra edição: depois de voltar do almoço (sem alterações de configuração nesse meio tempo), o Firefox poderia carregar a primeira página e os recursos associados uma vez. Agora, alguns minutos depois, apenas tentando várias solicitações, ou seja, sem alterações, não funciona mais. Além disso, o Chrome relata o erro 400 e o uso de "Copiar como cURL" (que novamente inclui todos os cabeçalhos) de suas ferramentas de desenvolvedor mostra que ele funciona novamente em cURL. Além disso, tentei todas as solicitações várias vezes para garantir que não houvesse inconsistência no comportamento mostrado em relação a um único agente de usuário. Estou perplexo, tudo parece muito aleatório para mim.

informação relacionada