Аутентификация сертификата клиента Nginx: Как выполнить исключить IP-адрес

У меня Nginx работает в качестве прокси для веб-сервера, и я хочу защитить доступ с помощью клиентских сертификатов TLS / SSL.

Это моя 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;

, она работает очень хорошо, но теперь мне нужно разрешить доступ к моему сайту без клиентских сертификатов с одного определенного IP-адреса.

Можно ли сделать это с помощью nginx?

Спасибо : -)

1
задан 9 December 2015 в 23:20
2 ответа

Это мое решение:

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;
}

ip 1.2.3.4 может получить доступ к веб-сайту без сертификата клиента :-)

.
4
ответ дан 3 December 2019 в 17:38

Простым решением было бы создание дубликата контейнера сервера с другим именем домена, в котором ssl_verify_client отключен, и некая форма схемы allow/deny.

Можно установить ssl_verify_client опционально , а затем вручную проверить клиента, но в любом случае вашим клиентам будет предложено выдать сертификат, так что это может быть раздражающим для ваших пользователей.

.
0
ответ дан 3 December 2019 в 17:38

Теги

Похожие вопросы