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 错误
使用Cloudfront而不是单个EC2实例的AWS ELB设置有什么意义?
使用 Cloudfront 设置 AWS ELB 而不是单个 EC2 实例有啥意义?