在Apache Loadbalancer和后端之间使用Https

我正在使用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

我已经解决了这个问题