本文档介绍了如何使用 Certificate Authority Service 撤消证书。撤消证书会使其在到期日期之前失效,从而防止其用于身份验证。如果私钥遭到破解、证书被新证书取代,或者不再需要证书(例如,证书所针对的服务已停用),您可能需要撤消证书。
本文档适用于应用运维人员群组中的受众群体,例如应用开发者或数据科学家,他们负责管理项目中的证书生命周期。如需了解详情,请参阅 GDC 气隙环境受众群体文档。
证书撤消简介
CA Service 支持通过发布证书吊销列表 (CRL) 来吊销证书。CRL 是指已被吊销且不再受信任的证书的序列号列表。默认情况下,每 15 分钟发布一次新 CRL。此外,任何成功的证书吊销都会自动触发新 CRL 的生成。
由 CA Service 颁发的证书包含一个名为 CRL 分发点 (CDP) 的扩展。此扩展包含一个网址,您可以在该网址中查找和下载相应证书的 CRL。客户端应用使用此网址来获取 CRL,并检查证书的序列号是否存在。如果序列号出现在该列表中,则表示相应证书无效,必须拒绝连接。
准备工作
在撤消证书之前,请确保您拥有所需的权限和 kubeconfig 文件。
所需权限
如需获得撤消证书所需的权限,请让组织 IAM 管理员为您授予 CA Service Operation Manager (certificate-authority-service-operation-manager) 角色。如需详细了解角色,请参阅角色定义。
获取 kubeconfig 文件
如需针对管理 API 服务器运行命令,请执行以下操作:
登录并生成管理 API 服务器的 kubeconfig 文件(如果您还没有)。
使用管理 API 服务器的 kubeconfig 文件路径替换这些说明中的
MANAGEMENT_API_SERVER_KUBECONFIG。
撤消证书
撤消证书的方法取决于颁发证书的证书授权机构 (CA) 是否已启用 ACME 模式。吊销证书后,该证书的序列号会显示在该 CA 的所有未来 CRL 中,直到证书过期。
从启用 ACME 的 CA 撤消证书
每个启用 ACME 的 CA 在准备就绪后,都会在其状态中公开唯一的 ACME 服务器网址。如需从启用 ACME 的 CA 撤消证书,您必须使用 ACME 客户端工具通过 ACME 协议与此网址进行交互。
从启用 ACME 的 CA 撤消证书:
获取 CA 的 ACME 服务器网址:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \ get certificateauthorities CA_NAME \ -n USER_PROJECT_NAMESPACE \ -ojson | jq -r '.status.acme.uri'替换以下内容:
MANAGEMENT_API_SERVER_KUBECONFIG:管理 API 服务器的 kubeconfig 文件的路径。CA_NAME:启用 ACME 的 CA(根 CA 或从属 CA)的名称。USER_PROJECT_NAMESPACE:项目的命名空间。
使用获得的网址和您选择的 ACME 客户端工具来发出撤消请求。如需了解详情,请参阅您使用的特定 ACME 客户端的相关文档。
从已停用 ACME 的 CA 撤消证书
如果 CA 上停用了 ACME 模式,请通过创建和应用 RevokeCertificateRequest 自定义资源来吊销证书:
创建
RevokeCertificateRequest自定义资源 YAML 文件(例如revoke-cert-request.yaml):apiVersion: pki.security.gdc.goog/v1 kind: RevokeCertificateRequest metadata: name: REVOKE_CERT_REQ_NAME namespace: USER_PROJECT_NAMESPACE spec: certificateRequestRef: name: CERT_REQ_NAME namespace: USER_PROJECT_NAMESPACE reason: REASON替换以下内容:
REVOKE_CERT_REQ_NAME:用户为撤消请求定义的名字。USER_PROJECT_NAMESPACE:项目的命名空间。CERT_REQ_NAME:与您要撤消的证书相关联的CertificateRequest资源的名称。REASON:撤消的原因。以下是有效原因:Unspecified、KeyCompromise、CaCompromise、AffiliationChanged、Superseded、CessationOfOperation、CertificateHold、RemoveFromCrl、PrivilegeWithdrawn和AaCompromise。
应用自定义资源:
kubectl apply -f revoke-cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG将 MANAGEMENT_API_SERVER_KUBECONFIG 替换为管理 API 服务器的 kubeconfig 文件的路径。
验证撤消证书请求的就绪状态:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \ -n USER_PROJECT_NAMESPACE \ get revokecertificaterequest.pki.security.gdc.goog/REVOKE_CERT_REQ_NAME \ -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'替换以下内容:
MANAGEMENT_API_SERVER_KUBECONFIG:管理 API 服务器的 kubeconfig 文件的路径。USER_PROJECT_NAMESPACE:项目的命名空间。REVOKE_CERT_REQ_NAME:撤消请求的名称。
输出类似于以下内容:
{ "lastTransitionTime": "2025-08-19T23:20:22Z", "message": "RevokeCertificateRequest reconciled", "observedGeneration": 1, "reason": "Ready", "status": "True", "type": "Ready" }该流程已完成,证书的序列号已添加到下次生成的 CRL 中。
列出已撤消的证书请求
列出项目命名空间中的所有 RevokeCertificateRequest 资源:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
-n USER_PROJECT_NAMESPACE \
get revokecertificaterequests
替换以下内容:
MANAGEMENT_API_SERVER_KUBECONFIG:管理 API 服务器的 kubeconfig 文件的路径。USER_PROJECT_NAMESPACE:项目的命名空间。
输出类似于以下内容:
NAMESPACE NAME READY AGE
foo revoke-cert-req True 30s