AWS CLI acm-pca update-certificate-authority 详解:更新私有 CA 状态与吊销配置
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
导读
aws acm-pca update-certificate-authority是 AWS CLI 中用于更新私有证书颁发机构(Private CA)运行时配置的核心命令,可用来修改 CA 的状态(如禁用或重新激活)以及吊销配置(CRL 与 OCSP)。本文以仓库中的官方示例文档 update-certificate-authority.rst 为主线,结合仓库内 ACM Private CA 服务的 API 模型文件,逐层拆解该命令的全部参数、CRL/OCSP 配置结构、file://加载 JSON 配置的机制以及使用中的关键风险,帮助你安全地在生产环境维护私有 CA。
一、命令概览与官方示例
官方示例文档给出了该命令最典型的用法——一次性更新私有 CA 的状态和吊销配置:
aws acm-pca update-certificate-authority \ --certificate-authority-arn arn:aws:acm-pca:us-west-2:123456789012:certificate-authority/12345678-1234-1234-1234-1232456789012 \ --revocation-configuration file://C:\revoke_config.txt \ --status "DISABLED"该命令对应的底层 API 操作是UpdateCertificateAuthority(HTTPPOST,见 service-2.json 中的operations.UpdateCertificateAuthority)。从 API 模型可以确认,请求中唯一必填的参数是CertificateAuthorityArn,其余参数(Status、RevocationConfiguration)均为可选,这意味着你既可以用它单独切换 CA 状态,也可以单独调整吊销配置,或两者同时更新。
一个关键的前置约束来自 API 文档注释:你的私有 CA 必须先处于ACTIVE或DISABLED状态,才能执行更新操作。换言之,新建中(CREATING)、等待根证书导入(PENDING_CERTIFICATE)、已删除(DELETED)、已过期(EXPIRED)或创建失败(FAILED)的 CA 都不能通过该命令更新。
二、请求参数详解
根据UpdateCertificateAuthorityRequest结构(见 service-2.json),命令接受三个参数:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
--certificate-authority-arn | String | 是 | 目标私有 CA 的 ARN,形如arn:aws:acm-pca:<region>:<account-id>:certificate-authority/<ca-id> |
--status | Enum | 否 | 目标状态,仅在ACTIVE与DISABLED之间切换时使用 |
--revocation-configuration | Structure | 否 | CRL 与 OCSP 的启用/禁用配置,不传则现有能力保持不变 |
1.--certificate-authority-arn
指定要更新的私有 CA 资源标识符。ARN 的格式要求如下:
arn:aws:acm-pca:<region>:<account-id>:certificate-authority/12345678-1234-1234-1234-123456789012如果不确定自己的 CA ARN,可以先用同目录下的另一个示例命令 list-certificate-authorities 查询当前账户下所有 CA,或用 describe-certificate-authority 确认目标 CA 的当前状态:
aws acm-pca describe-certificate-authority \ --certificate-authority-arn arn:aws:acm-pca:us-west-2:123456789012:certificate-authority/12345678-1234-1234-1234-1234567890122.--status:启用与禁用私有 CA
Status参数用于更新 CA 的运行状态。根据CertificateAuthorityStatus枚举定义(见 service-2.json 中shapes.CertificateAuthorityStatus),CA 的全部可能状态为:
CREATING / PENDING_CERTIFICATE / ACTIVE / DELETED / DISABLED / EXPIRED / FAILED其中,update-certificate-authority只负责在ACTIVE与DISABLED之间切换:
--status "DISABLED":将处于ACTIVE的 CA 禁用。禁用后 CA 不再签发新证书,但已签发证书的吊销功能(如撤销证书)仍可继续使用;--status "ACTIVE":将处于DISABLED的 CA 重新激活,恢复签发能力。
这种"禁用—激活"双向切换能力,正是运维中常见的场景:例如当检测到私钥泄露风险或计划迁移时先禁用 CA,问题处理完毕后再重新激活。
3.--revocation-configuration:吊销配置
该参数对应RevocationConfiguration结构,它同时承载两类吊销机制的信息:
{ "CrlConfiguration": { ... }, "OcspConfiguration": { ... } }CrlConfiguration:证书吊销列表(CRL)配置。CRL 通常在证书被吊销后约30 分钟更新一次;若某次更新失败,AWS Private CA 会每隔15 分钟重试;OcspConfiguration:在线证书状态协议(OCSP)配置。吊销证书后,OCSP 响应最多可能需要60 分钟才能反映新状态。
两条都来自 service-2.json 中RevocationConfiguration成员的官方文档注释,是规划吊销策略时的重要时间参考。该参数在命令行中通常以file://前缀指向一个本地 JSON 文件(如官方示例中的C:\revoke_config.txt),由 AWS CLI 的参数文件机制自动读取并解析,详见下文第四节。
三、CRL 与 OCSP 配置结构
1. CrlConfiguration 字段
对应shapes.CrlConfiguration,其中Enabled为必填字段:
| 字段 | 类型/约束 | 说明 |
|---|---|---|
Enabled | Boolean(必填) | 是否启用 CRL 吊销功能 |
ExpirationInDays | Integer,范围 1–5000 | CRL 的有效期(天),即签发出的 CRL 在多长时间后过期 |
CustomCname | String | 写入证书CRL Distribution Points(CDP)扩展中的别名,用于隐藏真实的 S3 桶名;值不能带http://或https://前缀,且须符合 RFC 2396 对 URI 特殊字符的限制 |
S3BucketName | String,长度 3–255 | 存放 CRL 的 S3 桶名,须符合 S3 桶命名规则;若未设置CustomCname,该桶名会直接暴露在证书的 CDP 扩展中 |
S3ObjectAcl | Enum | 取值为PUBLIC_READ(CRL 可被公网访问)或BUCKET_OWNER_FULL_CONTROL(仅桶所有者可访问);未指定时默认PUBLIC_READ |
关于S3ObjectAcl的默认值,API 模型特别提示了一个隐患:默认的PUBLIC_READ可能导致 CA 创建失败——当 S3 桶开启了 Block Public Access(BPA)等公共访问屏蔽特性时,写入公共读 CRL 会被拒绝。因此若你的桶启用了 BPA,应显式配置为BUCKET_OWNER_FULL_CONTROL。
此外,无论 CRL 使用默认桶名还是CustomCname,都必须为 S3 桶配置允许 AWS Private CA 写入的桶策略,并且调用该 API 的 IAM 主体也要具备对该桶的写入权限,否则操作会抛出异常(该约束同样适用于创建 CA)。
2. OcspConfiguration 字段
对应shapes.OcspConfiguration,同样**Enabled为必填字段**:
| 字段 | 类型/约束 | 说明 |
|---|---|---|
Enabled | Boolean(必填) | 是否启用 OCSP 吊销校验 |
OcspCustomCname | String | 自定义 OCSP 域名。默认情况下 AWS Private CA 会在证书中注入一个 AWS 域名的 OCSP 访问点,通过该字段可改用自有 CNAME;同样不能包含http:///https://协议前缀 |
3. 吊销配置的合法性规则
API 模型对RevocationConfiguration施加了几条硬性校验,稍有不慎就会导致请求被InvalidArgsException拒绝:
- 关闭型配置必须精简:若要禁用CRL 或 OCSP,配置里只能写
Enabled: false,不能附带CustomCname、ExpirationInDays、S3BucketName等其他字段; S3BucketName必须符合 Amazon S3 桶命名规则;- 任何 CNAME 字段都须符合 RFC 2396 对 URI 特殊字符的约束;
- CNAME 值不得包含
http://或https://协议前缀。
四、完整的吊销配置文件示例
结合上述字段与约束,下面给出几种可直接套用的revoke_configJSON 配置。
(1)启用 CRL(将 CRL 写入私有 S3 桶,并使用自定义 CNAME 隐藏桶名):
{ "CrlConfiguration": { "Enabled": true, "ExpirationInDays": 7, "CustomCname": "crl.example.com", "S3BucketName": "my-pca-crl-bucket", "S3ObjectAcl": "BUCKET_OWNER_FULL_CONTROL" }, "OcspConfiguration": { "Enabled": false } }(2)仅启用 OCSP(使用默认 AWS 域名的 OCSP 访问点):
{ "OcspConfiguration": { "Enabled": true } }(3)同时启用 CRL 与自定义 OCSP CNAME:
{ "CrlConfiguration": { "Enabled": true, "ExpirationInDays": 30, "S3BucketName": "my-pca-crl-bucket" }, "OcspConfiguration": { "Enabled": true, "OcspCustomCname": "ocsp.example.com" } }(4)彻底禁用 CRL 与 OCSP(注意每个配置块内只能有Enabled字段):
{ "CrlConfiguration": { "Enabled": false }, "OcspConfiguration": { "Enabled": false } }将以上任一内容保存为本地文件(例如 Linux 下的revoke_config.json,Windows 下即官方示例中的C:\revoke_config.txt),再配合命令使用:
aws acm-pca update-certificate-authority \ --certificate-authority-arn arn:aws:acm-pca:us-west-2:123456789012:certificate-authority/12345678-1234-1234-1234-123456789012 \ --revocation-configuration file://revoke_config.json五、file://参数文件加载机制
官方示例中--revocation-configuration file://C:\revoke_config.txt的file://语法,由 AWS CLI 的参数文件(paramfile)机制实现。核心实现在 paramfile.py:CLI 在解析阶段识别file://前缀,读取对应本地文件内容,再按目标参数的类型(JSON 结构、二进制、文本等)反序列化为参数值。
该文件开头定义的PARAMFILE_DISABLED集合(见 paramfile.py 第 33 行起)值得注意:它列出了不做 paramfile 处理的特殊参数,例如 API Gateway 的uri、CloudFormation 的TemplateURL等——因为这些参数本身语义就是"一个 URI/URL",不应被当作本地文件路径加载。而acm-pca update-certificate-authority的RevocationConfiguration并不在该禁用列表中,因此可以放心使用file://指向本地 JSON 文件。
在 Windows 上,路径写法与官方示例一致:
--revocation-configuration file://C:\revoke_config.txt在 Linux / macOS 上则使用常规路径:
--revocation-configuration file:///home/user/revoke_config.json六、更新后的验证
命令执行成功时无输出返回(API 为同步幂等操作)。建议随后调用 describe-certificate-authority 验证更新结果:
aws acm-pca describe-certificate-authority \ --certificate-authority-arn arn:aws:acm-pca:us-west-2:123456789012:certificate-authority/12345678-1234-1234-1234-123456789012返回的CertificateAuthority.Status字段会反映新的 CA 状态,RevocationConfiguration字段则展示当前生效的 CRL/OCSP 配置,可据此确认本次更新是否按预期落盘。
七、错误处理与关键注意事项
1. 可能抛出的异常
根据 service-2.json 中UpdateCertificateAuthority.errors的定义,该操作可能返回以下错误,排错时可对症下药:
| 错误 | 典型触发场景 |
|---|---|
ResourceNotFoundException | ARN 对应的 CA 不存在 |
InvalidArnException | ARN 格式不合法 |
InvalidArgsException | 吊销配置违反上述合法性规则(如关闭 CRL 时仍携带其他字段) |
InvalidStateException | CA 当前不在ACTIVE/DISABLED状态,或试图把状态切到不允许的值 |
ConcurrentModificationException | 并发更新同一 CA 时冲突 |
InvalidPolicyException | 相关 IAM/S3 桶策略不满足写入要求 |
2. 高危风险:更新 CRL 的 S3 桶名会破坏既有证书的吊销
API 模型专门用important级注释强调了一个极易踩坑的行为:如果通过UpdateCertificateAuthority修改CrlConfiguration.S3BucketName,会破坏存量证书的吊销链路。原因是 AWS Private CA 此后只把 CRL 写入新桶,而在此之前签发的证书,其 CRL Distribution Point(CDP)扩展里记录的仍是旧桶名,客户端据此将无法找到新的 CRL,相当于吊销功能失效。
因此该注释给出的建议是:
- 若确实需要更换 S3 桶,必须重新签发(reissue)旧证书,让新证书携带新的 CDP 地址;
- 更稳妥的做法是:从一开始就在 CRL 配置中使用
CustomCname作为稳定的访问别名,这样将来即便更换 S3 桶,只要 CNAME 解析目标同步更新,存量证书的吊销访问点就不会变化。
3. 状态切换与吊销服务的联动
禁用 CA(--status "DISABLED")不影响已签发证书的吊销查询——CRL 与 OCSP 服务在 CA 禁用期间仍会持续工作,这一点在规划"停用但不销毁"的 CA 生命周期策略时非常关键。而彻底销毁 CA 则应使用同目录下的 delete-certificate-authority 命令,两者职责不同,切勿混用。
八、与相关命令的配合使用
update-certificate-authority是 ACM Private CA 生命周期管理链路中的一环,仓库 awscli/examples/acm-pca/ 目录下提供了完整的配套示例,常见组合包括:
- create-certificate-authority.rst:创建 CA 时通过
--revocation-configuration file://...设置初始吊销配置(与本文命令使用同一份配置文件格式); - delete-certificate-authority.rst:删除 CA(删除前通常需先将其禁用);
- revoke-certificate.rst:吊销具体证书,吊销后由本命令配置的 CRL/OCSP 机制对外发布状态;
- describe-certificate-authority.rst:查看 CA 当前状态与吊销配置,作为更新前后的验证手段;
- tag-certificate-authority.rst 与 untag-certificate-authority.rst:为 CA 维护标签,便于成本分摊与权限管理。
总结
aws acm-pca update-certificate-authority是私有 CA 运维中"出勤率"极高的命令:日常的启用/禁用操作只需传--status,调整吊销策略则传--revocation-configuration(配合file://加载 JSON)。使用时务必记住三条红线:CA 必须处于ACTIVE/DISABLED状态才能更新;关闭 CRL/OCSP 时配置块内只能有Enabled: false;修改 CRL 的 S3 桶名会破坏存量证书的吊销访问点。掌握本文的参数语义与 API 模型约束,即可安全地把 CA 状态与吊销策略变更纳入自动化运维流程。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考