autenticação SSL do cliente Nginx

7

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

    
por Drifter104 14.08.2015 / 10:48

3 respostas

1

Sua configuração está correta. No entanto, certifique-se de não colocar certificados de clientes reais no arquivo client_package.cer . Esse arquivo deve conter apenas certificados de CA confiáveis, na verdade, ele deve conter a (s) cadeia (s) completa (s). Você deve solicitar todos os certificados raiz e intermediários do seu cliente, se eles não tiverem sido fornecidos.

Existem também algumas dicas relacionadas à configuração do servidor padrão. Por favor, leia isto e certifique-se de que isso não afeta você.

    
por 19.08.2015 / 06:19
0

Use ssl_trusted_certificate diretiva ao invés de ssl_client_certificate . Consulte os documentos link .

Mas, de qualquer forma, recomendo assinar todos os certificados de cliente com UMA CA ROOT e verificar se o certificado de cliente está assinado com essa CA.

Se isso resolveu seu problema, aceite-o como resposta.

    
por 16.08.2015 / 22:08
-1

Os certificados SSL são curinga ou domínio único? Talvez o desenvolvedor tente acessar o URL do site, por exemplo, test.myapp.com, mas o certificado é emitido somente para myapp.com ou www.myapp.com

    
por 16.08.2015 / 23:10