我目前正在使用 Let's Encrypt 获取大约 100 多个后端服务器的服务器证书。每 90 天我必须与其他团队合作通过 DNS-01 质询更新我的证书。我找到了一个关于负载均衡器的解决方案,听起来我只需要在负载均衡器中进行 DNS-01 质询,然后所有流量都将被加密:
SSL 终止在负载均衡器前面加密外部流量。如果我们想加密负载均衡器和内部 Web 服务器之间的流量,我们可以使用 SSL 直通。但我们的内部 Web 服务器(后端服务器)之间的流量怎么办?
如果我在中间实现一个负载平衡器,如果我们决定实现 SSL 终止或 SSL 直通,是否可以加密内部 Web 服务器之间的流量?
我对负载均衡器还很陌生,非常感谢您的帮助!
答案1
您始终可以加密属于定义组的任何系统之间的流量。IPsec 传输模式是专门为此创建的。这些服务器承担的角色并不重要,后端、前端等,在这种情况下它们只是 IP 节点。将其视为一种通用解决方案,它使“是的,有可能”成为所有问题的有效答案,例如“是否可以加密 A 和 B 之间的流量”。但是,有时这并不方便,因此通常还有其他选择。
其他选项取决于为了什么目的你需要这种加密。不要回答“只是为了安全”,没有“只是为了安全”这样的东西。有威胁模型,也有应对这些已定义威胁的安全模型。例如,简单来说,HTTP 的威胁模型是中间人可以窃听和注入自己的数据,冒充自己是有效的服务器和/或有效的客户端;HTTPS 旨在通过加密和签名所有通信来使这种情况不可能发生。中间人最多只能传递所有流量而不能窃听,或者完全破坏通信。那么,什么你正在防御的威胁是什么?
后端和平衡器之间的网络不受信任?为什么?这些网络应该只包括平衡器和后端,没有其他内容,您那里有哪些不受信任的参与者?但是,在这种情况下,传输模式下的 IPsec 是可接受的解决方案,因为它将加密线路上的所有内容。
您还可以在平衡器和后端之间(以及后端本身之间)使用 HTTPS。没关系,您的平衡器将终止用户 HTTPS,以纯文本形式查看请求和回复,能够对其进行修改(添加/删除/更改标头),并能够通过分析内容来选择后端和处理,例如,为静态内容选择一个后端,为动态内容选择一个后端。然后它将建立其他HTTPS 连接到后端。后端的唯一 HTTPS 客户端将是平衡器和其他后端,因此对它们来说,使用全球认可的证书并不重要。(例如,Google Frontends 不会检查位于 Google Cloud 内部的 HTTPS 后端的证书,因此自签名证书也可以使用。)您可以创建自己的内部 CA,为所有后端和平衡器颁发证书,并通过在每个系统的存储中安装该 CA 证书使它们受信任。只有平衡器需要配置全球有效的证书,并且只在面向客户端的一侧。Let's Encrypt 自动化也可能是这些平衡器的职责,因为要在它们上安装颁发的证书。
您不信任您的负载均衡器?SSL 直通可能会有所帮助,但它也有自己的缺点。在此设置中,平衡器是 HTTPS 所针对的中间人之一。因此,它无法访问 HTTP 详细信息来平衡请求,甚至不知道区分虚拟主机的 http Host 标头值;它无法注入其他代理标头,例如“代理的”标头,等等;连接按预期受到保护。它所能做的就是希望跟踪连接,否则盲目地将数据包转发到某个后端。在这种情况下,您不会在其上配置任何证书,甚至不会配置任何服务器名称。只需指定后端的 IP。此外,在这种情况下,必须在所有后端上安装有效的证书,因为无法预先知道哪个后端将获得哪个请求。