Autenticação de certificado de cliente Nginx: como excluir um endereço IP

1

Eu tenho o Nginx sendo executado como um proxy para um servidor da Web e quero proteger o Access usando certificados de cliente TLS / SSL.

Esta é minha configuração ssl

server {
    listen                  443 ssl; 
    server_name             www.domain.com;
    ssl_certificate         /etc/nginx/ssl/domain/server.crt; 
    ssl_certificate_key     /etc/nginx/ssl/domain/server.key; 
    ssl_client_certificate  /etc/nginx/ssl/clients/client_ca.pem
    ssl_verify_client on;

funciona muito bem - mas agora preciso permitir o acesso ao meu site sem certificados de cliente de um endereço IP específico.

existe a possibilidade de fazer isso com o nginx?

obrigado: -)

    
por schaloml 09.12.2015 / 22:20

2 respostas

3

Esta é a minha solução:

server {
    listen                  443 ssl; 
    server_name             www.domain.com;
    ssl_certificate         /etc/nginx/ssl/domain/server.crt; 
    ssl_certificate_key     /etc/nginx/ssl/domain/server.key; 
    ssl_client_certificate  /etc/nginx/ssl/clients/client_ca.pem
    ssl_verify_client       optional;

    # Set global proxy settings
    proxy_read_timeout      360;
    proxy_pass_header       Date;
    proxy_pass_header       Server;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Accept-Encoding "";


    location /
    {

    if ($remote_addr = 1.2.3.4 ) 
       {
        proxy_pass http://10.10.10.1; 
        break; 
       }

    if ($ssl_client_verify != "SUCCESS") 
       { return 403; }

    proxy_pass http://10.10.10.1;}

    error_log /var/log/nginx/domain-error.log;
    access_log /var/log/nginx/domain-access.log;
}

o ip 1.2.3.4 pode acessar o site sem um certificado de cliente: -)

    
por 28.12.2015 / 12:33
0

A solução simples seria criar um contêiner server duplicado com um nome de domínio diferente que tenha ssl_verify_client desativado e alguma forma de esquema allow / deny em vigor.

É possível definir ssl_verify_client optional e, em seguida, verificar manualmente o cliente, mas seus clientes são solicitados a fornecer um certificado de qualquer maneira, por isso pode ser irritante para os usuários.

    
por 09.12.2015 / 23:15