要求 CloudFront 和自定义源之间使用 HTTPS 进行通信
如果您需要 HTTPS 以便在 CloudFront 与您的自定义源之间进行通信,则您采取的步骤取决于您是使用 CloudFront 指定给您的分配的域名(如 d111111abcdef8.cloudfront.net)还是您自己的备用域名(如 example.com)。
注意
如果您使用 Amazon S3 存储桶作为您的源,并且已将存储桶配置为网站终端节点,请遵循本部分中的指导。如果不是,要将您的 Amazon S3 存储桶与 HTTPS 结合使用,请参阅要求在 CloudFront 和 Amazon S3 源之间使用 HTTPS 进行通信。
- 使用默认的 CloudFront 域名
-
如果您在对象的 URL 中使用 CloudFront 指定给您的分配的域名(例如,https://d111111abcdef8.cloudfront.net/logo.jpg),则可以按照本主题中的过程执行以下操作来要求 HTTPS:
-
为您的分配中的特定源更改 Origin Protocol Policy (源协议策略) 设置
-
在自定义源服务器上安装 SSL/TLS 证书(当您使用 Amazon S3 源时,不需要执行该操作)
-
- 使用备用域名
-
您可以添加更易于使用的备用域名,例如 example.com,而不是在发布中使用默认域名。
要在使用备用域名时需要 HTTPS 进行通信,请按照使用备用域名和 HTTPS中的步骤和指导进行操作。
更改 CloudFront 设置
以下过程介绍了如何配置 CloudFront 以使用 HTTPS 与 Elastic Load Balancing 负载均衡器、Amazon EC2 实例或其他自定义源进行通信。有关使用 CloudFront API 更新 Web 分配的信息,请参阅 Amazon CloudFront API Reference 中的 UpdateDistribution。
将 CloudFront 配置为要求在 CloudFront 和自定义源之间使用 HTTPS
-
登录 AWS 管理控制台,通过以下网址打开 CloudFront 控制台:https://console.amazonaws.cn/cloudfront/。
-
在 CloudFront 控制台的顶部窗格中,选择您要更新的分配的 ID。
-
在 Origins 选项卡中,选择要更新的源,然后选择 Edit。
-
更新以下设置:
- 源协议策略
-
为您的分配中的适用源更改源协议策略:
-
仅 HTTPS – CloudFront 仅使用 HTTPS 与自定义源进行通信。
-
匹配查看器 – CloudFront 使用 HTTP 或 HTTPS 与自定义源进行通信,具体取决于查看器请求协议。例如,如果为源协议策略选择匹配查看器,并且查看器使用 HTTPS 从 CloudFront 中请求对象,则 CloudFront 也会使用 HTTPS 将请求转发到源。
只有在为查看器协议策略指定将 HTTP 重定向到 HTTPS 或仅 HTTPS 时,才能选择匹配查看器。
CloudFront 仅缓存对象一次,即使查看器使用 HTTP 和 HTTPS 协议发出请求也是如此。
-
- Origin SSL Protocols
-
为您的分配中的适用源选择 Origin SSL Protocols。由于 SSLv3 协议的安全性较低,因此,建议您仅在源不支持 TLSv1 或更高版本的情况下选择 SSLv3。
注意
TLSv1 握手与 SSLv3 向后和向前兼容,但 TLSv1.1 和 TLSv1.2 不是这样。在这种情况下,openssl 仅发送 SSLv3 握手。
-
选择是,编辑。
-
针对要求在 CloudFront 和自定义源之间使用 HTTPS 的其他每个源,重复步骤 3 到 5。
-
请确认以下内容,然后在生产环境中使用更新后的配置:
-
每个缓存行为中的路径模式仅适用于您希望查看器使用 HTTPS 的请求。
-
缓存行为按您希望 CloudFront 评估它们的顺序列出。有关更多信息,请参阅路径模式。
-
缓存行为将请求路由到更改了源协议策略的源。
-
在自定义源服务器上安装 SSL/TLS 证书
您可以在自定义源上使用来自以下来源的 SSL/TLS 证书:
-
如果源是 Elastic Load Balancing 负载均衡器,您可以使用 AWS Certificate Manager (ACM) 提供的证书。您也可以使用信任的第三方证书颁发机构签署并导入 ACM 的证书。
-
对于 ELB 负载均衡器之外的源,您必须使用由信任的第三方证书颁发机构 (CA) (例如,Comodo、DigiCert 或 Symantec) 签署的证书。
在 CloudFront 使用 HTTPS 与源进行通信时,CloudFront 验证信任的证书颁发机构颁发的证书。CloudFront 支持与 Mozilla 相同的证书颁发机构。有关当前列表,请参阅 Mozilla 包含的 CA 证书列表。 不能使用自签名证书在 CloudFront 与您的源之间进行 HTTPS 通信。
重要
如果源服务器返回过期证书、无效证书或自签名证书,或者按错误的顺序返回证书链,则 CloudFront 将中断 TCP 连接,返回 HTTP 状态代码“502(错误网关)”,并将
X-Cache
标头设置为 Error from cloudfront
。此外,如果不存在完整的证书链(包括中间证书),则 CloudFront 将中断 TCP 连接。
从源返回的证书必须涵盖您为分配中相应源的 Origin Domain Name (源域名) 指定的域。此外,如果您已将 CloudFront 配置为将 Host
标头转发到您的源,该源必须响应一个与 Host
标头中的域相匹配的证书。
关于 RSA 和 ECDSA 密码
通信连接的加密强度取决于您为源服务器的证书选择的算法的密钥大小和强度。CloudFront 支持的用于连接自定义源的两个选项是 RSA 和椭圆曲线数字签名算法 (ECDSA)。
有关 CloudFront 支持的 RSA 和 ECDSA 密码列表,请参阅适用于 CloudFront 和源之间的通信且支持的 SSL/TLS 协议和密码。
RSA 密码的工作方式
CloudFront 和源服务器通常使用 RSA 2048 位非对称密钥进行 SSL/TLS 终止。RSA 算法使用两个较大质数的乘积与另一个数字的和来创建公有密钥。私有密钥是一个相关数字。RSA 的强度取决于打破需要对两个较大质数的乘积进行因式分解的密钥的假定难度。但是,计算机技术的进步削弱了 RSA 算法,因为更快的计算机计算意味着现在破解加密更容易。
如果您要在保持加密强度的同时继续使用 RSA,其中一个方法是增大 RSA 密钥的大小。但是,此方法不可轻松扩展,因为使用较大的密钥会增加加密的计算成本。
ECDSA 密码的工作方式
或者,您也可以使用 ECDSA 证书。ECDSA 基于比 RSA 更复杂、更难以解决的数学问题来保证安全性,这意味着它需要更长的计算机处理时间来破解 ECDSA 加密。ECDSA 基于以下原理:如果随机椭圆曲线的离散对数的底数是已知的,则难以为该对数求解,这也称为椭圆曲线离散对数问题 (ECDLP)。这意味着您可以使用较短的密钥长度来实现与使用 RSA (密钥大小大得多) 相同的安全性。
除了提供更高的安全性,使用 ECDSA 的较小的密钥还加快了算法的计算速度,减小了数字证书的大小并减少了 SSL/TLS 握手期间传输的比特数。因此,较小的密钥减少了为源服务器上的 SSL/TLS 终止创建和签署数字证书所需的时间。由此可见,使用较小的密钥大小可以通过减少加密所需的计算周期来增加吞吐量,从而释放服务器资源来处理其他工作。
在 RSA 和 ECDSA 密码之间进行选择
我们已经运行的用来比较的示例测试 (例如,2048 位 RSA 与 256 位 ECDSA (nistp256) 的比较) 表明,nistp256 选项比 2048 位 RSA 的速度快 95%,并提供了与 3072 位 RSA 相同的安全强度。
CloudFront 会继续支持将 RSA 用于 SSL/TLS 连接。但是,如果您担心源服务器的 SSL/TLS 身份验证的当前加密强度,ECDSA 可能是更好的选择。启用 ECDSA 数字证书的工作量与 ECDSA 带来的安全优势是您在做出决定时必须进行的一项权衡。除了提供更强的加密之外,在源服务器上使用 ECDSA 时减少了加密的计算成本是一个额外优势。
使用 ECDSA 密码
要使用 ECDSA 实现 CloudFront 和源之间的通信,请执行以下操作:
-
使用任一支持的曲线 (prime256v1 或 secp384r1) 生成私有密钥。
-
使用信任的证书颁发机构生成 X.509 PEM 格式的 ECDSA 数字证书。
-
设置源以将 ECDSA 证书作为首选。
使用 ECDSA 时,不需要在 CloudFront 控制台或 API 中进行任何设置更改,并且不会产生额外费用。