

# 使用备用域名和 HTTPS
<a name="using-https-alternate-domain-names"></a>

如果您希望在文件的 URL 中使用您自己的域名（例如 `https://www.example.com/image.jpg`），并希望您的查看器使用 HTTPS，则必须完成以下主题中的步骤。（如果您在 URL 中使用默认 CloudFront 分配域名，例如 `https://d111111abcdef8.cloudfront.net/image.jpg`，请按照以下主题中的指导进行操作：[要求在查看器和 CloudFront 之间使用 HTTPS 进行通信](using-https-viewers-to-cloudfront.md)。）

**重要**  
将某证书添加到您的分配时，CloudFront 会立即将该证书传播到其所有边缘站点。当新的边缘站点可用时，CloudFront 也会将该证书传播到这些位置。您不能限制 CloudFront 将证书传播到的边缘站点。

**Topics**
+ [

# 选择 CloudFront 如何处理 HTTPS 请求
](cnames-https-dedicated-ip-or-sni.md)
+ [

# 在 CloudFront 中使用 SSL/TLS 证书的要求
](cnames-and-https-requirements.md)
+ [

# 在 CloudFront 中使用 SSL/TLS 证书的配额（仅在查看器和 CloudFront 之间使用 HTTPS）
](cnames-and-https-limits.md)
+ [

# 配置备用域名和 HTTPS
](cnames-and-https-procedures.md)
+ [

# 确定 SSL/TLS RSA 证书中公有密钥的大小
](cnames-and-https-size-of-public-key.md)
+ [

# 增加 SSL/TLS 证书的配额
](increasing-the-limit-for-ssl-tls-certificates.md)
+ [

# 轮换 SSL/TLS 证书
](cnames-and-https-rotate-certificates.md)
+ [

# 从自定义 SSL/TLS 证书恢复为默认 CloudFront 证书
](cnames-and-https-revert-to-cf-certificate.md)
+ [

# 将使用专用 IP 地址的自定义 SSL/TLS 证书切换到 SNI
](cnames-and-https-switch-dedicated-to-sni.md)

# 选择 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. 继续执行下一个过程。

# 在 CloudFront 中使用 SSL/TLS 证书的要求
<a name="cnames-and-https-requirements"></a>

本主题中介绍了 SSL/TLS 证书的要求。除非另有说明，否则这些要求均适用于以下两项：
+ 在查看器和 CloudFront 之间使用 HTTPS 的证书 
+ 在 CloudFront 和您的源之间使用 HTTPS 的证书

