本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过 ACME 颁发证书
在您的 PKI 管理员设置具有域验证和外部帐户绑定的 ACME 端点后,应用程序所有者可以使用 ACME 客户端颁发证书。本节描述了颁发流程,提供了使用 Certbot 的简短示例,并解释了 ACME-issued 证书在 ACM 中的显示方式。
发行是如何运作的
ACME 证书颁发流程遵循 RFC 8555 协议:
-
账户注册:ACME 客户端使用 EAB 凭证(密钥 ID 和 MAC 密钥)注册账户。这是每个 ACME 客户端的一次性步骤。
-
证书订单:客户端创建订单,指定证书的域名。
-
授权:ACME 服务器检查预配置的域验证。由于端点使用
PRE_APPROVED授权,因此不需要客户端进行实时质询。 -
完成:客户提交证书签名请求 (CSR) 以完成订单,ACM 颁发证书。
-
下载:客户端下载已颁发的证书链。
重要
私钥由 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 \ --emailuser@example.com\ --server https://acm-acme-enroll.region.api.aws/00000000-0000-0000-0000-000000000000/directory \ --eab-kidAAABBBCCC111222333\ --eab-hmac-keybase64encodedmackey\ --issuance-timeout 120 \ --domainwww.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 导出:无法使用
ExportCertificateAPI,因为自从客户端拥有证书以来,证书已经按定义导出了。 -
仅通过 ACME 撤销:使用 ACME 端点的吊销证书网址。ACM
RevokeCertificateAPI 不适用于 ACME-issued证书。 -
续订由客户主导:ACM 不会自动续订 ACME 证书。ACME 客户端必须在现有证书到期之前申请新证书。
查看 ACME 证书
在 ACM 控制台中,使用筛选器来包含以 ACME key pair 为来源的证书。有关查找证书的更多信息,请参阅搜索证书。
列出 ACME 证书 (AWS CLI)
list-certificates与CertificateKeyPairOrigins过滤器一起使用:
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