

# 选择 CloudFront 如何处理 HTTPS 请求
<a name="cnames-https-dedicated-ip-or-sni"></a>

如果希望您的查看器使用 HTTPS 并对您的文件使用备用域名，请为 CloudFront 处理 HTTPS 请求的方式选择下列选项之一：
+ 使用[服务器名称指示 (SNI)](https://en.wikipedia.org/wiki/Server_Name_Indication) – 建议
+ 在每个边缘站点使用专用 IP 地址

本部分说明了每个选项的工作方式。

## 使用 SNI 处理 HTTPS 请求（适用于大多数客户端）
<a name="cnames-https-sni"></a>

[服务器名称指示 (SNI)](https://en.wikipedia.org/wiki/Server_Name_Indication) 是对 TLS 协议的扩展，2010 年以后发布的浏览器和客户端均支持。如果您将 CloudFront 配置为使用 SNI 处理 HTTPS 请求，则 CloudFront 将备用域名与每个边缘站点中的 IP 地址关联。当查看器提交针对内容的 HTTPS 请求时，DNS 将该请求传送到正确边缘站点的 IP 地址。指向您域名的 IP 地址在 SSL/TLS 握手协商期间确定；IP 地址并非专用于您的分发。

在建立 HTTPS 连接的过程的早期便进行了 SSL/TLS 协商。如果 CloudFront 无法立即确定该请求所针对的域，则它会中断连接。在支持 SNI 的查看器针对您的内容提交 HTTPS 请求时，将发生以下操作：

1. 查看器自动从请求 URL 中获取域名，并将其添加到 TLS 客户端问候消息的 SNI 扩展中。

1. 当 CloudFront 收到 TLS 客户端问候时，它会使用 SNI 扩展中的域名来查找匹配的 CloudFront 分配并发回关联的 TLS 证书。

1. 查看器和 CloudFront 执行 SSL/TLS 协商。

1. CloudFront 将请求的内容返回到查看器。

有关支持 SNI 的浏览器的当前列表，请参阅 Wikipedia 条目[服务器名称指示](https://en.wikipedia.org/wiki/Server_Name_Indication)。

如果您希望使用 SNI，但您的某些用户的浏览器不支持 SNI，则您有以下几种选择：
+ 配置 CloudFront 以使用专用 IP 地址而不是 SNI 来提供 HTTPS 请求。有关更多信息，请参阅 [使用专用 IP 地址处理 HTTPS 请求（适用于所有客户端）](#cnames-https-dedicated-ip)。
+ 使用 CloudFront SSL/TLS 证书而不是自定义证书。这要求您在文件的 URL（例如 `https://d111111abcdef8.cloudfront.net/logo.png`）中为您的分配使用 CloudFront 域名。

  如果您使用默认 CloudFront 证书，查看器必须支持 SSL 协议 TLSv1 或更高版本。CloudFront 不支持 SSLv3 使用默认的 CloudFront 证书。

  您还必须将 CloudFront 使用的 SSL/TLS 证书从自定义证书更改为默认 CloudFront 证书：
  + 如果您尚未使用分配来分发内容，则只需更改配置。有关更多信息，请参阅 [更新分配](HowToUpdateDistribution.md)。
  + 如果您已使用分配来分发内容，则必须创建新的 CloudFront 分配并更改文件的 URL，以便减少或消除内容不可用的时间。有关更多信息，请参阅 [从自定义 SSL/TLS 证书恢复为默认 CloudFront 证书](cnames-and-https-revert-to-cf-certificate.md)。
+ 如果您可以控制用户使用的浏览器，请让用户将浏览器升级为支持 SNI 的浏览器。
+ 使用 HTTP 而不是 HTTPS。

## 使用专用 IP 地址处理 HTTPS 请求（适用于所有客户端）
<a name="cnames-https-dedicated-ip"></a>

服务器名称指示 (SNI) 是一种将请求与域关联的方法。另一种方法是使用专用 IP 地址。如果您的用户无法升级到 2010 年之后发布的浏览器或客户端，您可以使用专用 IP 地址为 HTTPS 请求提供服务。有关支持 SNI 的浏览器的当前列表，请参阅 Wikipedia 条目[服务器名称指示](https://en.wikipedia.org/wiki/Server_Name_Indication)。

**重要**  
如果您将 CloudFront 配置为使用专用 IP 地址提供 HTTPS 请求，则每月会产生额外的费用。一旦您将 SSL/TLS 证书与某个分配关联并启用该分配，就将开始计费。有关 CloudFront 定价的更多信息，请参阅 [Amazon CloudFront 定价](https://aws.amazon.com/cloudfront/pricing)。另请参阅[Using the Same Certificate for Multiple CloudFront Distributions](cnames-and-https-limits.md#cnames-and-https-same-certificate-multiple-distributions)。

当您将 CloudFront 配置为使用专用 IP 地址处理 HTTPS 请求时，CloudFront 会将您的证书与每个 CloudFront 边缘站点中的专用 IP 地址关联。在查看器针对您的内容提交 HTTPS 请求时，将发生以下操作：

1. DNS 将请求路由到适用边缘站点中您的分配的 IP 地址。

1. 如果客户端请求在 `ClientHello` 消息中提供 SNI 扩展，CloudFront 会搜索与该 SNI 关联的分配。
   + 如果存在匹配项，CloudFront 会使用 SSL/TLS 证书响应该请求。
   + 如果没有匹配项，CloudFront 会改用 IP 地址来识别您的分配，并确定将哪个 SSL/TLS 证书返回给查看器。

1. 查看器和 CloudFront 使用您的 SSL/TLS 证书执行 SSL/TLS 协商。

1. CloudFront 将请求的内容返回到查看器。

此方法适用于每个 HTTPS 请求，无论用户使用的是浏览器还是其他查看器。

**注意**  
专用 IP 不是静态 IP，可能会随着时间的推移而变化。为边缘站点返回的 IP 地址是从 [CloudFront 边缘服务器列表](LocationsOfEdgeServers.md)的 IP 地址范围动态分配的。  
CloudFront 边缘服务器的 IP 地址范围可能会更改。要收到 IP 地址更改的通知，请[通过 Amazon SNS 订阅 AWS 公有 IP 地址更改](https://aws.amazon.com/blogs/aws/subscribe-to-aws-public-ip-address-changes-via-amazon-sns/)。

## 请求使用三个或更多专用 IP SSL/TLS 证书的权限
<a name="cnames-and-https-multiple-certificates"></a>

如果您需要权限将三个或更多 SSL/TLS 专用 IP 证书与 CloudFront 永久关联，请执行以下步骤。有关 HTTPS 请求的更多信息，请参阅[选择 CloudFront 如何处理 HTTPS 请求](#cnames-https-dedicated-ip-or-sni)。

**注意**  
此过程在您的多个 CloudFront 分配之间使用三个或三个以上的专用 IP 证书。默认值是 2。请记住，您不能将多个 SSL 证书绑定到一个分配。  
您一次只能将一个 SSL/TLS 证书与一个 CloudFront 分配关联。此数字是在您的所有 CloudFront 分配中可以使用的专用 IP SSL 证书的总数。<a name="cnames-and-https-multiple-certificates-procedure"></a>

**请求权限以在 CloudFront 分配中使用三个或更多证书**

1. 转到[支持中心](https://console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase&limitType=service-code-cloudfront-distributions)并创建案例。

1. 注明您需要多少个证书的使用授权，并在请求中描述具体情况。我们将尽快更新您的账户。

1. 继续执行下一个过程。