View a markdown version of this page

通过 ACME 颁发证书 - Amazon Certificate Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过 ACME 颁发证书

在您的 PKI 管理员设置具有域验证和外部帐户绑定的 ACME 端点后,应用程序所有者可以使用 ACME 客户端颁发证书。本节描述了颁发流程,提供了使用 Certbot 的简短示例,并解释了 ACME-issued 证书在 ACM 中的显示方式。

发行是如何运作的

ACME 证书颁发流程遵循 RFC 8555 协议:

  1. 账户注册:ACME 客户端使用 EAB 凭证(密钥 ID 和 MAC 密钥)注册账户。这是每个 ACME 客户端的一次性步骤。

  2. 证书订单:客户端创建订单,指定证书的域名。

  3. 授权:ACME 服务器检查预配置的域验证。由于端点使用PRE_APPROVED授权,因此不需要客户端进行实时质询。

  4. 完成:客户提交证书签名请求 (CSR) 以完成订单,ACM 颁发证书。

  5. 下载:客户端下载已颁发的证书链。

重要

私钥由 ACME 客户端生成,永远不会离开客户端的系统。

示例:使用 Certbot 颁发证书

此示例说明如何使用 Certbot 注册 ACME 账户并申请证书。

先决条件

  • 处于ACTIVE状态的 ACME 终端节点(你有目录 URL)

  • 您想要的域名至少有一个域名验证VALID处于状态

  • 来自您的 PKI 管理员的 EAB 凭证(密钥 ID 和 MAC 密钥)

  • 您的系统上安装了 Certbot

注册账户并申请证书

重要

通过 ACM ACME 端点颁发证书最多可能需要两分钟。将 ACME 客户端的颁发超时配置为至少 120 秒(2 分钟),以防止客户端在证书交付之前超时。许多 ACME 客户端默认为 30-90 秒,但这还不够。

运行以下命令:

certbot certonly \ --standalone \ --non-interactive \ --agree-tos \ --email user@example.com \ --server https://acm-acme-enroll.region.api.aws/00000000-0000-0000-0000-000000000000/directory \ --eab-kid AAABBBCCC111222333 \ --eab-hmac-key base64encodedmackey \ --issuance-timeout 120 \ --domain www.example.com

成功颁发后,Certbot 会将证书和私钥存储在其默认位置(通常/etc/letsencrypt/live/www.example.com/)。

ACM 中的 ACME 证书

通过 ACME 颁发的证书会自动收到标准 ACM 证书 ARN,并显示在 ACM 证书清单中。但是, ACME-issued 证书与通过颁发的证书有重要区别RequestCertificate

主要区别

  • 私钥在客户端:证书私钥由 ACME 客户端生成和存储。ACM 无权访问私钥。

  • 无法绑定到集成服务:由于 Amazon 不包含私钥,因此 ACME 证书不能与 Elastic Load Balancing 或 API Gateway 一起使用。 CloudFront

  • 不在默认列表输出中:默认情况下,ACME 证书不会出现在ListCertificates结果中。必须包括带有值的CertificateKeyPairOrigins过滤器ACME才能将其包括在内。 SearchCertificates默认情况下返回 ACME 证书。

  • 无法通过 ACM 导出:无法使用 ExportCertificate API,因为自从客户端拥有证书以来,证书已经按定义导出了。

  • 仅通过 ACME 撤销:使用 ACME 端点的吊销证书网址。ACM RevokeCertificate API 不适用于 ACME-issued证书。

  • 续订由客户主导:ACM 不会自动续订 ACME 证书。ACME 客户端必须在现有证书到期之前申请新证书。

查看 ACME 证书

在 ACM 控制台中,使用筛选器来包含以 ACME key pair 为来源的证书。有关查找证书的更多信息,请参阅搜索证书

列出 ACME 证书 (Amazon CLI)

list-certificatesCertificateKeyPairOrigins过滤器一起使用:

aws acm list-certificates \ --certificate-key-pair-origins ACME

搜索 ACME 证书 (Amazon CLI)

CertificateKeyPairOrigin筛选器search-certificates一起使用,按其他条件查找 ACME 证书:

aws acm search-certificates \ --filter-statement '{"Filter": {"AcmCertificateMetadataFilter": {"CertificateKeyPairOrigin": "ACME"}}}'

您还可以通过筛选或来搜索通过特定终端节点或 ACME 账户颁发的AcmeEndpointArn证书。AcmeAccountId

查看证书详细信息 (Amazon CLI)

运行以下命令:

aws acm describe-certificate \ --certificate-arn arn:aws:acm:region:account-id:certificate/certificate-id

撤销 ACME 证书

要吊销通过 ACME 颁发的证书,请使用 ACME 协议的吊销证书端点。ACME 客户端负责处理此问题。

注意

ACME-issued 无法使用 ACM RevokeCertificate API 吊销证书。您必须通过颁发这些证书的 ACME 终端节点吊销这些证书。

以下示例显示了如何使用 Certbot 进行撤销:

certbot revoke \ --cert-path /etc/letsencrypt/live/www.example.com/cert.pem \ --server https://acm-acme-enroll.region.api.aws/00000000-0000-0000-0000-000000000000/directory

撤销由与客户的外部账户绑定关联的 IAM 角色授权,因此适用于标准acm:RevokeCertificate操作的 IAM 策略和 SCP 在此处适用。有关所需的 IAM 角色配置的更多信息,请参阅用于 ACME 证书自动化的 IAM

证书续订

ACM 不会续订 ACME 证书。您的 ACME 客户端负责在当前证书到期之前申请新证书。大多数 ACME 客户端(包括 Certbot)都支持通过计划任务(例如 cron 作业或 systemd 计时器)自动续订。

续订期间的 ARN 稳定性

当 ACME 客户端续订证书时,ACM 会确定新颁发的证书是续订现有证书还是不同证书。如果颁发来自具有相同证书元数据(例如域名和密钥算法)的同一 ACME 账户,则 ACM 会更新现有证书 ARN,而不是创建新的证书 ARN。这使ARN在续订期间保持稳定,从而简化了跟踪和自动化。

如果原始证书已从 ACM 中删除(例如,因为它已在一年多前过期并被自动删除),则后续颁发的具有相同元数据的证书将创建新的证书 ARN。

Certbot 自动续订示例(通常在 Certbot 安装期间自动配置):

certbot renew --quiet