我正在使用apache(2.4)服务器configuration为2个Apache服务器前面的loadbalancer。 当我在负载均衡器和后端之间使用http连接时,它正常工作,但使用https不起作用。 负载均衡器的configuration:
SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off <Proxy balancer://testcluster> BalancerMember https://[Backend1]:443/test BalancerMember https://[Backend2]:443/test </Proxy> ProxyPass /test balancer://testcluster
现在后端只有自签名证书,这就是证书validation被禁用的原因。
负载均衡器上的错误日志包含以下内容:
[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
正如我上面已经说过的,将configuration更改为http协议和端口80的作品。 此外客户端和负载均衡器之间的HTTPS连接工作,所以负载均衡器的SSL模块似乎设置正确。 通过https直接连接到后端也不会产生任何错误。
预先感谢您的时间
编辑:我想通了,问题是我的证书通用名称不匹配的服务器名称。 我认为SSLProxyVerify没有会导致这种不匹配被忽略,但它不。 在Apache 2.4.5之前,可以使用SSLProxyCheckPeerCNclosures此检查,但是在更高版本(我正在使用2.4.7)中,还需要指定SSLProxyCheckPeerName off 。
Apache文档sslproxycheckpeername
工作configuration如下所示:
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
此检查SSLProxyCheckPeerCN off
但在较高版本(如2.4.7)中SSLProxyCheckPeerName off
也需要指定SSLProxyCheckPeerName off
。
SSLProxyCheckPeerName
Apache文档
工作configuration如下所示:
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
下面添加解决了这个问题
SSLProxyProtocol +TLSv1
我使用Apache 2.4.9,并添加到httpd-ssl.conf下面的代码
SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1
我已经解决了这个问题