是否可能忽略Apache代理的证书?

25

背景信息:(问题在底部)

我正在尝试连接一个客户端,该客户端有8台服务器,每台服务器都有唯一的IP地址。客户端在所有服务器上都使用相同的SSL证书(在此示例中,证书名称为 www.all_servers.com)。客户端仅允许通过https进行传入请求。

我正在尝试使用mod_proxy创建一个Apache代理,将不同的URI映射到不同的服务器。例如:

https://PROXY_SERVER/SERVER1/{REQUEST}

这将发送{REQUEST}到server1服务器

https://PROXY_SERVER/SERVER2/{REQUEST}

我会将{REQUEST}发送到server2。 迄今为止,非常简单。

在Apache 2.2中,可以通过以下方式使用IP地址来实现:

SSLProxyEngine On

ProxyPass /server1 https://1.1.1.1/
ProxyPassReverse /server1 https://1.1.1.1/

ProxyPass /server2 https://1.1.1.2/
ProxyPassReverse /server2 https://1.1.1.2/

这是由于Apache 2.2没有检查证书是否匹配(1.1.1.1 != www.all_servers.com)导致的。

然而,在Apache 2.4中,我现在遇到了证书问题(理所当然)。 (这个确切的代码在apache 2.2上运行正常)

[Thu Oct 10 12:01:48.571246 2013] [proxy:error] [pid 13282:tid 140475667224320] (502)Unknown error 502: [client 192.168.1.1:48967] AH01084: pass request body failed to 1.1.1.1:443 (1.1.1.1)
[Thu Oct 10 12:01:48.571341 2013] [proxy:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH00898: Error during SSL Handshake with remote server returned by /server1/asd
[Thu Oct 10 12:01:48.571354 2013] [proxy_http:error] [pid 13282:tid 140475667224320] [client 192.168.1.1:48967] AH01097: pass request body failed to 1.1.1.1:443 (1.1.1.1) from 192.168.1.1 ()

我不能使用/etc/hosts,因为只有一个服务器可以工作,使用:

1.1.1.1 www.all_servers.com

SSLProxyEngine On
ProxyPass /server1 https://www.all_servers.com/
ProxyPassReverse /server1 https://www.all_servers.com/

但很多服务器不会这样做。


所以,实际的问题是:

有没有一种方法可以强制mod_proxy忽略不匹配的证书。或者,有更好的方法来解决这个问题。

感谢任何对此的帮助!


为了避免混淆,当你谈论服务器时,你可以给你的客户取一个不同于“client”的名称。 - Bruno
投票将其移至ServerFault。 - Bruno
1个回答

29
您可以在Apache服务器上设置SSLProxy*选项(就反向代理连接而言,它是一个客户端)。
这是通过使用SSLProxyCheckPeerCN实现的(在2.2中默认关闭,在2.4中默认开启),但我不确定它对IP地址的处理方式(因为在CN中使用IP地址并非标准)。在Apache Httpd 2.4中有一个新选项用于检查SANs(SSLProxyCheckPeerName),但我也不确定它在IP地址方面的行为。
将IP地址放在DNS SAN扩展或CN中与HTTPS不符合标准。
如果存在类型为dNSName的subjectAltName扩展名,则必须将其用作标识。否则,证书Subject字段中最具体的Common Name字段必须被使用。虽然使用Common Name是现有的实践,但它已被弃用,并鼓励认证机构使用dNSName。
在某些情况下,URI被指定为IP地址而不是主机名。在这种情况下,证书中必须存在iPAddress subjectAltName,并且必须与URI中的IP完全匹配。

1
谢谢,这个很好用,我只是把checkCN关掉了,一旦我把checkName也关掉了,它就神奇地开始工作了。 - Gwynnie
1
将其关闭会使该连接可能容易受到中间人攻击,除非您已直接在“SSLProxyCACertificate”中导入了那些证书(并且只有*这些证书)。 - Bruno
SSLProxyCheckPeerName off 用于关闭它。 - Abdull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接