如何使用反向代理确保与外部服务器的安全连接?
How to ensure a secure connection using a reverse proxy to an external server?
猜猜这是我唯一的 post 开头:"My SSL connection works but I don't know why"。
我有一个设置,其中域名和通配符证书位于服务器 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/
cus1.production.io 的 https 的 Apache 配置:
ProxyPass / http://65.23.523.12/
ProxyPassReverse / http://65.23.523.12/
调用 cus1.production.io 显示 65.23.523.12 上的应用程序,但在浏览器中具有安全连接(绿色锁),尽管 服务器 B 上的网络服务器不提供 https 连接,也不提供SSL 证书.
虽然客户端和 "proxying" 服务器 A 之间的连接是安全的,但传输到实际应用程序的数据却不是。所以这实际上是一个骗局。
问题:如何确保在服务器 A 和服务器 B 之间应用安全连接?
总之,就看你自己确定了。
您刚刚描述的是配置 SSL 设置的常用方法,其中您有一组服务器处理与浏览器的安全连接,然后它们将请求代理到另一台服务器,通常只使用 http。这被称为 ssl termination。
通常此连接是在安全网络内完成的,托管证书的服务器可以从互联网访问,但它们转发到的服务器则不能,因此它们不会通过互联网代理回来。但是,如果您的服务器配置不正确,理论上没有什么可以阻止这种情况发生。
并不是真的"fraud",只是保证了浏览器和服务器A之间的SSL/TLS连接。浏览器与服务器B无关:服务器A是服务器的客户端B.
如果可以,请在服务器 B 上设置 SSL/TLS。即使它只能通过 IP 地址访问,您也可以创建内部 CA 或 self-signed 证书。 (该证书应在 IP 地址 类型的 SAN 条目中包含此 IP 地址。)
然后,您可以使用 mod_ssl
's SSLProxy*
选项来配置 Apache Httpd(在服务器 A 上)如何作为服务器 B 的客户端(即当它是反向代理时)。
通常,您需要设置 SSLProxyCACertificateFile
(指向您的内部 CA 证书或那个 self-signed 证书)并使用 SSLProxyCheckPeerName
.
猜猜这是我唯一的 post 开头:"My SSL connection works but I don't know why"。 我有一个设置,其中域名和通配符证书位于服务器 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/
cus1.production.io 的 https 的 Apache 配置:
ProxyPass / http://65.23.523.12/
ProxyPassReverse / http://65.23.523.12/
调用 cus1.production.io 显示 65.23.523.12 上的应用程序,但在浏览器中具有安全连接(绿色锁),尽管 服务器 B 上的网络服务器不提供 https 连接,也不提供SSL 证书.
虽然客户端和 "proxying" 服务器 A 之间的连接是安全的,但传输到实际应用程序的数据却不是。所以这实际上是一个骗局。
问题:如何确保在服务器 A 和服务器 B 之间应用安全连接?
总之,就看你自己确定了。
您刚刚描述的是配置 SSL 设置的常用方法,其中您有一组服务器处理与浏览器的安全连接,然后它们将请求代理到另一台服务器,通常只使用 http。这被称为 ssl termination。
通常此连接是在安全网络内完成的,托管证书的服务器可以从互联网访问,但它们转发到的服务器则不能,因此它们不会通过互联网代理回来。但是,如果您的服务器配置不正确,理论上没有什么可以阻止这种情况发生。
并不是真的"fraud",只是保证了浏览器和服务器A之间的SSL/TLS连接。浏览器与服务器B无关:服务器A是服务器的客户端B.
如果可以,请在服务器 B 上设置 SSL/TLS。即使它只能通过 IP 地址访问,您也可以创建内部 CA 或 self-signed 证书。 (该证书应在 IP 地址 类型的 SAN 条目中包含此 IP 地址。)
然后,您可以使用 mod_ssl
's SSLProxy*
选项来配置 Apache Httpd(在服务器 A 上)如何作为服务器 B 的客户端(即当它是反向代理时)。
通常,您需要设置 SSLProxyCACertificateFile
(指向您的内部 CA 证书或那个 self-signed 证书)并使用 SSLProxyCheckPeerName
.