使用 Elastic Load Balancer,可以很容易地在外部负载均衡器上设置 SSL,并将请求以 http 的形式发送到应用程序。
运行单个服务器时,也可以在 Web 服务器(Tomcat)或应用程序(Spring)上配置 SSL。
使用负载均衡器运行时,是否需要将 SSL 提升到负载均衡器的级别?转发仍处于加密状态的流量是否会丢失 SSL 连接的状态元素?
答案1
恐怕答案是“视情况而定”。我在从事网上银行安全工作时曾深入研究过这个问题。不过,这已经是几年前的事了,所以完全有可能其他人会想出一些我忘记的或那些年已经改变的东西。
在负载均衡器上终止 SSL 的缺点
首先,这样做可能会丢失状态 - 如果您正在运行的应用程序需要一些 SSL 标头来保持状态。如果是这样,您可能会丢失该信息(尽管您可以配置负载平衡器以某种方式转发它)。一个例子可能是如果您使用客户端证书进行身份验证。
其次,正如 Bazze 所说,它确实会使您的流量容易受到本地网络的窃听。当然,这种危险程度取决于您的网络状况以及流量类型。
优点
您正在减少网络服务器的负载,因为它们不再需要花费资源进行解密和加密。
更改 Web 服务器配置时,您可以执行简单的 apache 重新加载,而无需输入 SSL 密钥密码。这意味着您可以自动化执行,从而实现持续部署和 DevOps 以及所有流行语。(另一方面,更改 LB 配置可能需要您输入密码,但一般来说,您不会像摆弄 apache 配置那样经常这样做……)
由于您现在可以直接监听/tcpdump 传入流量,因此对您的 Web 服务器和应用程序进行故障排除变得更加容易。
处理 SSL 错误/安全漏洞的地方更少。通常,在一个 LB 上更改 SSL 设置比在大量 Web 服务器上更改要容易得多 - 尤其是当这些服务器由来自不同部门的许多不同人员管理时。
当只有一个地方可以审计时,审计 SSL 也会变得容易得多。
当证书都集中到一个地方时,跟踪正在使用的证书以及何时需要更新证书就容易多了。您再也不会遇到这样的问题:Bob 订购了证书,并将他的个人电子邮件地址放入系统中以接收提醒,然后辞职或被解雇,导致提醒被退回,证书过期,突然间,您会有很多不满的人要求立即修复它!(在我工作过的任何地方都没有发生过这种情况!咳嗽)
结论
在 LB 处终止是否是个好主意取决于您如何评估各种优点和缺点。一般来说,我认为除非有充分的理由不这样做,否则您需要尽早消除复杂性 - 如果从安全性和可用性的角度来看合理的话,则在网络边界处,或者在那之后尽快消除复杂性。
答案2
我想说,在负载均衡器或服务器级别终止 SSL 流量取决于您是否同意在两者之间进行未加密的流量。在大多数情况下,从负载均衡器到服务器的流量是在专用网络内传输的,您实际上不必担心窃听和中间人攻击(与通过公共互联网传输的流量相比)。
将终止交给 ELB 还可以节省您自己终止流量的额外工作。
您可以在这里阅读更多相关内容:https://security.stackexchange.com/a/30413
答案3
另外几点想法:1. 如果您正在寻求 PCI 合规性,您将需要加密“传输中的数据”,因此您必须将加密流量传递到您的应用程序,或者在 LB 和您的应用服务器之间重新加密。
- 在 LB 上解密会减轻应用服务器的处理负载,这是在 LB 上终止 SSL 的主要原因。