Добавить сертификат клиента при работе в качестве обратного прокси

У меня в основном та же проблема, что и у сертификата Add Client при работе в качестве обратного прокси-сервера (Apache / NGINX), но в моем случае нет ни одного nginx, который бы мне помог.

Я хочу, чтобы определенное место внутри моего виртуального хоста действовало как обратный прокси-сервер для стороннего сервера, например

<Location /mylocation/>
        ProxyPass          https://thirdparty.example:2345/foo/
        ProxyPassReverse   https://thirdparty.example:2345/foo/
</Location>

https://thirdparty.example:2345/foo/ однако требует аутентификации с помощью сертификата клиента. Я хочу скрыть этот факт от моих пользователей. Они не должны требовать предоставления сертификата клиента. Вместо этого я бы хотел, чтобы Apache использовал сертификат, который хранится на сервере.

Как это может быть сделано?

1 ответ

Когда Apache настроен как прокси-сервер, существует 2 отдельных HTTP(S) -соединения:

  • один из HTTP-клиента к вашему Apache
  • один из вашего Apache на другой сервер

Клиент первого соединения не имеет прямого способа узнать, что ваш 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>
Другие вопросы по тегам