撤銷憑證

本文說明如何使用憑證授權單位服務撤銷憑證。撤銷憑證會使其在到期日前失效,無法用於驗證。如果私密金鑰遭盜用、憑證遭新憑證取代,或不再需要憑證 (例如憑證核發的服務已停用),您可能會撤銷憑證。

本文適用於應用程式運算子群組中的對象,例如應用程式開發人員或資料科學家,他們負責管理專案中的憑證生命週期。詳情請參閱 GDC air-gapped 的目標對象說明文件

關於憑證撤銷

憑證授權單位服務支援發布憑證撤銷清單 (CRL) 來撤銷憑證。CRL 是指已撤銷且不再受信任的憑證序號清單。根據預設,系統每 15 分鐘會發布一次新的 CRL。此外,成功撤銷憑證後,系統會自動產生新的 CRL。

CA 服務核發的憑證包含名為 CRL 發布點 (CDP) 的擴充功能。這個擴充功能包含網址,您可以在該網址中尋找並下載該憑證的 CRL。用戶端應用程式會使用這個網址擷取 CRL,並檢查憑證序號是否存在。如果序號出現在清單中,表示憑證無效,必須拒絕連線。

事前準備

撤銷憑證前,請確認您具備必要權限和 kubeconfig 檔案。

所需權限

如要取得撤銷憑證所需的權限,請要求機構 IAM 管理員授予您 CA 服務作業管理員 (certificate-authority-service-operation-manager) 角色。如要進一步瞭解角色,請參閱角色定義

取得 kubeconfig 檔案

如要對 Management API 伺服器執行指令,請按照下列步驟操作:

  1. 登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。

  2. 使用 Management 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 名稱 (根或從屬)。
    • 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 替換為 Management 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