Использование Https между Apache Loadbalancer и бэкэндами

30

Я использую сервер apache (2.4), настроенный в качестве loadbalancer перед двумя серверами apache. Он отлично работает, когда я использую http-соединения между loadbalancer и backends, однако использование https не работает. Конфигурация балансировщика нагрузки:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
  BalancerMember https://[Backend1]:443/test
  BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

Бэкэнды имеют только самозаверяющие сертификаты, поэтому проверка сертификата отключена.

Журнал ошибок на loadbalancer содержит следующее:

[proxy:error] [pid 31202:tid 140325875570432] (502)Unknown error 502: [client ...] AH01084: pass request body failed to [Backend1]:443 ([Backend1])
[proxy:error] [pid 31202:tid 140325875570432] [client ...] AH00898: Error during SSL Handshake with remote server returned by /test/test.jsp
[proxy_http:error] [pid 31202:tid 140325875570432] [client ...] AH01097: pass request body failed to [Backend1]:443 ([Backend1]) from [...] ()

Страница ошибок в браузере содержит:

Proxy Error

The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server

Как я уже говорил выше, изменение конфигурации на протокол http и порт 80 работает. Также https-соединения между клиентом и loadbalancer работают, поэтому модуль ssl loadbalancer, похоже, настроен правильно. Подключение напрямую к бэкэнду через https также не приводит к ошибкам.

Спасибо заранее за ваше время


Изменить: я понял, проблема в том, что общее имя моих сертификатов не совпадает с именем сервера. Я думал, что SSLProxyVerify none не приведет к игнорированию этого несоответствия, но это не так. До apache 2.4.5 эта проверка может быть отключена с помощью SSLProxyCheckPeerCN off, но в более высоких версиях (я использую 2.4.7) SSLProxyCheckPeerName off также необходимо указать.

Apache документация для sslproxycheckpeername

Рабочая конфигурация выглядит так:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

<Proxy balancer://testcluster>
  BalancerMember https://[backend1]:443/test
  BalancerMember https://[backend1]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

К сожалению, я не могу ответить на свой вопрос из-за отсутствия репутации, поэтому я отредактировал свой вопрос, я надеюсь, что это поможет всем, кто сталкивается с подобной проблемой

user3240383
источник
Интересный. Раньше я делал это с apache2.2, и мне никогда не приходилось делать так, чтобы SSLProxyVerify none и никогда не было проблем с сертификатами самоподписания. Вы уверены, что с внутренним сервером все в порядке.
ETL
@ETL Я не знаю, требуется ли "SSLProxyVerify none" или нет, я просто добавил, что, в надежде, это решит проблему. Вызов «wget https: // [backend1] /test/test.jsp --no-check-certificate» на сервере балансировщика нагрузки загружает ожидаемый файл. ng
user3240383

Ответы:

16

Проблема оказалась в том, что общее имя сертификатов не совпадало с именем сервера.

До Apache 2.4.5 эта проверка может быть отключена с помощью, SSLProxyCheckPeerCN offно в более высоких версиях (таких как 2.4.7) SSLProxyCheckPeerName offтакже необходимо указать.

Apache документация для SSLProxyCheckPeerName

Рабочая конфигурация выглядит так:

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

<Proxy balancer://testcluster>
  BalancerMember https://[backend1]:443/test
  BalancerMember https://[backend1]:443/test
</Proxy>
ProxyPass /test balancer://testcluster

Вы можете проверить версию Apache, которая у вас есть :

apachectrl -V
ETL
источник
Эй, у меня точно такая же проблема, за исключением того, что конфигурация немного отличается: <Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>одни и те же настройки не работают. Любые идеи?
user157735
0

Добавление ниже решило проблему

SSLProxyProtocol +TLSv1
Murryy
источник
5
Предоставление мистических образцов конфигурации не является качественным ответом. Копирование-вставка строк из Интернета - это не то, что делает профессиональный системный администратор. Объясните, что он делает и почему.
Петер говорит восстановить Монику
столкнулся с этим с java12 - кроме всего прочего, это решило мою проблему ....
womd
-2

я использую apache 2.4.9 и добавляю в httpd-ssl.conf следующий код

SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1

я решил проблемы

нутрия
источник
3
Вы когда-нибудь слышали о ПУДЛЕ ? SSLv3 должен быть отключен.
Свен
2
SSLv3 уязвим
инсайдер