最佳实践 - AWS Certificate Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

最佳实践

最佳实践是一些建议,可帮助您更有效地使用 AWS Certificate Manager (AWS Certificate Manager)。以下最佳实践基于来自当前 ACM 客户的实际经验。

AWS CloudFormation

利用 AWS CloudFormation,您可以创建一个模板来描述要使用的 AWS 资源。随后,AWS CloudFormation 将为您预置和配置这些资源。AWS CloudFormation 可以为您预置 ACM 支持的资源,例如 Elastic Load Balancing、Amazon CloudFront 和 Amazon API Gateway。有关更多信息,请参阅与 AWS Certificate Manager 集成的服务

如果您使用 AWS CloudFormation 快速创建和删除多个测试环境,建议您不要为每个环境创建单独的 ACM 证书。这样做会快速耗尽您的证书配额。有关更多信息,请参阅配额。相反,创建一个涵盖了您用于测试的所有域名的通配符证书。例如,如果您针对仅版本号发生变化的域名重复创建 ACM 证书(如 <version>.service.example.com),则改为针对 <*>.service.example.com 创建单个通配符证书。在 AWS CloudFormation 用来创建测试环境的模板中包含通配符证书。

证书固定

证书固定 (有时称作 SSL 固定) 是一个过程,可在应用程序中使用此过程来验证远程主机,方式是将该主机直接与其 X.509 证书或公有密钥而非证书层次结构关联。因此,应用程序使用固定来绕过 SSL/TLS 证书链验证。典型的 SSL 验证过程将检查证书链 (从根证书颁发机构 (CA) 证书到从属 CA 证书 (如果有)) 中的签名。此外,它还检查层次结构底部远程主机的证书。您的应用程序可改为固定到远程主机的证书以指示 该证书 (而非根证书或链中的任何其他证书) 受信任。在应用程序开发过程中,您可以将远程主机的证书或公有密钥添加到应用程序。或者,应用程序也可以在首次连接到主机时添加证书或密钥。

警告

建议您的应用程序要固定 ACM 证书。ACM 会执行适用于 ACM 的由 Amazon 颁发的证书的托管续订以在 Amazon 颁发的 SSL/TLS 证书过期前自动进行续订。为了续订证书,ACM 会生成新的公有-私有密钥对。如果您的应用程序固定 ACM 证书,并且已使用新的公有密钥成功续订证书,则应用程序可能无法连接到您的域。

如果您决定固定证书,则以下选项将不会阻止您的应用程序连接到您的域:

  • 将您自己的证书导入到 ACM 中,然后将您的应用程序固定到导入的证书。ACM 不会尝试自动续订导入的证书。

  • 如果您使用的是公有证书,则将您的应用程序固定到所有可用的 Amazon 根证书。如果您使用的是私有证书,则将您的应用程序固定到 CA 的根证书。

域验证

AWS Certificate Manager (ACM) 必须先确认您拥有或可以控制请求中指定的所有域,然后 Amazon 证书颁发机构 (CA) 才能为网站颁发证书。您可以使用电子邮件或 DNS 执行验证。有关更多信息,请参阅 使用 DNS 验证域所有权使用电子邮件验证域所有权

添加或删除域名

您无法在现有 ACM 证书中添加或删除域名。而必须请求包含修订过的域名列表的新证书。例如,如果证书有五个域名,并且需要添加四个域名,则必须请求包含九个域名的新证书。与任何新证书一样,您必须对请求中的所有域名验证所有权,包括之前为原始证书验证过的域名。

如果使用电子邮件验证,则对于每个域,您最多将收到 8 封验证电子邮件,并且您必须在 72 小时之内至少根据其中 1 封邮件执行操作。例如,如果请求包含五个域名的证书,您最多将收到 40 封验证电子邮件,并且您必须在 72 小时之内至少根据其中 5 封执行操作。随着证书请求中域名数量的增加,使用电子邮件来验证域所有权所需的工作量也会增加。

如果使用 DNS 验证,则必须为需要验证的 FQDN 向数据库写入一条新 DNS 记录。ACM 会向您发送要创建的记录,并在稍后查询数据库以确定是否已添加该记录。添加该记录即声明您拥有或可以控制该域。在前面的示例中,如果请求包含五个域名的证书,则必须创建五条 DNS 记录。建议您尽量使用 DNS 验证。

选择退出证书透明度日志记录

重要

无论您采取何种操作退出证书透明度日志记录,您的证书都可能仍被任何有权访问您将证书绑定到的公共或私有终端节点的客户端或个人所记录。不过,证书将不会包含已签名的证书时间戳 (SCT)。只有发布证书的 CA 才能将 SCT 嵌入到证书中。

从 2018 年 4 月 30 日开始,Google Chrome 不再信任未在证书透明度日志中记录的公有 SSL/TLS 证书。因此,从 2018 年 4 月 24 日起,Amazon CA 已开始在至少两个公有日志中发布所有新证书和续订。证书一旦记录,便无法删除。有关更多信息,请参阅证书透明度日志

当您请求证书或续订证书时,会自动执行日志记录,但您可以选择退出。这样做的常见原因包括对安全和隐私的疑虑。例如,记录内部主机域名会向潜在的攻击者提供有关内部网络的信息,否则将不会公开。此外,日志记录还可能会泄露新的或未发布的产品和网站的名称。

要在请求证书时选择退出透明度日志记录,请使用 request-certificate AWS CLI 命令的 Options 参数或 RequestCertificate API。

如果您的证书是在 2018 年 4 月 24 日之前颁发的,并且您希望确保在续订过程中不记录它,则可以调用 update-certificate-options 命令或 UpdateCertificateOptions API 以选择退出。

证书一旦记录,便无法从日志中删除。在该时间点选择退出将不起作用。如果您在请求证书时选择退出日志记录,然后在稍后再选择回来,则您的证书将不会被记录,直到续订它为止。如果您希望证书被立即记录,我们建议您发布一个新的证书。

注意

目前,您不能使用控制台选择退出或加入透明度日志记录。

以下示例向您展示了在请求新的证书时如何使用 request-certificate 命令禁用证书透明度。

aws acm request-certificate \ --domain-name www.example.com \ --validation-method DNS \ --options CertificateTransparencyLoggingPreference=DISABLED \ --idempotency-token 184627

上述命令输出新证书的 ARN。

{ "CertificateArn": "arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012" }

如果您已有一个证书,并且您不希望在续订它时记录它,请使用 update-certificate-options 命令。此命令不返回值。

aws acm update-certificate-options \ --certificate-arn arn:aws:acm:region:account:\ certificate/12345678-1234-1234-1234-123456789012 \ --options CertificateTransparencyLoggingPreference=DISABLED

启用 AWS CloudTrail。

在开始使用 ACM 之前,请先启用 CloudTrail 日志记录。利用 CloudTrail,您可以通过检索账户的 AWS API 调用历史记录来监控 AWS 部署,包括通过 AWS 管理控制台、AWS 开发工具包、AWS Command Line Interface 以及更高级的 AWS 服务执行的 API 调用。您还可以确定调用 ACM API 的用户和账户、发出调用的源 IP 地址以及发生调用的时间。您可将 CloudTrail 集成到使用 API 的应用程序、为您的组织自动创建跟踪、检查跟踪的状态和控制管理员启用和关闭 CloudTrail 日志记录的方式。有关更多信息,请参阅创建跟踪。转到 将 CloudTrail 与 AWS Certificate Manager 结合使用 以查看 ACM 操作的示例跟踪。