背景资料:(底部问题)
我正在尝试连接到拥有8台服务器的客户端,所有服务器都具有唯一的IP地址。客户端在所有服务器上使用相同的SSL证书(例如,cert name == 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忽略错过匹配证书。或者,有没有更好的方法来做到这一点。
感谢您对此提供任何帮助!
答案 0 :(得分:20)
您可以在Apache服务器上设置SSLProxy*
选项(就反向代理连接而言,这是一个客户端)。
这是使用SSLProxyCheckPeerCN
完成的(默认情况下在2.2中关闭,但默认情况下在2.4中关闭),但我不确定这将如何与IP地址一起使用(因为在CN中具有IP地址)不标准)。 Apache Httpd 2.4中有一个用于检查SAN的新选项(SSLProxyCheckPeerName
),但我不确定它对IP地址的影响。
在 DNS SAN扩展或CN中拥有IP地址不符合HTTPS标准:
如果存在类型为dNSName的subjectAltName扩展名,则必须将其用作标识。否则,(最具体)共同 必须使用证书的“主题”字段中的名称字段。 虽然使用通用名称是现有的做法,但确实如此 不推荐使用,并鼓励认证机构使用 而是dNSName。
[...]
在某些情况下,URI被指定为IP地址而不是主机名。在这种情况下,必须存在iPAddress subjectAltName 在证书中,必须与URI中的IP完全匹配。