aws-cli 实战:使用 acm request-certificate 申请与管理 ACM 证书
2026/9/14 20:24:17 网站建设 项目流程

aws-cli 实战:使用 acm request-certificate 申请与管理 ACM 证书

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

导读

本文围绕 aws-cli 中aws acm request-certificate命令展开,讲解如何通过命令行向 AWS Certificate Manager (ACM) 发起新证书申请。你将掌握--domain-name--validation-method--subject-alternative-names--idempotency-token--domain-validation-options--options等核心参数的真实用法,并了解底层服务模型(service-2.json)对参数约束、校验方法枚举与幂等语义的定义,从而写出可直接运行、行为可预期的证书申请命令。

命令概览:申请一张新 ACM 证书

request-certificate对应的底层 API 是RequestCertificate,其唯一必填参数DomainName(在 service-2.json 的required: ["DomainName"]中声明)。最简单的申请命令如下:

aws acm request-certificate \ --domain-name www.example.com \ --validation-method DNS

这是 request-certificate.rst 中的第一个示例:为www.example.com申请证书,并使用 DNS 验证方式。命令成功后,服务端会立即返回一个证书 ARN(RequestCertificateResponse仅包含CertificateArn一个字段),格式形如:

arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012

注意,ARN 只是"受理凭证",证书签发需要完成域名验证,验证通过前证书处于PENDING_VALIDATION状态。

验证方法:DNS、EMAIL 与 HTTP

--validation-method的取值在服务模型中由ValidationMethod枚举严格限定(service-2.json):

取值说明
DNS在域名 DNS 记录中添加 CNAME 记录完成验证,推荐使用,便于 ACM 自动续期
EMAIL通过向域名管理员邮箱发送验证邮件完成验证
HTTP通过 HTTP 文件验证(面向部分服务/集成场景)

ValidationMethod仅对公有证书申请有意义:申请私有证书时不需要域验证,因此无需指定该方法。

幂等令牌:防止重复申请

ACM 的RequestCertificate是幂等操作。--idempotency-token用于区分多次调用:令牌在一小时内超时,在一小时内使用相同令牌重复调用,ACM 会认为你在请求同一张证书,只签发一张;更换令牌则视为申请多张证书。该参数的底层约束见 service-2.json:长度 1~32 字符,且只能由\w+(字母、数字、下划线)构成。

aws acm request-certificate \ --domain-name www.example.com \ --validation-method DNS \ --idempotency-token 91adc45q

在脚本或 CI 流程中重试申请时,务必复用同一个令牌,避免意外产生多张证书。

一张证书保护多个域名:SAN 与通配符

ACM 证书的域名主体(Common Name)最多 64 字节(受 RFC 5280 约束),更长的域名需要放进 SAN。--subject-alternative-names用于添加主体备用名称(SAN)。

添加单个备用域名

如果需要保护"www"以外的访问入口,可以这样:

aws acm request-certificate \ --domain-name example.com \ --validation-method DNS \ --idempotency-token 91adc45q \ --subject-alternative-names www.example.com

这样一张证书同时覆盖example.comwww.example.com

通配符证书

使用星号(*)可以为同一域名下的多个子域签发通配符证书:

aws acm request-certificate \ --domain-name example.com \ --validation-method DNS \ --idempotency-token 91adc45q \ --subject-alternative-names *.example.com

该证书将保护www.example.comsite.example.comimages.example.com等同域子站点。

一次添加多个 SAN

SAN 参数支持传入多个域名(空格分隔):

aws acm request-certificate \ --domain-name example.com \ --validation-method DNS \ --subject-alternative-names b.example.com c.example.com d.example.com

从服务模型看,SAN 域名总数量上限为 100,但初始配额为 10 个域名,超出需申请配额提升;单个 SAN 名称最长 253 字节(octets),由点号分隔的多个 label 组成,每个 label 不得超过 63 字节。域名格式统一由DomainNameString正则约束(service-2.json):允许以*.开头的通配符,各 label 不能以连字符开头或结尾。

邮件验证场景:指定验证域

如果使用EMAIL验证,可通过--domain-validation-options指定 ACM 发送验证邮件的域。其结构为DomainName=xxx,ValidationDomain=yyy

aws acm request-certificate \ --domain-name example.com \ --validation-method EMAIL \ --subject-alternative-names www.example.com \ --domain-validation-options DomainName=example.com,ValidationDomain=example.com

