AWS CLI 实战:使用 `aws acm get-certificate` 检索 ACM 证书与证书链

发布时间:2026/9/14 18:47:24
AWS CLI 实战:使用 `aws acm get-certificate` 检索 ACM 证书与证书链 AWS CLI 实战使用aws acm get-certificate检索 ACM 证书与证书链【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读本文围绕 AWS CLI 中aws acm get-certificate命令展开讲解如何通过证书 ARN 一次性获取 ACMAWS Certificate Manager签发的 PEM 格式证书正文与完整证书链帮助你在部署到负载均衡器、API 网关、CloudFront 等场景前完成证书材料的拉取与校验。读完本文你将掌握该命令的参数格式、输出结构、与describe-certificate的职责区分、常见异常处理以及结合 OpenSSL 对证书内容做深入解析的实操方法。get-certificate的官方使用示例位于仓库 awscli/examples/acm/get-certificate.rst本文以其为骨架结合 AWS CLI 的 ACM 服务模型定义 进行源码级佐证。命令概述get-certificate 解决什么问题ACM 负责证书的申请、签发、续期与部署管理。当你需要把证书以原始 PEM 文本的形式取出来使用例如配置非 AWS 集成的第三方服务器、或人工检查证书内容时get-certificate就是那个取件命令。按 service-2.json 中 GetCertificate 操作的官方文档 的定义该操作检索一个证书及其证书链。其中证书可以是通过 ACMRequestCertificate动作签发的公有或私有证书通过ImportCertificate动作导入ACM 的证书。返回的证书链由签发该证书的 CA 证书以及其他下级 CA 的中间证书组成所有证书均为base64 编码即 PEM 格式可以使用 OpenSSL 解码并检查其中各个字段。与 describe-certificate 的分工初学者常混淆的两个命令命令返回内容典型用途aws acm describe-certificate证书元数据ARN、域名、颁发者、状态、有效期、密钥算法等结构化 JSON查询证书状态、有效期、校验方式等管理信息aws acm get-certificate证书本体内容PEM 证书正文 PEM 证书链提取证书材料用于部署、检查、第三方集成describe-certificate的示例见 awscli/examples/acm/describe-certificate.rst其输出包含Issuer、KeyAlgorithm、Status、NotBefore、NotAfter等字段属于证书的档案而get-certificate返回的是证书本身。参数详解--certificate-arnget-certificate是单参数命令唯一的必填参数为--certificate-arn。依据 service-2.json 中 GetCertificateRequest 输入结构 的定义类型字符串ARN必填是required列表中唯一成员格式arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012约束Arn shape最小长度 20最大长度 2048正则模式arn:[\w/,.-]:acm:[\w/,.-]*:[0-9]:[\w,.-](/[\w,.-])*注意 ARN 中的region与account需替换为证书实际所在的区域和账号。证书是区域级资源get-certificate只在你当前 CLI 配置的区域内生效。使用示例与输出解读沿用 awscli/examples/acm/get-certificate.rst 中的官方示例aws acm get-certificate --certificate-arn arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012命令执行后输出与下面的 JSON 类似示例中证书内容为演示数据{ Certificate: -----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd ... FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE -----END CERTIFICATE-----, CertificateChain: -----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC ... -----END CERTIFICATE-----, -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----, -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- }输出字段说明按 service-2.json 中 GetCertificateResponse 输出结构 的定义CertificateACM 针对输入 ARN 签发的证书正文对应CertificateBodyshapeCertificateChain构成该证书信任链的所有证书即签发 CA 的证书与各级下级 CA 的中间证书对应CertificateChainshape。两个字段的类型约束同样可以在 service-2.json 中查到字段最小长度最大长度内容形态CertificateCertificateBody132768 字符单个 PEM 块BEGIN CERTIFICATE/END CERTIFICATECertificateChainCertificateChain12097152 字符一个或多个 PEM 块按顺序串联从上例可以清楚看到Certificate只有一个BEGIN CERTIFICATE块而CertificateChain是多个 PEM 块依次排列——这正是证书 → 中间证书 → 根证书的信任链顺序供服务端完整下发以完成 TLS 握手验证。实战进阶把证书落盘并用 OpenSSL 校验get-certificate的 JSON 输出中PEM 文本是带换行的字符串直接复制容易丢失换行。实战中推荐使用jq将证书与证书链分别提取到独立文件从 CLI 输出结构与 PEM 格式可以推断这是最稳妥的提取方式aws acm get-certificate --certificate-arn arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012 \ --query Certificate --output text cert.pem aws acm get-certificate --certificate-arn arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012 \ --query CertificateChain --output text chain.pem提取到文件后即可用 OpenSSL 解码查看证书字段get-certificate官方文档明确建议使用 OpenSSL 解码检查字段# 查看证书主体信息 openssl x509 -in cert.pem -text -noout # 查看整个证书链中每一张证书的签发者/主体 openssl crl2pkcs7 -nocrl -certfile chain.pem | openssl pkcs7 -print_certs -noout--query Certificate --output text配合 file的做法能保留 PEM 原有的换行结构避免手动拼接导致的证书损坏。错误场景与排查service-2.json 中 GetCertificate 操作的 errors 列表 声明了四种异常均可从源码中确认其语义异常含义排查方向InvalidArnException提供的 ARN 未指向现有资源检查 ARN 是否拼写错误、区域是否匹配RequestInProgressException证书请求仍在处理中尚未签发使用describe-certificate观察状态等待签发完成后再调用ResourceNotFoundException在调用者账号中找不到该证书或账号本身无法找到确认证书 ARN 与当前凭据所属账号、区域一致ValidationException输入不满足服务约束核对 ARN 长度、格式是否符合前述正则模式其中RequestInProgressException是最常见的场景刚调用request-certificate后立刻执行get-certificate往往会命中它。证书状态的流转可参考 service-2.json 中 CertificateStatus 枚举PENDING_VALIDATION→ISSUED或FAILED、VALIDATION_TIMED_OUT等。正确姿势是先用describe-certificate确认状态为ISSUED再取证书。配套命令从申请到取证的完整链路get-certificate是 ACM 证书使用链路中的终点动作与仓库 awscli/examples/acm 目录下的其他示例形成闭环申请证书request-certificate.rst —— 指定域名与验证方式发起申请aws acm request-certificate --domain-name www.example.com --validation-method DNS查看状态describe-certificate.rst —— 通过Status、Issuer、KeyAlgorithm、NotBefore/NotAfter等字段确认证书是否已签发其中Status与 service-2.json 的 CertificateStatus 枚举 一一对应获取证书本体get-certificate本文主题—— 状态变为ISSUED后即可取回 PEM 证书与证书链。与 export-certificate 的区别当证书为私有 CA 签发的私有证书时你可能还需要私钥。export-certificate.rst 展示了另一个命令export-certificate它多返回一个PrivateKey字段私钥本身不通过get-certificate返回且需要提供解密私钥的--passphraseaws acm export-certificate --certificate-arn arn:aws:acm:region:account:certificate/12345678-1234-1234-1234-123456789012 --passphrase file://path-to-passphrase-file简单归纳公有/导入证书用get-certificate拿证书与链私有证书若还需要私钥则用export-certificate。底层实现从服务模型看这条命令aws acm get-certificate之所以有上述参数与输出结构根源在于 awscli/botocore/data/acm/2015-12-08/service-2.json 中声明的服务模型。几个关键事实可直接从该文件确认API 元数据服务全称 AWS Certificate ManagerserviceId 为ACMAPI 版本2015-12-08协议为 JSONprotocol: json认证方式为 SigV4signatureVersion: v4HTTP 方法为POST /输入/输出 shape请求体仅含CertificateArn必填响应体含Certificate与CertificateChain两个可选字段字段的具体长度与 PEM 正则约束定义在对应的CertificateBody/CertificateChainshape 中静态上下文参数该操作携带ServiceType: ACM静态上下文参数用于后续端点解析可参考同目录 endpoint-rule-set-1.json 的规则集。这些模型文件会在 CLI 启动时被 botocore 加载并动态生成命令与参数解析逻辑相关加载机制可查看 awscli/botocore/loaders.py因此--certificate-arn的必填校验、长度校验以及输出的字段名都与上述 JSON 模型严格一致。了解这一点你在排障时可以快速回到模型文件核对到底是参数约束问题还是服务端返回问题。小结aws acm get-certificate用最少的参数一个必填的证书 ARN完成取证书这件最基础也最关键的事输出中Certificate字段给出证书正文CertificateChain字段给出完整信任链二者均为 PEM 编码。配合describe-certificate确认状态、request-certificate发起申请、export-certificate获取私有证书私钥即可覆盖 ACM 证书从申请、管理到提取部署的全流程。其参数与输出的每一条约束都可以在仓库的 ACM 服务模型 与 示例文档 中找到依据便于你在实际排障时逐项核对。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考