我使用 DNS 服务器为特定网站设置代理服务器,并寻求有关处理 HTTPS 流量的指导。以下是我的设置和我面临的挑战的简要概述:
目标:创建一个代理服务器,引导客户端通过代理查看 Google.com,同时允许直接访问 Yahoo.com。为了实现此目的,我已将 DNS 服务器配置为将 Yahoo.com 解析为其真实 IP 地址,将 Google.com 解析为我的代理服务器的 IP 地址(例如 192.168.1.1)。
当前配置:
DNS 服务器:将 Yahoo.com 解析为其实际 IP,将 Google.com 解析为我的代理服务器的 IP。
代理服务器(Nginx):已成功配置为 HTTP 的反向代理。
挑战:我在通过代理服务器处理 HTTPS 流量时遇到了困难。虽然我可以使用 Nginx 作为反向代理来有效地管理 HTTP 请求,但我不确定 HTTPS 流量的适当方法。
问题:
如何扩展我当前的 Nginx 配置以有效地通过代理服务器处理 HTTPS 请求?
以这种方式拦截和代理 HTTPS 流量时,我应该注意什么安全注意事项或最佳实践?
我很感激社区的见解、指导或建议,以帮助克服这一挑战。提前感谢您的时间和帮助。
此致
答案1
除非您可以为所代理的站点创建自己的受信任的证书,否则您无法代理这样的 HTTPS 站点。
这将需要将您自己的 CA 证书放在全部将使用代理的客户端。
这也假设客户端没有启用任何类型的证书固定(如果我没记错的话,Chrome 曾经执行过证书固定google.com
,但如果现在仍然执行的话,那就不好了)。
这基本上是一种中间人攻击,HTTPS 的设计目的就是防止这种攻击。
答案2
我认为你首先需要弄清楚你到底想用 https 代理什么。如果你只想反向代理 Google,例如,nginx 也可以做到这一点。但如果你想为整个互联网提供互联网访问,你可能需要一个像 squid 这样的代理。但最重要的是你需要先设置一个私有 ca,亚马逊也提供私有 ca。https://aws.amazon.com/private-ca/
答案3
最后我找到了解决方案。
https://github.com/dlundquist/sniproxy
SNI 代理
根据 TCP 会话的初始请求中包含的主机名代理传入的 HTTP 和 TLS 连接。这启用了基于 HTTPS 名称的虚拟托管来分离后端服务器,而无需在代理计算机上安装私钥。
特征
- 基于名称的 HTTPS 代理,无需解密流量。无需密钥或证书。
- 支持 TLS 和 HTTP 协议。
- 支持后端服务器和监听器的 IPv4、IPv6 和 Unix 域套接字。
- 每个实例支持多个监听套接字。
- 支持HAProxy代理协议将原始源地址传播到后端服务器。