Я пытаюсь использовать 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 под сертификатом.