在Apache Loadbalancer和后端之间使用Https


30

我在2个apache服务器之前使用配置为负载均衡器的apache(2.4)服务器。当我在负载均衡器和后端之间使用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 off禁用此检查但是在更高版本上(我使用的是2.4.7)还需要指定SSLProxyCheckPeerName off

sslproxycheckpeername的Apache文档

工作配置如下所示:

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

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


有趣。我曾经使用apache2.2来执行此操作,而从未如此,所以SSLProxyVerify none且从来没有自签名证书的问题。您确定后端服务器正常吗?
ETL 2014年

@ETL我不知道是否需要“ SSLProxyVerify none”,我只是补充说,希望它可以解决此问题。在负载平衡器服务器上调用“ wget https:// [backend1] /test/test.jsp --no-check-certificate”将下载所需的文件。ng
user3240383

Answers:


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

嘿,我有完全相同的问题,只是配置略有不同:<Location /margin-tool> ProxyPass https://xxxx.thoughtworks.net:8443/margin-tool ProxyPassReverse https://xxxx.thoughtworks.net:8443/margin-tool </Location>相同的设置不起作用。有任何想法吗?
user157735

0

在下面添加解决了问题

SSLProxyProtocol +TLSv1

5
提供神秘的配置示例并不是一个很好的答案。专业的系统管理员无法从Internet复制粘贴字符串。解释一下它的作用以及原因。
彼得说恢复莫妮卡

用java12遇到了这个问题-除其他外,这解决了我的问题....
womd

-2

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

SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1

我已经解决了问题


3
听说过POODLE吗?SSLv3应该被禁用。
斯文

2
SSLv3容易受到攻击
内部人员
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.