Я использую сервер 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
К сожалению, я не могу ответить на свой вопрос из-за отсутствия репутации, поэтому я отредактировал свой вопрос, я надеюсь, что это поможет всем, кто сталкивается с подобной проблемой
источник
Ответы:
Проблема оказалась в том, что общее имя сертификатов не совпадало с именем сервера.
До Apache 2.4.5 эта проверка может быть отключена с помощью,
SSLProxyCheckPeerCN off
но в более высоких версиях (таких как 2.4.7)SSLProxyCheckPeerName off
также необходимо указать.Apache документация для
SSLProxyCheckPeerName
Рабочая конфигурация выглядит так:
Вы можете проверить версию Apache, которая у вас есть :
источник
<Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>
одни и те же настройки не работают. Любые идеи?Добавление ниже решило проблему
источник
я использую apache 2.4.9 и добавляю в httpd-ssl.conf следующий код
SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1
я решил проблемы
источник