У меня есть два сервера, оба имеют nginx. Сервер A прослушивает 443 и настроен для аутентификации с помощью SSL-сертификата клиента.
Сервер B имеет внутренний процесс, который должен взаимодействовать с сервером A через nginx.
Я хотел бы настроить Nginx на сервере B, который будет прослушивать 8080 (без шифрования, поскольку все это локальная связь) и proxy_pass для ServerA: 443.
Вопрос в том, как ввести сертификат клиента? Я не нашел ни одной функции proxy_xxxx, которая бы это делала.
Я знаю, как сделать аналог с socat, но мое требование - использовать nginx.
nginx
proxy
ssl-certificate
Bastien974
источник
источник
### Section 2: Unconverted directives ###
# Flag Description
# [S] Unsupported directives.
# In conf file: dummy.conf
# Line 32: SSLProxyMachineCertificateFile /path/to/cert (mod_ssl.c)
# [S] SSLProxyMachineCertificateFile: No relevant directive in Nginx.
Ответы:
Достаточно ли пройти через детали сертификата клиента?
Можете добавить
к вашей конфигурации, а затем информация о сертификате доступна для сервера B через заголовок X-SSL-Cert.
источник
\t
на\n
этот заголовок после прочтения.$ssl_client_cert
переменная устарела;$ssl_client_escaped_cert
переменная должна использоваться вместо этого.По-видимому, это то, что вы ищете: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate Доступно с версии 1.7.8.
источник
Проблема, по-видимому, в значительной степени зависит от версии. В Ubuntu 14.04 LTS по умолчанию nginx является устаревшим 1.4. Сначала вам нужно установить версию на основе PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
показывает, как это сделать с помощью:
вы должны в конечном итоге:
Конфигурация из ответа @ xatr0z https://serverfault.com/a/636455/162693, указывающая на http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate , не работает:
нерабочее предложение
не работает из коробки с 1.8.0. Это, вероятно, подразумевается только как подсказка и не должен использоваться как файл конфигурации как таковой или зависит от другой версии.
Я тестирую сервер A, работающий на основе Apache2, с включенными SSL и самозаверяющими клиентскими сертификатами. Параметры SSL конфигурации Apache установлены на:
Это облегчает отладку ситуации, так как сценарий phpinfo () на стороне сервера покажет информацию о стороне сервера и клиента.
Чтобы проверить это, я использовал:
https: // бэкенд / тест / phpinfo
с сертификатом SSL, установленным в браузере, и я получаю такие разделы, как: SSL_SERVER_S_DN_CN для сертификата сервера и SSL_CLIENT_S_DN_CN для сертификата клиента.
Для начала я использовал (заполните части в скобках) для настройки nginx на внешнем сервере B:
откомментируйте конкретную часть SSL-сертификата клиента только для проверки работы самого обратного прокси-сервера.
Теперь http: // frontend: 8080 / test / phpinfo.php работает
SSL_SERVER_S_DN_CN для сертификата сервера отображается, а SSL_CLIENT_S_DN_CN для сертификата клиента (пока) не отображается
Теперь после комментирования:
и проверка / перезапуск
http: // frontend: 8080 / test / phpinfo.php работает и
SSL_SERVER_S_DN_CN для сертификата сервера отображается и SSL_CLIENT_S_DN_CN для сертификата клиента отображается
так что теперь у нас все работает так, как просили.
Обратите внимание на ошибку https://trac.nginx.org/nginx/ticket/872#ticket
источник
Есть довольно аккуратная статья о клиентских сертификатах nginx и SSL; он использует PHP с FastCGI в качестве примера, но я думаю, вы можете адаптировать его к настройке обратного прокси:
Источник http://nategood.com/client-side-certificate-authentication-in-ngi
источник
Кажется, этот модуль SEnginx - это то, что вы ищете: http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
источник