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.com与www.example.com。
通配符证书
使用星号(*)可以为同一域名下的多个子域签发通配符证书:
aws acm request-certificate \ --domain-name example.com \ --validation-method DNS \ --idempotency-token 91adc45q \ --subject-alternative-names *.example.com该证书将保护www.example.com、site.example.com、images.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_prime256v1、EC_secp384r1(service-2.json 中枚举还包含RSA_1024、RSA_3072、RSA_4096、EC_secp521r1,但这些仅适用于导入证书)。RSA 是默认算法;ECDSA 密钥更小、计算效率更高,但并非所有网络客户端和 AWS 服务都支持,部署前需确认目标服务的兼容性要求。--tags:为证书关联资源标签,便于按成本中心或环境管理证书。
申请后的链路:验证、签发与配套命令
证书申请成功只是第一步。结合本仓库awscli/examples/acm/目录下的配套命令,完整生命周期如下:
request-certificate提交申请并拿到CertificateArn;- 使用
describe-certificate查看证书当前状态与验证记录(DomainValidationOptions中会给出需要添加的 CNAME 值或待验证邮箱); - 完成 DNS CNAME 或邮件验证后,证书变为
ISSUED; - 将证书部署到 ELB、CloudFront、API Gateway 等服务,或在需要时通过
export-certificate、get-certificate获取证书与证书链(配合 export-certificate.rst); - 若邮件验证邮件未收到,可用
resend-validation-email重新发送验证邮件; - 证书进入续期期后,ACM 会为使用 DNS 验证的证书自动续期,无需人工介入。
仓库中 acm 目录共收录了 12 个命令示例(含add-tags-to-certificate、delete-certificate、list-certificates、import-certificate等),与request-certificate相互配合,可以覆盖证书从申请、验证、部署到回收的完整运维闭环。
总结与最佳实践
综合示例文档与底层服务模型,使用aws acm request-certificate时建议遵循以下实践:
- 优先使用 DNS 验证(
--validation-method DNS),它是推荐方式,且 ACM 的托管续期依赖 DNS 记录; - 善用幂等令牌:在自动化脚本中固定
--idempotency-token,避免重试产生重复证书;令牌仅 1~32 字符且为字母数字下划线; - 合理规划域名数量:单张证书的 SAN 上限为 100,初始配额 10;主体域名(Common Name)不要超过 64 字节,更长域名放入 SAN;
- 通配符只保护单层子域:
*.example.com不会覆盖a.b.example.com这类多级子域,需要时叠加多个 SAN; - 公私钥类型要匹配:申请私有证书时,密钥算法族(RSA/ECDSA)必须与 CA 密钥算法族一致;
- CT 日志无需干预:证书透明度记录已强制执行,无需(也无法)通过
--options关闭。
以上所有参数约束、枚举值与幂等语义均可在仓库的 acm 服务模型 中逐一核对,命令行行为以当前 aws-cli 仓库实现的模型为准。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考