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

Другие вопросы по тегам