本文档介绍了如何使用证书授权机构服务撤消证书。撤消证书会在证书到期之前使其失效,从而阻止其用于身份验证。如果私钥遭到入侵、证书被新证书取代或不再需要证书(例如,当为证书颁发的服务停用时),您可能需要撤消证书。
本文档面向应用运维人员组内的受众,例如应用开发者或数据科学家,他们负责管理项目中的证书生命周期。如需了解详情,请参阅 GDC 气隙文档的受众。
证书撤消简介
CA Service 支持通过发布证书吊销列表 (CRL) 来撤消证书。CRL 是已撤消且不再受信任的证书的序列号列表。默认情况下,系统每 15 分钟发布一次新的 CRL。此外,任何成功的证书撤消都会自动触发生成新的 CRL。
CA Service 颁发的证书包含一个名为 CRL 分发点 (CDP) 的扩展。此扩展包含一个网址,您可以在该网址中查找和下载该证书的 CRL。客户端应用使用此网址来提取 CRL 并检查证书的序列号是否存在。如果序列号出现在列表中,则该证书被视为无效,并且必须拒绝连接。
准备工作
您必须先请求必要的权限并准备好环境,然后才能撤消证书。
请求 IAM 角色
如需撤消证书和查看撤消请求,请与组织 IAM 管理员联系,以在证书授权机构的项目命名空间中请求 CA Service Operation
Manager (certificate-authority-service-operation-manager) 角色。
准备环境
生成 kubeconfig 文件 以配置
kubectl访问权限。
撤消证书
撤消证书的方法取决于颁发证书的证书授权机构 (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:Management 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 替换为 Management 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:Management 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:Management API 服务器的 kubeconfig 文件的路径。USER_PROJECT_NAMESPACE:项目的命名空间。
输出类似于以下内容:
NAMESPACE NAME READY AGE
foo revoke-cert-req True 30s