撤消证书

本文档介绍了如何使用 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 服务器运行命令,请执行以下操作:

  1. 登录并生成管理 API 服务器的 kubeconfig 文件(如果您还没有)。

  2. 使用管理 API 服务器的 kubeconfig 文件路径替换这些说明中的 MANAGEMENT_API_SERVER_KUBECONFIG

撤消证书

撤消证书的方法取决于颁发证书的证书授权机构 (CA) 是否已启用 ACME 模式。吊销证书后,该证书的序列号会显示在该 CA 的所有未来 CRL 中,直到证书过期。

从启用 ACME 的 CA 撤消证书

每个启用 ACME 的 CA 在准备就绪后,都会在其状态中公开唯一的 ACME 服务器网址。如需从启用 ACME 的 CA 撤消证书,您必须使用 ACME 客户端工具通过 ACME 协议与此网址进行交互。

从启用 ACME 的 CA 撤消证书:

  1. 获取 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:项目的命名空间。
  2. 使用获得的网址和您选择的 ACME 客户端工具来发出撤消请求。如需了解详情,请参阅您使用的特定 ACME 客户端的相关文档。

从已停用 ACME 的 CA 撤消证书

如果 CA 上停用了 ACME 模式,请通过创建和应用 RevokeCertificateRequest 自定义资源来吊销证书:

  1. 创建 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:撤消的原因。以下是有效原因:UnspecifiedKeyCompromiseCaCompromiseAffiliationChangedSupersededCessationOfOperationCertificateHoldRemoveFromCrlPrivilegeWithdrawnAaCompromise
  2. 应用自定义资源:

    kubectl apply -f revoke-cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    MANAGEMENT_API_SERVER_KUBECONFIG 替换为管理 API 服务器的 kubeconfig 文件的路径。

  3. 验证撤消证书请求的就绪状态:

    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