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

nginx - проверка подлинности сертификата обратного прокси

Я пытаюсь использовать nginx в качестве обратного прокси-сервера для внутреннего веб-сервера, на котором запущен Tomcat, на котором размещается интерфейс нашей ERP-системы.

Он уже работает нормально: я могу отлично подключиться к серверу nginx (который заблокирован в нашей сети, другой VLAN, брандмауэру и т. Д. И т. Д.), А затем обратный прокси к моему серверу ERP.

Однако я хочу добавить дополнительный уровень защиты, требуя от пользователей наличия цифрового сертификата на своем компьютере, чтобы они могли получить доступ к первому серверу (nginx). Сертификат не используется / не нужен для внутреннего сервера.

Я прошел через этот урок http://nategood.com/client-side-certificate-authentication-in-ngi что позволило мне сгенерировать свои самозаверяющие сертификаты и все остальное.

Когда используешь ssl_verify_client необязательно в конфигурации nginx я могу нормально подключиться к своему внутреннему серверу, но сертификат не запрашивается / не требуется.

Когда я переключаю его на ssl_verify_client на , тогда весь доступ блокируется

400 Bad Request

No required SSL certificate was sent

Независимо от того, какой браузер я использую (Chrome, IE, Edge, Firefox). Конечно, я разместил все сертификаты / цепочки на своем клиентском компьютере, но ни в одном браузере сертификат не запрашивается. Что мне не хватает?

Вот моя полная конфигурация nginx:

server {
        listen 443;
        ssl on;
        server_name 103vportal;

        ssl_password_file /etc/nginx/certs/senha.txt;
        ssl_certificate      /etc/nginx/certs/server.crt;
        ssl_certificate_key  /etc/nginx/certs/server.key;
        ssl_client_certificate /etc/nginx/certs/ca.crt;
        ssl_verify_client on;


        location / {
                proxy_pass http://10.3.0.244:16030;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                proxy_read_timeout 300;
                proxy_send_timeout 300;
        }

}

Этот ответ сработал для меня:

https://stackoverflow.com/questions/41933654/nginx-reverse-proxy-certificate-authentication

Уловка заключалась в том, чтобы создать личный сертификат (с помощью предоставленной команды) и использовать комбинацию имени хоста / DNS под сертификатом.