AWS CloudFront 到 EC2 端到端加密

Posted

技术标签:

【中文标题】AWS CloudFront 到 EC2 端到端加密【英文标题】:AWS CloudFront to EC2 end-to-end encryption 【发布时间】:2021-07-17 02:31:51 【问题描述】:

我需要端到端加密,所以目前的设置是:

example.com -> Route53 -> LB (TCP :80/443) -> nginx Ingress with SSL certs installed

是否可以这样做:

example.com -> Route53 -> CloudFront -> LB (TCP :80/443) -> Nginx Ingress with SSL certs installed

当我将相同的证书附加到 CloudFront 时,我收到 502 CloudFront 错误。我在备用域名中列出了example.com,并将LB DNS 名称mylb123.elb.us-east-2.amazonaws.com 列为源域名。文档says 说明 Origin Domain Name 应该匹配 SSL 证书中分配给源的名称之一,但 SSL 是为 example.com 等真实域配置的,当然它不包括 *.elb.us-east-2.amazonaws.com 等。这让人困惑我。

您能否建议如何在 CloudFormation 端设置 SSL 或通过它并在 Ingress 端处理 SSL?

更新:

SSL 证书由 DigiCert 颁发,不是自签名的。

【问题讨论】:

有可能。但是,您可以更新/更改证书吗? 该证书由 DigiCert 提供,用于 EC2 实例端,因为需要端到端加密。我不认为将 *.elb.us-east-2.amazonaws.com 包含在该证书中是一个不错的选择,不是吗? @jumpy 您不能将您的DigiCert 证书用于*.elb.us-east-2.amazonaws.com,因为该域不是您的。您需要拥有自己的域。我不明白您如何为 AWS 拥有的域注册证书?不管你做什么,这样的证书都是无效的。 你说得对,我不能。 DigiCert 证书是为 example.com 配置的,但是当我将它用于 CloudFront 时,它会引发 502 错误。问题在于 CloudFront 和 Nginx 实例之间的 SSL 握手。我必须将 Host 标头列入白名单,以便 CloudFront 可以将其转发到源,请参阅下面的答案。无论如何感谢您的支持! 【参考方案1】:

对于您的来源,在您的案例中,您必须拥有有效的公共 SSL 证书。不能自签。这意味着您需要有一个适当的公共域来注册此类证书。

AWS ACM 免费 SSL 证书不适用于实例,除非在 enclate 中,因此您必须使用第三方来获取此类 SSL 证书。热门选择是https://letsencrypt.org/。或者,您可以在您的实例前面使用 ALB,并从 ACM 获取免费 SSL。

【讨论】:

SSL 证书已由 DigiCert 颁发,用于 Nginx 实例端,因为需要端到端加密。所以这不是自签名证书,我不得不提一下,对不起。无论如何感谢您的建议!【参考方案2】:

我在non-related question 中找到了解决方案。

要使 SSL 正常工作而不会出现 502 ERROR The request could not be satisfied 错误,我必须在 CloudFront 分配中将我的域(例如 example.com)指定为备用域名,附加为 example.com 配置的 SSL 证书,非常重要的是,将 @987654325 列入白名单@ 缓存行为中的标头。这使得 SSL 握手可以在 CloudFront 和 Nginx 之间工作。

【讨论】:

以上是关于AWS CloudFront 到 EC2 端到端加密的主要内容,如果未能解决你的问题,请参考以下文章

将 AWS cloudfront 放在 ec2 前面会引发 502 错误

AWS 将 EC2 替换为 CloudFront

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

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

AWS 云产品 CloudFront + ELB + EC2 + S3 构建虚拟主机动静分离站点

$_GET 变量在我的 ec2 实例中使用 cloudfront aws 不起作用