View a markdown version of this page

通过 ACME 颁发证书 - AWS Certificate Manager

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

通过 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 无权访问私钥。

  • 无法绑定到集成服务:由于 AWS 不包含私钥,因此 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 证书 (AWS CLI)

list-certificatesCertificateKeyPairOrigins过滤器一起使用:

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

搜索 ACME 证书 (AWS CLI)

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

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

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

查看证书详细信息 (AWS 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