Eu tenho o Nginx rodando apenas como um proxy para um número variado de servidores web. Um de nossos clientes nos pediu para usar certificados de cliente e nos forneceu 3 certificados para as 3 máquinas diferentes que se conectarão a um serviço da Web em execução em um dos servidores com proxy.
Nunca fiz isso antes de encontrar as configurações relevantes do nginx e criei uma configuração do site (parte relevante abaixo)
server {
listen 443 ssl;
server_name service.domain.com;
ssl_certificate /etc/nginx/ssl/wildcard/server.crt;
ssl_certificate_key /etc/nginx/ssl/wildcard/server.key;
ssl_client_certificate /etc/nginx/ssl/client.certificates/client_package.cer;
ssl_verify_client on;
Eu concatenei os 3 certificados de cliente mais um certificado criado por um desenvolvedor (este foi auto-assinado) que precisava acessar o site durante o desenvolvimento no único arquivo mencionado acima.
O cliente tentou acessar o site, mas não conseguiu fazê-lo. Como um teste da configuração, removi o certificado de desenvolvedor do arquivo de certificado concatenado e confirmei que ele não pôde acessar o site. Uma vez que eu adicionei seu certificado de volta ao arquivo concatenado, ele (desenvolvedor) conseguiu acessar o site corretamente novamente.
Liguei o acesso ao nível de depuração no log de erros e, quando o cliente tentou se conectar, recebi o seguinte erro.
2015/08/13 11:57:41 [info] 27601#0: *1963 client sent no required SSL certificate while processing SPDY, client: 1x.xx.xx.xx, server: service.domain.com, request: "GET /test.cfm
HTTP/1.1", host: "service.domain.com"
Como você pode ver na configuração acima, eu não tenho SPDY ativado (mas faço em outros sites), e o cliente me garante que eles estão enviando os certificados do cliente. Como esta é a primeira vez que eu fiz isso, eu quero ter certeza de que antes de voltar e dizer que meus logs dizem que você não está enviando um certificado de cliente, eu tenho tudo correto neste fim.
Com relação aos certificados que foram enviados para mim: Todos os 3 são assinados pela mesma autoridade de certificação pública. Eu não tenho, no entanto, toda a cadeia no arquivo concatenado. Os guias que eu encontrei on-line mencionam ter a raiz ca também, mas todos eles falam sobre auto-assinatura que nenhum deles é. Então, não tenho certeza se isso se aplica.
Para esclarecer, também não estou tentando passar o certificado de cliente para o servidor proxy.
nginx version: nginx / 1.8.0
versão openssl: OpenSSL 1.0.1k 8 de janeiro de 2015
Se houver mais alguma informação necessária, por favor me avise