2017-01-30 5 views
2

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

Он уже отлично работает: я могу прекрасно подключиться к серверу 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; 
     } 

} 
+0

Ваш сертификат клиента подписан «ca.crt» и указан в ваших личных сертификатах * в браузере? И вы очистили кеш браузера с момента реконфигурации сервера? –

+0

@ RichardSmith привет, спасибо за помощь. Да, он подписан ca.crt согласно учебнику. Тем не менее, это действительно странно, поскольку даже форсирование (сертификаты Internet Explorer) оно не отображается в разделе «Личные сертификаты», а в разделе «Средние полномочия». Я также заметил это, но я пошел за учебником к письму, так как это мой первый раз, когда я это реализовал. Может быть, сертификат не «клиент/личный»? Любой способ генерировать его через openssl? –

+0

Я создаю файл PKCS # 12 с паролем, чтобы получить закрытый ключ и подписанный сертификат в списке личных сертификатов браузера. Промежуточный магазин сертификатов не будет работать для вас. –

ответ

1

Предполагая, что вы сгенерировали секретный ключ и запрос сертификата для пользователя и подписал его с клиента CA. Вам нужно получить секретный ключ и подписанный сертификат в списке личных сертификатов в браузере.

Я нашел, что лучший способ - создать защищенный паролем PKCS # 12 (поскольку некоторые браузеры настаивают на защите паролем). Я использую следующую команду OpenSSL:

cat user.key user.crt | openssl pkcs12 -export -out user.p12 
+0

Уважаемый сэр, спасибо за вашу помощь. Я удалил все сертификаты и сделал все заново (в соответствии с одним и тем же учебником), и я использовал вашу команду, и она действительно выдала сертификат пользователя. Я смог импортировать его в Internet Explorer под личными сертификатами. Целая цепочка сертификатов выглядит как действительная, однако я все равно получаю ту же самую ошибку 400 ошибок, и всплывающее окно в браузерах не просит меня выбрать сертификат или что-то вроде этого. В журнале Nginx я вижу это (так же, как и раньше) »[info] 1396 # 0: * 13 клиент не запрашивал SSL-сертификат при чтении заголовков запросов клиентов,« –

+0

доверяет ли IE ваш серверный сертификат или CA, который подписал ваш серверный сертификат?Некоторые браузеры не будут обменивать личные сертификаты с сайтами, которым они не доверяют (не уверены в IE). –

+0

Да, я вручную разместил CA под доверенными корневыми сертификатами. –