Мои веб-серверы должны быть интегрированы со сторонним сервером, который находится за брандмауэром. Чтобы пройти через брандмауэр, все запросы должны поступать с одного и того же IP-адреса и проходить аутентификацию через SSL. Поэтому я настроил машину, которая должна работать как прокси и перенаправлять весь трафик через SSL на сторонний сервер.
Я настроил прокси с сертификатами и соответствующими ключевыми файлами и могу без проблем отправить успешный запрос к сторонней службе через CURL, используя сертификат и ключевой файл. Я использую виртуальный хост на Apache для передачи этих запросов, но продолжаю получать ошибки о том, что установление связи SSL с удаленным сервером не удалось. В журналах apache я вижу следующие сообщения об ошибках:
Обратный вызов сертификата клиента прокси: (: 443) нижестоящему серверу требуется сертификат клиента, но ни один не настроен [Sun Jul 29 01:40:48 2012] [ошибка] (502) Неизвестная ошибка 502: прокси: не удалось передать тело запроса на <сторонний IP-адрес >: 18443 (<сторонний URL>)
[Вс, 29 июля, 01:40:48 2012] [ошибка] [клиент] прокси: ошибка во время установления связи SSL с удаленным сервером, возвращенная /
Конфигурация моего виртуального хоста apache выглядит следующим образом:
<VirtualHost *:18443>
ServerName <Proxy IP>
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/apache2/ssl/my_server.pem
SSLCertificateKeyFile /etc/apache2/ssl/my_server.key
SSLProxyCACertificatePath /etc/ssl/certs
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://<3rd party server address>:18443
ProxyPassReverse / https://<3rd party server address>:18443
</VirtualHost>
Спасибо! Любая помощь высоко ценится!
Вам необходимо настроить Apache для использования этого файла сертификата в качестве механизма аутентификации для своего прокси-сервера.
Объедините .pem
и .key
в один файл и укажите на него:
SSLProxyMachineCertificateFile /path/to/combined.pem
Имхо то, о чем он действительно просит, - это Apache, который проксирует запросы SSL на сервер конечной точки, предположительно сервер приложений, который выполняет аутентификацию сертификата клиента SSL ...
SSLProxyMachineCertificateFile не поможет вам в этом случае, поскольку этот файл содержит сертификат, с помощью которого сервер apache аутентифицирует себя с сервером приложений ... вы этого не хотите: вы хотите, чтобы вызывающий клиент использовал свой сертификат
Предположительно, Apache должен иметь возможность передавать информацию о сертификате, которую он получает, на сервер приложений, например через AJP, но мне пока не удалось заставить это работать. Я постараюсь обновить этот ответ, если он заработает ...
У меня были такие же ошибки. Возможно, возникла проблема с настроенным именем однорангового узла, не совпадающим с текущим ProxyPass
директива. Фактически я получаю доступ к сервису через localhost. У меня работали следующие строки конфигурации:
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyPass "/api/" "https://localhost:18443/api/"
(благодаря комментарий от @ajmurmann)
Но сообщение Proxy client certificate callback: (:443) downstream server wanted client certificate but none are configured
все еще есть в журнале ошибок, но запросы работают.