SNI 代理

SNI 代理

我使用 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代理协议将原始源地址传播到后端服务器。

相关内容