从底层定义看(service-2.json),DomainValidationOption的两个字段都必填,且ValidationDomain必须是DomainName本身或其超域(superdomain)。例如申请testing.example.com的证书时,可以把ValidationDomain指定为example.com,ACM 会向admin@administrator@hostmaster@postmaster@webmaster@example.com这五个地址发送验证邮件,方便你选择真正可控的邮箱域来接收验证邮件。

证书选项与透明度日志

--options参数用于控制证书级选项,对应模型中的CertificateOptions(service-2.json)。request-certificate.rst中给出了关闭透明度日志的示例:

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

需要特别说明的是,该CertificateTransparencyLoggingPreference字段已被官方标记为 deprecated(service-2.json 中"deprecated": true,弃用说明为 "Certificate transparency logging opt-out is no longer available")。证书透明度(CT)日志退出机制已不再可用,所有公有证书都会被记录在 CT 日志中。因此在实际业务中,这一项更多是历史命令的兼容性示例;当前CertificateOptions中的有效选项是Export(设为ENABLED可允许导出公有证书,证书创建后不可再修改该值)。

更多进阶参数:私有证书、密钥算法与标签

虽然request-certificate.rst示例未涉及,但RequestCertificateRequest模型还支持以下实用参数,值得了解:

  • --certificate-authority-arn:指定私有 CA(格式arn:aws:acm-pca:region:account:certificate-authority/...),用于申请私有证书。注意:若想申请私有证书却不提供该 ARN,ACM 会尝试签发公有证书。
  • --key-algorithm:选择密钥算法。ACM 证书申请支持的算法包括RSA_2048(默认)、EC_prime256v1EC_secp384r1(service-2.json 中枚举还包含RSA_1024RSA_3072RSA_4096EC_secp521r1,但这些仅适用于导入证书)。RSA 是默认算法;ECDSA 密钥更小、计算效率更高,但并非所有网络客户端和 AWS 服务都支持,部署前需确认目标服务的兼容性要求。
  • --tags:为证书关联资源标签,便于按成本中心或环境管理证书。

申请后的链路:验证、签发与配套命令

证书申请成功只是第一步。结合本仓库awscli/examples/acm/目录下的配套命令,完整生命周期如下:

  1. request-certificate提交申请并拿到CertificateArn
  2. 使用describe-certificate查看证书当前状态与验证记录(DomainValidationOptions中会给出需要添加的 CNAME 值或待验证邮箱);
  3. 完成 DNS CNAME 或邮件验证后,证书变为ISSUED
  4. 将证书部署到 ELB、CloudFront、API Gateway 等服务,或在需要时通过export-certificateget-certificate获取证书与证书链(配合 export-certificate.rst);
  5. 若邮件验证邮件未收到,可用resend-validation-email重新发送验证邮件;
  6. 证书进入续期期后,ACM 会为使用 DNS 验证的证书自动续期,无需人工介入。

仓库中 acm 目录共收录了 12 个命令示例(含add-tags-to-certificatedelete-certificatelist-certificatesimport-certificate等),与request-certificate相互配合,可以覆盖证书从申请、验证、部署到回收的完整运维闭环。

总结与最佳实践

综合示例文档与底层服务模型,使用aws acm request-certificate时建议遵循以下实践:

  1. 优先使用 DNS 验证--validation-method DNS),它是推荐方式,且 ACM 的托管续期依赖 DNS 记录;
  2. 善用幂等令牌:在自动化脚本中固定--idempotency-token,避免重试产生重复证书;令牌仅 1~32 字符且为字母数字下划线;
  3. 合理规划域名数量:单张证书的 SAN 上限为 100,初始配额 10;主体域名(Common Name)不要超过 64 字节,更长域名放入 SAN;
  4. 通配符只保护单层子域*.example.com不会覆盖a.b.example.com这类多级子域,需要时叠加多个 SAN;
  5. 公私钥类型要匹配:申请私有证书时,密钥算法族(RSA/ECDSA)必须与 CA 密钥算法族一致;
  6. CT 日志无需干预:证书透明度记录已强制执行,无需(也无法)通过--options关闭。

以上所有参数约束、枚举值与幂等语义均可在仓库的 acm 服务模型 中逐一核对,命令行行为以当前 aws-cli 仓库实现的模型为准。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询