本文說明如何使用憑證授權單位服務撤銷憑證。撤銷憑證會使其在到期日前失效,無法用於驗證。如果私密金鑰遭盜用、憑證遭新憑證取代,或不再需要憑證 (例如憑證核發的服務已停用),您可能會撤銷憑證。
本文適用於應用程式運算子群組中的對象,例如應用程式開發人員或資料科學家,他們負責管理專案中的憑證生命週期。詳情請參閱 GDC air-gapped 的目標對象說明文件。
關於憑證撤銷
憑證授權單位服務支援發布憑證撤銷清單 (CRL) 來撤銷憑證。CRL 是指已撤銷且不再受信任的憑證序號清單。根據預設,系統每 15 分鐘會發布一次新的 CRL。此外,成功撤銷憑證後,系統會自動產生新的 CRL。
CA 服務核發的憑證包含名為 CRL 發布點 (CDP) 的擴充功能。這個擴充功能包含網址,您可以在該網址中尋找並下載該憑證的 CRL。用戶端應用程式會使用這個網址擷取 CRL,並檢查憑證序號是否存在。如果序號出現在清單中,表示憑證無效,必須拒絕連線。
事前準備
撤銷憑證前,請確認您具備必要權限和 kubeconfig 檔案。
所需權限
如要取得撤銷憑證所需的權限,請要求機構 IAM 管理員授予您 CA 服務作業管理員 (certificate-authority-service-operation-manager) 角色。如要進一步瞭解角色,請參閱角色定義。
取得 kubeconfig 檔案
如要對 Management API 伺服器執行指令,請按照下列步驟操作:
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
使用 Management 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 名稱 (根或從屬)。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:管理 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