Назад | Перейти на главную страницу

Запрос сертификата клиента веб-сервера не предоставляется браузером через балансировщик нагрузки Nginx

Я развертываю балансировщик нагрузки с nginx, и у меня проблема с аутентификацией клиента.

Этот балансировщик нагрузки перенаправляет трафик на два веб-сервера Apache. Веб-серверы запрашивают сертификат клиента, когда пользователь должен пройти аутентификацию. Это делается правильно, когда мы подключаемся к веб-серверу напрямую: браузер запрашивает сертификат, и проверка выполняется. Но когда соединение выполняется через балансировщик нагрузки, браузер не запрашивает сертификат, и вход в систему не выполняется.

Это образец конфигурации nginx.

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 443 ssl;

        server_name xxxxxxxxx.yyy;

        index index.html index.htm index.php;

        ssl_certificate /etc/ssl/private/xxxxxxxxx.yyy.crt;
        ssl_certificate_key /etc/ssl/private/xxxxxxxxx.yyy.key;
        ssl_dhparam /etc/ssl/private/dhparams.pem;

        ssl_protocols TLSv1.2;
        add_header X-Frame-Options SAMEORIGIN;
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256';
        ssl_prefer_server_ciphers on;
        server_tokens off;
        add_header X-XSS-Protection "1; mode=block";
        add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";

        location / {
           proxy_pass  https://WebServersCluster;
           proxy_http_version 1.1;
           proxy_set_header Connection "";
        }

        location /nginx_status {
             stub_status on;
             access_log   off;
             allow 127.0.0.1;
             deny all;
        }

        access_log /var/log/nginx/xxxxxxxxx_access.log;
        error_log /var/log/nginx/xxxxxxxxx_error.log;
    }

    upstream WebServersCluster {
      sticky expires=1h secure httponly;
      server WebServer1:443;
      server WebServer2:443;
      keepalive 20;
    }
}

Последние два дня я гуглил, но не нашел решения с похожей конфигурацией. У меня есть решение, настраивающее nginx как балансировщик нагрузки TCP (https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/). Это работает, но при этом теряется много информации журнала и параметров, повышающих безопасность движения и управляемость.

Может ли кто-нибудь подтвердить, есть ли какая-либо конфигурация, которая разрешает запрос с веб-сервера напрямую в браузер? Как будет настроен Nginx?

Спасибо за помощь и извините за мой английский.