Cloudfront、ELB 和 SSL

Posted

技术标签:

【中文标题】Cloudfront、ELB 和 SSL【英文标题】:Cloudfront, ELB and SSL 【发布时间】:2016-05-11 11:02:32 【问题描述】:

如果我使用 Cloudfront 坐在 Web 服务器前面,而该服务器本身位于 ELB 后面,以下是否适用?

我使用 Route53 为 CF 域创建域名记录,并将 SSL 证书应用于该域以保护分发

如果 CF 无法从缓存中提供内容,则 SSL 连接将转发到 ELB(将网络服务器作为源服务器)

因此我还需要在 ELB 上使用相同的域名 (FQDN)(通过 Route53 CNAME)并在那里应用相同的证书?

当 CF 通过 ELB 转发请求时,SSL 被终止 那正确吗 ?一个 FQDN 证书是否足以或更好地使用通配符?改用源站域名更好吗?

由于我现在可以使用新的 AWS 证书管理器工具 (ACM) 添加这些证书,有谁知道如果使用 ACM(这使得 CF 成为一项昂贵的 AWS 服务),CF 是否仍需要使用自定义 SSL 证书的成本?

【问题讨论】:

【参考方案1】:

如果 CF 无法从缓存中提供内容,则 SSL 连接将转发到 ELB(将网络服务器作为源服务器)

SSL 连接未“转发”。 CloudFront 和 ELB 之间建立了新的 SSL 连接。

用户和 CloudFront 之间的 SSL 连接与 CloudFront 和 ELB 之间的连接完全不同。因此,ELB 和 CloudFront 上使用的域名没有匹配要求。

因此我还需要在 ELB 上使用相同的域名 (FQDN)(通过 Route53 CNAME)并在那里应用相同的证书?

唯一的限制是 ELB 上的 SSL 证书必须与 ELB 上使用的域名匹配。它可以是与 CloudFront 上使用的不同的 SSL 证书和域名。

如果您想使用“自定义 SSL”功能并支持“所有客户端”,而不仅仅是支持 SNI 的那些,那么是的,您仍然必须支付额外费用,即使您正在使用 ACM。

示例 1

您可以为 www.domain.com 和 origin.domain.com 创建 Route 53 记录,并为 *.domain.com 创建 SSL 证书。根据这些,您可以将 www.domain.com 分配给 CloudFront 分配,将 origin.domain.com 分配给您的 ELB,并在两者上使用通配符证书。

示例 2

您可以为 www.domain.com 和 origin.domain.com 创建 Route 53 记录,并为 www.domain.com 和 origin.domain.com 分别创建 SSL 证书。通过这些,您可以使用 www.domain.com 证书将 www.domain.com 分配给 CloudFront 分配,并使用 origin.domain.com 证书将 origin.domain.com 分配给您的 ELB。

示例 3

您可以为 www.domain1.com 和 origin.domain2.com 创建 Route 53 记录,并为 www.domain2.com 和 origin.domain2.com 分别创建 SSL 证书。根据这些,您可以使用 www.domain2.com 证书将 www.domain2.com 分配给 CloudFront 分配,并使用 origin.domain2.com 证书将 origin.domain2.com 分配给您的 ELB。

【讨论】:

太棒了,所以我 100% 清楚我可以为该站点创建一个合适的域名,通过 ACM 创建一个 AWS 证书并为 CF 和 ELB 使用相同的证书?前提是我在 Route53 中创建了正确的 DNS 记录(CName 和 A 记录)。当您谈到对 ELB 域名的限制时,我假设 AWS 给您的 ELB 不是域名而是一个合适的别名? 我已经添加了示例。 对于您在此处指定的每个示例,应该在 CF 分发中配置的原始名称应该是什么?我们可以使用原始名称作为 ELB 默认 DNS 名称,还是应该使用我分配给 ELB 的自定义域名。 我已经使用了示例 2 的配置,并且我能够让 CF URL 和 ALB 正常工作,但是每当我点击我的 wordpress 网站上的更多链接时(我正在使用 CF 和 ALB),我我总是从我的 CF URL 重定向到 ALB URL。我在这里提出了详细的问题 [***.com/questions/69937819/…

以上是关于Cloudfront、ELB 和 SSL的主要内容,如果未能解决你的问题,请参考以下文章

CloudFront 无法与 ELB 502 错误网关通信

使用Cloudfront而不是单个EC2实例的AWS ELB设置有什么意义?

HTTPS、AWS ELB、CloudFront 和 S3

尝试实现 socket.io 通信时收到 GET 400。 Node.js、ELB、Route 53、CloudFront 和 s3

使用 ELB 的 Cloudfront 中的 SSL 问题

我应该为 elb 和 aws S3 设置两个不同的 Cloudfront 发行版吗?