应用程序负载均衡器 (ELBv2) SSL 直通

Posted

技术标签:

【中文标题】应用程序负载均衡器 (ELBv2) SSL 直通【英文标题】:Application Load Balancer (ELBv2) SSL pass through 【发布时间】:2017-06-21 00:31:16 【问题描述】:

我正在尝试配置 AWS Application Load Balancer(相对于 Classic Load Balancer)以将流量分配到我的 EC2 Web 服务器。出于合规性原因,我需要对我的应用程序进行端到端 SSL/HTTPS 加密。

在我看来,确保客户端和 Web 服务器之间的通信全程加密的最简单方法是终止 Web 服务器上的 HTTPS 连接。

我的第一个问题:是否可以通过 AWS Application Load Balancer 以这种方式将 HTTPS 流量传递到负载均衡器后面的 Web 服务器?

根据我从 AWS 文档中收集到的信息,可以使用 Classic Load Balancer 以这种方式传递流量(通过 TCP 传递)。但是,Application Load Balancer 似乎想要终止 HTTPS 连接本身,然后执行以下操作之一:

向未加密的 Web 服务器发送流量,出于合规性原因,我无法这样做 创建到 Web 服务器的新 HTTPS 连接,这似乎是额外的工作量

我的第二个问题:对文档的理解正确吗?

【问题讨论】:

我没有在 AWS 上尝试过这个,但我使用 HaProxy 作为我的生产服务器通过 SSL/HTTPS 传递到 nginx 我不确定send traffic to the web servers unencrypted这是否正在发生。我会开始 aws.amazon.com/blogs/aws/… 或 docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 希望这会有所帮助 @MuqeetKhan 如果您在负载均衡器上终止 SSL 并且没有在 Web 服务器上安装 SSL 证书,这正是发生的情况。如果 Web 服务器上没有 SSL 证书,负载均衡器和服务器之间的流量怎么可能被加密? @John R 你能分享一下你是如何做到的吗 @ArbabNazar 就我的记忆而言(这是一年前的事,我现在换了一份工作)我使用带有 TCP 传递的 Classic Load Balancer 做到了这一点。然后终止负载均衡器后面的 Web 服务器上的 HTTPS 连接。我没有使用 Application Load Balancer。 【参考方案1】:

在 Web 服务器上终止 SSL 连接需要您将负载平衡器侦听器从 HTTPS 更改为 TCP。 ALB 不支持这个,只有经典的 ELB。此外,如果您在 Web 服务器上终止 SSL,负载均衡器将无法检查请求,因为它无法解密它,因此它无法执行所有花哨的新路由内容ALB 支持。

如果您确实想将 ALB 用于它提供的新功能,并且需要端到端加密,则必须在 ALB 终止 SSL,并在 Web 服务器上安装 SSL 证书。 Web 服务器证书可能类似于自签名证书,因为只有 ALB 会看到该证书,而不是客户端。

我假设您出于合规性原因(PCI、HIPAA 等)需要端到端加密。否则就没有一个非常令人信服的理由来经历设置它的麻烦。

【讨论】:

是的,出于合规性原因,我需要端到端加密。 AWS 已经发布了网络负载均衡器,它是通过负载均衡器到实例/组/ip 的 TCP,因此您可以在实例上使用 nginx 或任何带有 SSL 的东西,而且应该更快一些 = ) 本文还为此目的建议使用 NLB。 aws.amazon.com/blogs/compute/… NLB 不能很好地替代 ALB,没有预热、没有粘性会话、滚动部署时间变慢、运行状况检查设置受限、发出过多的运行状况检查... @AdrianBaker 我同意并将在您的列表中添加不基于路径的路由,并且负载均衡器不支持 SSL 重定向。对于非 HTTP 流量,我只会选择 NLB 而不是 ALB。

以上是关于应用程序负载均衡器 (ELBv2) SSL 直通的主要内容,如果未能解决你的问题,请参考以下文章

使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器

如何将 AWS 应用程序负载均衡器配置为超过 25 个 SSL 证书限制

AWS 应用程序负载均衡器上的 Websocket + SSL

没有自定义域的 AWS 上的 SSL 应用程序负载均衡器

如何让 SpringSecurity/Grails 与终止 SSL 的负载均衡器很好地配合使用

AWS EC2应用程序负载均衡器+双向SSL?