У меня в основном та же проблема, что и Добавить сертификат клиента при работе в качестве обратного прокси (Apache / NGINX) , но в моем случае нет nginx, который может мне помочь.
Я хочу, чтобы определенное место внутри моего виртуального хоста действовало как обратный прокси для стороннего сервера, например
<Location /mylocation/>
ProxyPass https://thirdparty.example:2345/foo/
ProxyPassReverse https://thirdparty.example:2345/foo/
</Location>
https://thirdparty.example:2345/foo/
однако требует аутентификации с помощью сертификата клиента. Я хочу скрыть этот факт от своих пользователей. От них не должно требоваться предоставление сертификата клиента. Вместо этого я хотел бы, чтобы Apache использовал сертификат, хранящийся на сервере.
Как это может быть сделано?
Когда Apache настроен как прокси, есть 2 отдельных HTTP (S) соединения:
У клиента первого подключения нет прямого способа узнать, что ваш Apache работает как прокси, и где именно он подключается. Оба соединения сосуществуют более или менее одновременно. Это полная противоположность перенаправлению HTTP, когда клиент получает новый URL-адрес и, следовательно, фактически выполняет 2 соединения, но одно за другим.
Отсюда:
Я хочу скрыть этот факт от своих пользователей.
Это подразумевается при использовании Apache в качестве прокси.
От них не требуется предоставлять сертификат клиента.
Они не будут, кроме случаев, когда ваш Apache настроен на запрос сертификата клиента для пути, указанного в вашей конфигурации выше.
Вместо этого я хотел бы, чтобы Apache использовал сертификат, хранящийся на сервере.
Все, что связано с TLS, находится под контролем mod_ssl
чья документация находится на http://httpd.apache.org/docs/2.4/mod/mod_ssl.html
Вас будет больше всего интересовать SSLProxyMachineCertificateFile
и его окрестности, как это описано таким образом:
This directive sets the all-in-one file where you keep the certificates and keys used for authentication of the proxy server to remote servers.
Обратите внимание на контексты, в которых он может появляться: директива глобального сервера, виртуального хоста или прокси (следовательно, вы не можете поместить его прямо в свой Location
блок)
Итак, вам нужно будет добавить что-то вроде:
<Proxy "https://thirdparty.example:2345/foo/*">
SSLProxyMachineCertificateFile /some/path
</Proxy>