Назад | Перейти на главную страницу

Прокси-сервер Apache SSL не может найти сертификат клиента?

Мои веб-серверы должны быть интегрированы со сторонним сервером, который находится за брандмауэром. Чтобы пройти через брандмауэр, все запросы должны поступать с одного и того же 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 все еще есть в журнале ошибок, но запросы работают.