在 Apache Loadbalancer 和后端之间使用 Https

在 Apache Loadbalancer 和后端之间使用 Https

我正在使用配置为负载均衡器的 apache (2.4) 服务器,该服务器位于 2 个 apache 服务器的前面。当我在负载均衡器和后端之间使用 http 连接时,它工作正常,但是使用 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

后端目前只有自签名证书,这就是证书验证被禁用的原因。

负载均衡器上的错误日志包含以下内容:

[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 连接也可以正常工作,因此负载均衡器的 ssl 模块似乎设置正确。通过 https 直接连接到后端也不会产生任何错误。

在此先感谢您的时间


编辑:我搞明白了,问题在于我的证书通用名称与服务器名称不匹配。我以为SSLProxyVerify 无会导致忽略此不匹配,但事实并非如此。在 Apache 2.4.5 之前,可以使用以下命令禁用此检查SSLProxyCheckPeerCN 关闭但在更高版本上(我使用的是 2.4.7)SSLProxyCheckPeerName 关闭还需指定。

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

不幸的是,由于声誉不佳,我无法回答自己的问题,因此我编辑了我的问题,希望这对遇到类似问题的人有所帮助

答案1

问题原来是证书通用名称与服务器名称不匹配。

在 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 版本和:

apachectl -V

和/或

apache2ctl -V

答案2

添加以下内容解决了问题

SSLProxyProtocol +TLSv1

答案3

我使用 apache 2.4.9 并将以下代码添加到 httpd-ssl.conf

SSL代理协议 +SSLv3 +TLSv1 +TLSv1.1

我已经解决了问题

相关内容