如何确保使用反向代理与外部服务器的安全连接?

时间:2018-03-27 13:49:38

标签: apache ssl https proxy reverse-proxy

猜猜这是我开始时唯一的帖子:“我的SSL连接正常工作但我不知道为什么”。 我有一个设置,其中域名和通配符证书位于服务器A上,我想使用该域的子域将代理请求代理到互联网上某处的另一台机器上的服务器B.服务器B目前只能通过IP访问,所以我实际上并不希望这样做,因为SSL证书基于域名。

我的设置如下(示例):

  • 服务器A域名:www.production.io
  • 服务器A子域名:cus1.production.io
  • 服务器B IP:65.23.523.12

用于cus1.production.io的http的Apache配置:

RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost On
Redirect / https://cus1.production.io/

用于https of cus1.production.io的Apache配置:

ProxyPass / http://65.23.523.12/
ProxyPassReverse / http://65.23.523.12/

调用cus1.production.io会在65.23.523.12上显示该应用程序,但在浏览器中有一个安全连接(绿色锁定),但服务器B上的Web服务器不提供https连接,也不提供SSL证书< /强>

虽然客户端和“代理”服务器A之间的连接是安全的,但传输到实际应用程序的数据却不是。所以这实际上是一种欺诈行为。

问题:如何确保在服务器A和服务器B之间应用安全连接?

2 个答案:

答案 0 :(得分:1)

简而言之,由您决定。

您刚刚描述的是配置SSL设置的常用方法,其中您有一组处理与浏览器的安全连接的服务器,然后它们将请求代理到另一台服务器,通常只使用http。这称为ssl termination

通常这种连接是在安全的网络中完成的,托管证书的服务器可以从互联网上访问,但是他们转发的服务器不是,因此他们不会通过互联网进行代理。但是,如果您的服务器没有正确配置,理论上没有什么可以阻止这种情况。

答案 1 :(得分:1)

这不是真正的“欺诈”,只是在浏览器和服务器A之间确保SSL / TLS连接。浏览器与服务器B无关:服务器A是服务器B的客户端。

如果可以,请在服务器B上设置SSL / TLS。即使只能通过IP地址访问,也可以创建内部CA或自签名证书。 (该证书应在 IP地址类型的SAN条目中具有此IP地址。)

然后,您可以使用mod_ssl's SSLProxy*选项配置Apache Httpd(在服务器A上)作为服务器B的客户端的行为(即,当它是反向代理时)。

通常,您需要设置SSLProxyCACertificateFile(指向内部CA证书或自签名证书)并使用SSLProxyCheckPeerName