**Topics**
+ [

## 证书颁发者
](#https-requirements-certificate-issuer)
+ [

## 用于 AWS Certificate Manager 的 AWS 区域
](#https-requirements-aws-region)
+ [

## 证书格式
](#https-requirements-certificate-format)
+ [

## 中间证书
](#https-requirements-intermediate-certificates)
+ [

## 密钥类型
](#https-requirements-key-type)
+ [

## 私有密钥
](#https-requirements-private-key)
+ [

## 权限
](#https-requirements-permissions)
+ [

## 证书密钥大小
](#https-requirements-size-of-public-key)
+ [

## 支持的证书类型
](#https-requirements-supported-types)
+ [

## 证书到期日期和续订
](#https-requirements-cert-expiration)
+ [

## CloudFront 分配和证书中的域名
](#https-requirements-domain-names-in-cert)
+ [

## 最低 SSL/TLS 协议版本
](#https-requirements-minimum-ssl-protocol-version)
+ [

## 支持的 HTTP 版本
](#https-requirements-supported-http-versions)

## 证书颁发者
<a name="https-requirements-certificate-issuer"></a>

建议您使用由 [AWS Certificate Manager（ACM）](https://aws.amazon.com/certificate-manager/)颁发的公有证书。有关从 ACM 获取证书的信息，请参阅 [AWS Certificate Manager 用户指南](https://docs.aws.amazon.com/acm/latest/userguide/)**。要在 CloudFront 分配中使用 ACM 证书，请确保您在美国东部（弗吉尼亚州北部）区域 (`us-east-1`) 中请求（或导入）该证书。

 CloudFront 与 Mozilla 支持相同的证书颁发机构 (CA)，因此如果您不使用 ACM，请使用 [Mozilla 包含的 CA 证书列表](https://wiki.mozilla.org/CA/Included_Certificates)中的 CA 颁发的证书。

您为 CloudFront 分配指定的源使用的 TLS 证书也需要从 Mozilla 包含的 CA 证书列表上的 CA 颁发。

有关获取和安装证书的更多信息，请参考 HTTP 服务器软件文档和 CA 文档。

## 用于 AWS Certificate Manager 的 AWS 区域
<a name="https-requirements-aws-region"></a>

要在 AWS Certificate Manager（ACM）中使用证书以要求在查看器和 CloudFront 之间使用 HTTPS，请确保您在美国东部（弗吉尼亚州北部）区域（`us-east-1`）中请求（或导入）该证书。

如果您需要在 CloudFront 和您的源之间使用 HTTPS，并且正在 Elastic Load Balancing 中使用负载均衡器作为源，则您可以在任何 AWS 区域中请求或导入证书。

## 证书格式
<a name="https-requirements-certificate-format"></a>

证书必须采用 X.509 PEM 格式。这是您使用 AWS Certificate Manager 时的原定设置格式。

## 中间证书
<a name="https-requirements-intermediate-certificates"></a>

如果您使用的是第三方证书颁发机构 (CA)，请在 `.pem` 文件的证书链中列出所有中间证书，从为您的域签署证书的 CA 所颁发的证书开始。通常，您将在以适当的链顺序列出中间证书和根证书的 CA 网站上找到文件。

**重要**  
请不要包括以下内容：根证书，未在信任路径中的中间证书，或者 CA 的公有密钥证书。

示例如下：

```
-----BEGIN CERTIFICATE-----
Intermediate certificate 2
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Intermediate certificate 1
-----END CERTIFICATE-----
```

## 密钥类型
<a name="https-requirements-key-type"></a>

CloudFront 支持 RSA 和 ECDSA 公有/私有密钥对。

CloudFront 支持使用 RSA 和 ECDSA 证书连接到查看器和源的 HTTPS 连接。借助 [AWS Certificate Manager（ACM）](https://console.aws.amazon.com/acm)，您可以请求和导入 RSA 或 ECDSA 证书，然后将它们与您的 CloudFront 分配相关联。

有关 CloudFront 支持的您可以在 HTTPS 连接中协商的 RSA 和 ECDSA 密码的列表，请参阅[查看器和 CloudFront 之间支持的协议和密码](secure-connections-supported-viewer-protocols-ciphers.md)和[CloudFront 与源之间受支持的协议和密码](secure-connections-supported-ciphers-cloudfront-to-origin.md)。

## 私有密钥
<a name="https-requirements-private-key"></a>

如果您使用的是来自第三方证书颁发机构 (CA) 的证书，请注意以下几点：
+ 私有密钥必须匹配证书中的公有密钥。
+ 私有密钥必须采用 PEM 格式。
+ 私有密钥无法使用密码加密。

如果 AWS Certificate Manager (ACM) 提供了证书，则 ACM 不会发布该私有密钥。私有密钥存储在 ACM 中，供与 ACM 集成的 AWS 服务使用。

## 权限
<a name="https-requirements-permissions"></a>

您必须具备使用和导入 SSL/TLS 证书的权限。如果您使用 AWS Certificate Manager (ACM)，建议您使用 AWS Identity and Access Management 权限以限制访问证书。有关更多信息，请参阅《AWS Certificate Manager 用户指南》**中的[身份和访问权限管理](https://docs.aws.amazon.com/acm/latest/userguide/security-iam.html)。

## 证书密钥大小
<a name="https-requirements-size-of-public-key"></a>

CloudFront 支持的证书密钥大小取决于密钥和证书类型。

**对于 RSA 证书：**  
CloudFront 支持 1024 位、2048 位、3072 位和 4096 位 RSA 密钥。用于 CloudFront 的 RSA 证书的最大密钥长度为 4096 位。  
 请注意，ACM 颁发密钥最多为 2048 位的 RSA 证书。要使用 3072 位或 4096 位 RSA 证书，您需要从外部获取该证书并将其导入 ACM，之后即可将其与 CloudFront 一起使用。  
有关如何确定 RSA 密钥大小的信息，请参阅[确定 SSL/TLS RSA 证书中公有密钥的大小](cnames-and-https-size-of-public-key.md)。

**对于 ECDSA 证书：**  
CloudFront 支持 256 位密钥。要在 ACM 中使用 ECDSA 证书以要求在查看器和 CloudFront 之间使用 HTTPS，请使用 prime256v1 椭圆曲线。

## 支持的证书类型
<a name="https-requirements-supported-types"></a>

CloudFront 支持可信的证书颁发机构颁发的所有类型的证书。

## 证书到期日期和续订
<a name="https-requirements-cert-expiration"></a>

如果您使用来自第三方证书颁发机构 (CA) 的证书，则您必须监控证书到期日期并在到期前续订导入到 AWS Certificate Manager (ACM) 或上载到 AWS Identity and Access Management 证书存储的证书。

**重要**  
为避免发生证书过期问题，请在当前证书的 `NotAfter` 值之前至少 24 小时续订或重新导入证书。如果您的证书将在 24 小时内过期，请从 ACM 申请新证书或将新证书导入 ACM。接下来，将新证书关联到 CloudFront 分配。  
在您的证书续订或重新导入过程中，CloudFront 可能会继续使用以前的证书。这是个异步过程，CloudFront 最长可能需要 24 小时才能显示您的更改。

如果您使用 ACM 提供的证书，则 ACM 会为您管理证书续订。有关更多信息，请参阅《AWS Certificate Manager 用户指南》**中的[托管续订](https://docs.aws.amazon.com/acm/latest/userguide/managed-renewal.html)。

## CloudFront 分配和证书中的域名
<a name="https-requirements-domain-names-in-cert"></a>

当您使用自定义源时，源上 SSL/TLS 证书的**公用名**字段中包含域名，**使用者备用名称**字段中可能包含更多域名。（CloudFront 支持证书域名中的通配符。） 

证书中的其中一个域名必须与您为“源域名”指定的域名匹配。如果没有任何域名匹配，CloudFront 会向查看器返回 HTTP 状态代码 `502 (Bad Gateway)`。

**重要**  
在将备用域名添加到分配时，CloudFront 会检查备用域名是否涵盖在您附加的证书中。证书必须在证书的使用者备用名称 (SAN) 字段中覆盖备用域名。这意味着，SAN 字段必须包含备用域名的完全匹配项，或者包含与要添加的备用域名级别相同的通配符。  
有关更多信息，请参阅[使用备用域名的要求](CNAMEs.md#alternate-domain-names-requirements)。

## 最低 SSL/TLS 协议版本
<a name="https-requirements-minimum-ssl-protocol-version"></a>

如果您使用的是专用 IP 地址，请通过选择安全策略来为查看器和 CloudFront 之间的连接选择最低 SSL/TLS 协议版本。

有关更多信息，请参阅 [安全策略（最低 SSL/TLS 版本）](DownloadDistValuesGeneral.md#DownloadDistValues-security-policy)主题中的 [所有分配设置参考](distribution-web-values-specify.md)。

## 支持的 HTTP 版本
<a name="https-requirements-supported-http-versions"></a>

如果您将一个证书与多个 CloudFront 分配关联，则与证书关联的所有分配都必须针对[支持的 HTTP 版本](DownloadDistValuesGeneral.md#DownloadDistValuesSupportedHTTPVersions)使用相同的选项。您在创建或更新 CloudFront 分配时指定此选项。

# 在 CloudFront 中使用 SSL/TLS 证书的配额（仅在查看器和 CloudFront 之间使用 HTTPS）
<a name="cnames-and-https-limits"></a>

请注意在 CloudFront 中使用 SSL/TLS 证书的以下配额。这些配额仅适用于您使用 AWS Certificate Manager (ACM) 预置的 SSL/TLS 证书，或导入 ACM 或上传到 IAM 证书存储供查看器和 CloudFront 之间进行 HTTPS 通信的 SSL/TLS 证书。

有关更多信息，请参阅 [增加 SSL/TLS 证书的配额](increasing-the-limit-for-ssl-tls-certificates.md)。

**每个 CloudFront 分配的最大证书数量**  
最多可以将一个 SSL/TLS 证书与每个 CloudFront 分配关联。

**您可以导入 ACM 或上载到 IAM 证书存储的证书的最大数量**  
如果您从第三方 CA 获得了 SSL/TLS 证书，则必须在下列位置之一存储证书：  
+ **AWS Certificate Manager** – 有关 ACM 证书数量的当前配额，请参阅《AWS Certificate Manager 用户指南》**中的[配额](https://docs.aws.amazon.com/acm/latest/userguide/acm-limits.html)。列出的限制是总数，包括您使用 ACM 预置的证书以及您导入 ACM 的证书。
+ **IAM 证书存储** – 有关您可以上载到 IAM 证书存储以供 AWS 账户使用的证书数的当前配额（以前称为限制），请参阅《IAM 用户指南》**中的 [IAM 和 STS 限制](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html)。您可以在服务配额控制台中申请更高的配额。

**每个 AWS 账户的证书的最大数量（仅限专用 IP 地址）**  
如果要使用专用 IP 地址处理 HTTPS 请求，请注意以下几点：  
+ 默认情况下，CloudFront 向您授权以供您的 AWS 账户使用两个证书，一个用于日常使用，另一个用于您需要轮换证书以满足多个分配的情况。
+ 如果您的 AWS 账户需要两个以上的自定义 SSL/TLS 证书，则可以在服务配额控制台中申请更高的配额。

**对使用不同AWS账户创建的 CloudFront 分配使用同一个证书**  
如果您使用的是第三方 CA，并且希望针对不同 AWS 账户创建的多个 CloudFront 分配使用同一个证书，则必须将证书导入 ACM，或者为每个 AWS 账户将其上传至 IAM 证书存储一次。  
如果您使用的是 ACM 提供的证书，则不能将 CloudFront 配置为使用其他 AWS 账户创建的证书。

**为 CloudFront 和其他AWS服务使用同一个证书**  
如果您从信任的证书颁发机构 (如 Comodo、DigiCert 或 Symantec) 购买了证书，则可以对 CloudFront 和其他 AWS 服务使用同一个证书。如果要将证书导入到 ACM，您只需要导入一次即可供多个 AWS 服务使用。  
如果您使用的是 ACM 提供的证书，这些证书会存储在 ACM 中。

**为多个 CloudFront 分配使用同一个证书**  
对于任何或所有您正用来提供 HTTPS 请求的 CloudFront 分配，您都可以使用同一个证书。请注意以下几点：  
+ 您可以使用同一个证书来使用专用 IP 地址处理请求以及使用 SNI 处理请求。
+ 只能将一个证书与每个分配关联。
+ 每个分配必须包含一个或多个备用域名，这些域名也会出现在证书的**公用名**字段或**主题备用名称**字段中。
+ 如果您正在使用专用 IP 地址提供 HTTPS 请求并且已使用同一个 AWS 账户创建您的所有分配，您可以为所有分配使用同一个证书，这样可以显著降低成本。CloudFront 对每个证书而不是每个分配收费。

  例如，假设您使用同一个 AWS 账户创建了三个分配，并且您对所有三个分配使用同一个证书。将仅针对您使用专用 IP 地址计算一次费用。

  但是，如果您正在使用专用 IP 地址处理 HTTPS 请求并且正在使用同一个证书在不同的 AWS 账户中创建 CloudFront 分配，则会向每个账户收取专用 IP 地址的使用费。例如，如果您使用三个不同的 AWS 账户创建三个分配，并且您为所有三个分配使用同一个证书，则向每个账户收取专用 IP 地址的完整使用费。

# 配置备用域名和 HTTPS
<a name="cnames-and-https-procedures"></a>

要在您的文件的 URL 中使用备用域名并在查看器和 CloudFront 之间使用 HTTPS，请执行适用步骤。

**Topics**
+ [

## 获取 SSL/TLS 证书
](#cnames-and-https-getting-certificates)
+ [

## 导入 SSL/TLS 证书
](#cnames-and-https-uploading-certificates)
+ [

## 更新 CloudFront 分配
](#cnames-and-https-updating-cloudfront)

## 获取 SSL/TLS 证书
<a name="cnames-and-https-getting-certificates"></a>

如果您还没有 SSL/TLS 证书，请获取一个。有关更多信息，请参阅相应文档：
+ 要使用 AWS Certificate Manager (ACM) 提供的证书，请参阅 [AWS Certificate Manager 用户指南](https://docs.aws.amazon.com/acm/latest/userguide/)。然后跳至 [更新 CloudFront 分配](#cnames-and-https-updating-cloudfront)。
**注意**  
建议您使用 ACM 在 AWS 托管资源上预置、管理和部署 SSL/TLS 证书。您必须在美国东部（弗吉尼亚州北部）区域申请 ACM 证书。
+ 要从第三方证书颁发机构 (CA) 获取证书，请参阅该证书颁发机构提供的文档。当您拥有该证书时，请继续执行下一个步骤。

## 导入 SSL/TLS 证书
<a name="cnames-and-https-uploading-certificates"></a>

如果您从第三方 CA 得到证书，请将证书导入 ACM，或者上传到 IAM 证书存储：

**ACM（推荐）**  
ACM 可让您从 ACM 控制台以及以编程方式导入第三方证书。有关将证书导入 ACM 的信息，请参阅《AWS Certificate Manager 用户指南》**中的[将证书导入 AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。您必须在美国东部（弗吉尼亚州北部）区域导入证书。

**IAM 证书存储**  
（不推荐）请使用以下 AWS CLI 命令将您的第三方证书上载到 IAM 证书存储。  

```
aws iam upload-server-certificate \
        --server-certificate-name CertificateName \
        --certificate-body file://public_key_certificate_file \
        --private-key file://privatekey.pem \
        --certificate-chain file://certificate_chain_file \
        --path /cloudfront/path/
```
请注意以下几点：  
+ **AWS 账户** – 您必须使用创建 CloudFront 分配时使用的同一个 AWS 账户将证书上传到 IAM 证书存储。
+ **--path 参数** – 在将证书上传到 IAM 时，`--path` 参数（证书路径）的值必须以 `/cloudfront/` 开头，例如 `/cloudfront/production/` 或 `/cloudfront/test/`。该路径必须以 / 结尾。
+ **现有的证书** – 您必须指定 `--server-certificate-name` 和 `--path` 参数的值，这些值不同于与现有证书关联的值。
+ **使用 CloudFront 控制台** – 您在 AWS CLI 中为 `--server-certificate-name` 参数指定的值（例如 `myServerCertificate`）显示在 CloudFront 控制台的 **SSL 证书**列表中。
+ **使用 CloudFront API** – 记下 AWS CLI 返回的字母数字字符串，例如 `AS1A2M3P4L5E67SIIXR3J`。这是您将在 `IAMCertificateId` 元素中指定的值。您无需 IAM ARN（也由 CLI 返回）。
有关 AWS CLI 的更多信息，请参阅 [AWS Command Line Interface 用户指南](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)和 [AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)。

## 更新 CloudFront 分配
<a name="cnames-and-https-updating-cloudfront"></a>

要更新您的分配的设置，请执行以下步骤：<a name="cnames-and-https-updating-cloudfront-procedure"></a>

**为备用域名配置您的 CloudFront 分配**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 为要更新的分配选择 ID。

1. 在 **General** 选项卡上，选择 **Edit**。

1. 更新以下值：  
**备用域名（CNAME）**  
选择**添加项目**，添加适用的备用域名。用逗号隔开多个域名，或在新行中键入每个域名。  
**自定义 SSL 证书**  
从下拉列表中选择证书。  
此处列出了多达 100 个证书。如果您有超过 100 个证书并且您没有看到要添加的证书，则可以在字段中键入一个证书 ARN 以选择它。  
如果您已将证书上传到 IAM 证书存储，但该证书没有被列出，并且您无法通过在字段中键入名称来选择它，请查看过程 [导入 SSL/TLS 证书](#cnames-and-https-uploading-certificates)以确认您已正确上传证书。  
在将您的 SSL/TLS 证书与您的 CloudFront 分配关联之后，在您从所有分配中删除该证书并且已部署所有分配之前，请勿从 ACM 或 IAM 证书存储中删除该证书。

1. 选择**保存更改**。

1. 将 CloudFront 配置为要求查看器与 CloudFront 之间的通信为 HTTPS：

   1. 在**行为**选项卡中，选择要更新的缓存行为，然后选择**编辑**。

   1. 指定 **Viewer Protocol Policy** 的以下值之一：  
**将 HTTP 重定向到 HTTPS**  
查看器可使用两种协议，但 HTTP 请求将自动重定向到 HTTPS 请求。CloudFront 将返回 HTTP 状态代码 `301 (Moved Permanently)` 以及新的 HTTPS URL。然后，查看器会使用此 HTTPS URL 将请求重新提交到 CloudFront。  
CloudFront 不将 `DELETE`、`OPTIONS`、`PATCH`、`POST` 或 `PUT` 请求从 HTTP 重定向到 HTTPS。如果您将一个缓存行为配置为重定向到 HTTPS，CloudFront 会针对该缓存行为的 HTTP `DELETE`、`OPTIONS`、`PATCH`、`POST` 或 `PUT` 请求响应 HTTP 状态代码 `403 (Forbidden)`。
在查看器发出将重定向到 HTTPS 请求的 HTTP 请求时，会产生针对这两个请求的 CloudFront 费用。对于 HTTP 请求，仅对该请求和 CloudFront 返回到查看器的标头计费。对于 HTTPS 请求，对该请求、标头和由您的源返回的文件计费。  
**仅 HTTPS**  
查看器只有使用 HTTPS 才能访问您的内容。如果查看器发送 HTTP 请求而不是 HTTPS 请求，则 CloudFront 将返回 HTTP 状态代码 `403 (Forbidden)` 且不会返回此文件。

   1. 选择**是，编辑**。

   1. 针对要求在查看器和 CloudFront 之间使用 HTTPS 的其他每个缓存行为，重复步骤 a 到 c。

1. 请确认以下内容，然后在生产环境中使用更新后的配置：
   + 每个缓存行为中的路径模式仅适用于您希望查看器使用 HTTPS 的请求。
   + 缓存行为按您希望 CloudFront 评估它们的顺序列出。有关更多信息，请参阅 [路径模式](DownloadDistValuesCacheBehavior.md#DownloadDistValuesPathPattern)。
   + 缓存行为将请求路由到正确的源。

# 确定 SSL/TLS RSA 证书中公有密钥的大小
<a name="cnames-and-https-size-of-public-key"></a>

如果您使用的是 CloudFront 备用域名和 HTTPS，则 SSL/TLS RSA 证书中公有密钥的最大大小为 4096 位。(这是密钥大小，不是指公有密钥中的字符数。) 在使用 AWS Certificate Manager 提供您的证书的情况下，虽然 ACM 支持更大的 RSA 密钥，但您无法在 CloudFront 中使用更大的密钥。

您可以通过运行以下 OpenSSL 命令来确定 RSA 公有密钥的大小：

```
openssl x509 -in path and filename of SSL/TLS certificate -text -noout 
```

其中：
+ `-in` 指定您的 SSL/TLS RSA 证书的路径和文件名。
+ `-text` 使 OpenSSL 以位为单位显示 RSA 公有密钥的长度。
+ `-noout` 阻止 OpenSSL 显示公有密钥。

输出示例：

```
Public-Key: (2048 bit)
```

# 增加 SSL/TLS 证书的配额
<a name="increasing-the-limit-for-ssl-tls-certificates"></a>

您可以导入到 AWS Certificate Manager（ACM）或上传至 AWS Identity and Access Management（IAM）的 SSL/TLS 证书的数量存在配额。在将 CloudFront 配置为使用专用 IP 地址处理 HTTPS 请求时，可以在一个AWS 账户中使用的 SSL/TLS 证书数也存在配额。但是，您可以请求提高配额。

**Topics**
+ [

## 增加导入 ACM 的证书的配额
](#certificates-to-import-into-acm)
+ [

## 增加上传至 IAM 的证书的配额
](#certificates-to-upload-into-iam)
+ [

## 增加用于专用 IP 地址的证书配额
](#certificates-using-dedicated-ip-address)

## 增加导入 ACM 的证书的配额
<a name="certificates-to-import-into-acm"></a>

有关可以导入到 ACM 的证书数量的配额，请参阅《AWS Certificate Manager 用户指南》**中的[配额](https://docs.aws.amazon.com/acm/latest/userguide/acm-limits.html)。

要申请更高的配额，您可以使用服务配额控制台。有关更多信息，请参阅《服务配额用户指南》**中的 [Requesting a quota increase](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 增加上传至 IAM 的证书的配额
<a name="certificates-to-upload-into-iam"></a>

有关可上传到 IAM 的证书数量的配额（以前称为限制），请参阅《IAM 用户指南》**中的 [IAM 和 STS 限制](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html)。

要申请更高的配额，您可以使用服务配额控制台。有关更多信息，请参阅《服务配额用户指南》**中的 [Requesting a quota increase](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

## 增加用于专用 IP 地址的证书配额
<a name="certificates-using-dedicated-ip-address"></a>

在使用专用 IP 地址处理 HTTPS 请求时，有关可用于每个AWS 账户的 SSL 证书的数量配额，请参阅 [SSL 证书的配额](cloudfront-limits.md#limits-ssl-certificates)。

要申请更高的配额，您可以使用服务配额控制台。有关更多信息，请参阅《服务配额用户指南》**中的 [Requesting a quota increase](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)。

# 轮换 SSL/TLS 证书
<a name="cnames-and-https-rotate-certificates"></a>

当 SSL/TLS 证书即将到期时，您需要轮换它们，以确保分配的安全性，并避免查看器出现服务中断。可以通过以下方式轮换证书：
+ 对于 AWS Certificate Manager（ACM）提供的 SSL/TLS 证书，无需轮换。ACM *自动* 为您管理证书续订。有关更多信息，请参阅《AWS Certificate Manager User Guide》**中的 [Managed certificate renewal](https://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html)。
+ 如果您使用的是第三方证书颁发机构，并且已将证书导入到 ACM（推荐）或上传到 IAM 证书存储中，则有时必须将一个证书更换为另一个证书。

  

**重要**  
对于您从第三方证书颁发机构获取并导入 ACM 的证书，ACM 不会为其管理证书续订。
如果您将 CloudFront 配置为使用专用 IP 地址提供 HTTPS 请求，就您在轮换证书时使用一个或多个其他证书，可能会产生额外的按比例分摊的费用。建议您更新分配，以最大程度地降低额外费用。

## 轮换 SSL/TLS 证书
<a name="rotate-ssl-tls-certificate"></a>

要轮换证书，请执行以下过程。在您轮换证书以及轮换过程完成时，查看器可以继续访问您的内容。<a name="rotate-ssl-tls-certificates-proc"></a>

**轮换 SSL/TLS 证书**

1. [增加 SSL/TLS 证书的配额](increasing-the-limit-for-ssl-tls-certificates.md)以确定您是否需要权限来使用更多的 SSL 证书。如果需要，可请求权限并等待授予权限，然后继续执行步骤 2。

1. 将新证书导入 ACM 或者上传到 IAM。有关更多信息，请参阅《Amazon CloudFront 开发人员指南》**中的[导入 SSL/TLS 证书](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-procedures.html#cnames-and-https-uploading-certificates)。

1. （仅适用于 IAM 证书）请一次更新一项分配，使其使用新证书。有关更多信息，请参阅 [更新分配](HowToUpdateDistribution.md)。

1. （可选）从 ACM 或 IAM 中删除之前的证书。
**重要**  
在将 SSL/TLS 证书从所有分配中移除并且已更新的分配的状态变为 `Deployed` 之前，请勿删除该证书。

# 从自定义 SSL/TLS 证书恢复为默认 CloudFront 证书
<a name="cnames-and-https-revert-to-cf-certificate"></a>

如果您将 CloudFront 配置为在查看器和 CloudFront 之间使用 HTTPS，并将 CloudFront 配置为使用自定义 SSL/TLS 证书，则可以更改配置以使用默认的 CloudFront SSL/TLS 证书。此过程取决于您是否已使用分配来分发内容：
+ 如果您尚未使用分配来分发内容，则只需更改配置。有关更多信息，请参阅 [更新分配](HowToUpdateDistribution.md)。
+ 如果您已使用分配来分发内容，则必须创建新的 CloudFront 分配并更改文件的 URL，以便减少或消除内容不可用的时间。为此，请执行以下步骤。

## 恢复到默认 CloudFront 证书
<a name="revert-default-cloudfront-certificate"></a>

以下步骤演示如何从自定义 SSL/TLS 证书恢复为默认 CloudFront 证书。<a name="cnames-and-https-revert-to-cf-certificate-proc"></a>

**恢复到默认 CloudFront 证书**

1. 采用所需的配置创建一项新的 CloudFront 分配。对于 **SSL 证书**，请选择**默认 CloudFront 证书 (\$1.cloudfront.net)**。

   有关更多信息，请参阅 [创建分配](distribution-web-creating-console.md)。

1. 对于使用 CloudFront 分配的文件，请将您应用程序中的 URL 更新为使用 CloudFront 为新分配指定的域名。例如，将 `https://www.example.com/images/logo.png` 更改为 `https://d111111abcdef8.cloudfront.net/images/logo.png`。

1. 删除与自定义 SSL/TLS 证书关联的分配，或者更新分配以将 **SSL 证书**值更改为**默认 CloudFront 证书 (\$1.cloudfront.net)**。有关更多信息，请参阅 [更新分配](HowToUpdateDistribution.md)。
**重要**  
在您完成此步骤之前，AWS 会继续向您收取使用自定义 SSL/TLS 证书的费用。

1. （可选）删除您的自定义 SSL/TLS 证书。

   1. 运行 AWS CLI 命令 `list-server-certificates` 以获取要删除的证书的证书 ID。有关更多信息，请参阅 *AWS CLI命令参考*中的 [list-server-certificates](https://docs.aws.amazon.com/cli/latest/reference/iam/list-server-certificates.html)。

   1. 运行 AWS CLI 命令 `delete-server-certificate` 以删除该证书。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [delete-server-certificate](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-server-certificate.html)。

# 将使用专用 IP 地址的自定义 SSL/TLS 证书切换到 SNI
<a name="cnames-and-https-switch-dedicated-to-sni"></a>

如果您已将 CloudFront 配置为使用自定义 SSL/TLS 证书及专用 IP 地址，可以改为切换到使用自定义 SSL/TLS 证书及 SNI，并消除与专用 IP 地址关联的费用。

**重要**  
对您的 CloudFront 配置进行此更新不会影响支持 SNI 的查看器。查看器既可以在更改前后访问您的内容，也可以在将更改传播到 CloudFront 边缘站点时访问您的内容。不支持 SNI 的查看器在更改后无法访问您的内容。有关更多信息，请参阅 [选择 CloudFront 如何处理 HTTPS 请求](cnames-https-dedicated-ip-or-sni.md)。

## 从自定义证书切换到 SNI
<a name="cloudfront-switch-custom-cert-sni"></a>

以下步骤演示如何将使用专用 IP 地址的自定义 SSL/TLS 证书切换到 SNI。<a name="cnames-and-https-switch-dedicated-to-sni-proc"></a>

**使用专用 IP 地址从自定义 SSL/TLS 证书切换到 SNI**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 选择要查看或更新的分配的 ID。

1. 选择**分配设置**。

1. 在 **General** 选项卡上，选择 **Edit**。

1. 在**自定义 SSL 证书 – *可选***下，取消选择**传统客户端支持**。

1. 选择**是，编辑**。