Apache SSL Proxy не может найти сертификат клиента?
Мои веб-серверы должны быть интегрированы с сторонним сервером, который находится за брандмауэром. Чтобы пройти через брандмауэр, все запросы должны приходить с одного и того же IP-адреса и проходить аутентификацию через SSL. Поэтому я настроил машину, которая должна работать в качестве прокси-сервера, и перенаправил весь трафик через SSL на сторонний сервер.
Я настроил прокси с сертификатами и соответствующими файлами ключей и могу сделать успешный запрос к сторонней службе через CURL просто отлично, используя файл сертификата и ключа. Я настраиваю виртуальный хост на Apache, чтобы пропустить эти запросы, но продолжаю получать ошибки, говорящие о том, что рукопожатие SSL с удаленным сервером не удалось. Я вижу следующие сообщения об ошибках в моих журналах apache:
Обратный вызов сертификата прокси-клиента: (:443) нисходящему серверу требуется сертификат клиента, но ни один из них не настроен [Вс 29 июля 01:40:48 2012] [ошибка] (502) Неизвестная ошибка 502: прокси-сервер: телу запроса на передачу не удалось
: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>
Спасибо! Любая помощь высоко ценится!
3 ответа
Вам необходимо настроить 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
все еще находится в журнале ошибок, но запросы работают.