Можно ли игнорировать сертификат прокси-сервера Apache
Для справочной информации: (вопрос внизу)
Я пытаюсь подключиться к клиенту, у которого есть 8 серверов, все из которых имеют уникальные IP-адреса. Клиент использует тот же SSL-сертификат на всех серверах (для этого примера - имя сертификата == www.all_servers.com). Клиент разрешает только входящие запросы по https.
Я пытаюсь создать прокси-сервер apache с помощью mod_proxy, который отображает различные сопоставления URI на разные серверы. Например:
https://PROXY_SERVER/SERVER1/{REQUEST}
Это отправит {ЗАПРОС} на server1
https://PROXY_SERVER/SERVER2/{REQUEST}
отправит {ЗАПРОС} на сервер2.
До сих пор довольно просто.
В Apache 2.2 это может быть достигнуто с использованием IP-адресов:
SSLProxyEngine On
ProxyPass /server1 https://1.1.1.1/
ProxyPassReverse /server1 https://1.1.1.1/
ProxyPass /server2 https://1.1.1.2/
ProxyPassReverse /server2 https://1.1.1.2/
Это произошло из-за того, что Apache 2.2 не проверял соответствие сертификата (1.1.1.1!= www.all_servers.com)
Однако в Apache 2.4 у меня теперь возникают проблемы с сертификатами (правильно). (Этот точный код работает в блоке apache 2.2)
[Thu Oct 10 12:01:48.571246 2013] [proxy:error] [pid 13282:tid 140475667224320] (502)Unknown error 502: [client 192.168.1.1:48967] AH01084: pass request body failed to 1.1.1.1:443 (1.1.1.1)
[Thu Oct 10 12:01:48.571341 2013] [proxy:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH00898: Error during SSL Handshake with remote server returned by /server1/asd
[Thu Oct 10 12:01:48.571354 2013] [proxy_http:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH01097: pass request body failed to 1.1.1.1:443 (1.1.1.1) from 192.168.1.1 ()
Я не могу использовать /etc/hosts, поскольку один сервер работал бы, используя:
1.1.1.1 www.all_servers.com
SSLProxyEngine On
ProxyPass /server1 https://www.all_servers.com/
ProxyPassReverse /server1 https://www.all_servers.com/
Но многие серверы не будут
Итак, к актуальному вопросу:
Есть ли способ заставить mod_proxy игнорировать сертификаты совпадения ошибок. Или, есть лучший способ сделать это.
Спасибо за любую помощь в этом!
Ответы
Ответ 1
Вы можете установить параметры SSLProxy*
на вашем сервере Apache (который является клиентом в отношении обратных прокси-соединений).
Это было сделано с помощью SSLProxyCheckPeerCN
(отключено по умолчанию в 2.2, но по умолчанию в 2.4), но я не уверен, как это будет работать с IP-адресами (поскольку IP-адреса в CN не стандарт). В Apache Httpd 2.4 есть новая опция для проверки SAN (SSLProxyCheckPeerName
), но я не уверен, как она ведет себя и для IP-адресов.
Наличие IP-адресов в расширениях DNS SAN или в CN не соответствует стандарту HTTPS:
Если присутствует расширение subjectAltName типа dNSName, это ДОЛЖНО использоваться как идентификатор. В противном случае (наиболее конкретный) Common Поле "Имя" в поле "Тема" сертификата ДОЛЖНО использоваться. Хотя использование Common Name - это существующая практика, устаревшие и сертифицирующие органы поощряются к использованию dNSName.
[...]
В некоторых случаях URI указывается как IP-адрес, а не имя хоста. В этом случае должно присутствовать имя субъекта iPAddressAltName в сертификате и должен точно соответствовать IP в URI.