新增憑證核發政策

在 CA 服務中新增憑證核發政策時,需要定義規則和限制,以控管憑證授權單位 (CA) 核發的憑證類型。如要進一步瞭解憑證核發政策,請參閱「關於憑證核發政策」。

憑證核發政策可讓您指定核發憑證時可加入的主體和主體別名 (SAN)。您可以在建立 CA 集區時指定憑證核發政策,也可以更新現有的 CA 集區來新增核發政策。

詳情請參閱「範本和發行政策總覽」。

事前準備

  • 確認您具備 CA 服務作業管理員 (roles/privateca.caManager) 或 CA 服務管理員 (roles/privateca.admin) IAM 角色。如要瞭解如何將 IAM 授予主體,請參閱「授予單一角色」。

  • 建立 CA 集區

您可以在建立 CA 集區時,或更新現有 CA 集區時,將憑證核發政策新增至 CA 集區。

請使用下列其中一種方法:

控制台

  1. 前往Google Cloud 控制台的「Certificate Authority Service」(憑證授權單位服務) 頁面。前往憑證授權單位服務

  2. 在「CA pool manager」(CA 集區管理員) 頁面中,按一下要新增憑證核發政策的 CA 集區名稱。

  3. 在「CA pool」(CA 集區) 頁面中,按一下 「Edit」(編輯)

定義基礎金鑰使用方式

這項設定是指數位憑證內的 Key Usage 欄位。指定憑證私密金鑰的使用方式,例如金鑰加密、資料加密、憑證簽署和 CRL 簽署。詳情請參閱「金鑰使用情形」。

  1. 如要選取基礎金鑰使用方式,請按一下「指定這個 CA 集區所核發憑證的基礎金鑰使用方式」切換鈕,然後從列出的選項中選取。
  2. 點選「下一步」
定義擴充金鑰使用方式

這項設定是指數位憑證中的 Extended Key Usage (EKU) 欄位。這項功能可針對金鑰的使用方式提供更具體且精細的限制,例如用於伺服器驗證、用戶端驗證、程式碼簽署和電子郵件保護。詳情請參閱「擴充金鑰用途」。

擴充金鑰使用方式是使用物件 ID (OID) 定義。如未設定擴充金鑰使用方式,系統會允許所有金鑰使用情境。

  1. 如要選取擴充金鑰使用方式,請按一下「針對從這個 CA 集區核發的憑證,寫入擴充金鑰使用方式」切換鈕,然後從列出的選項中選取。
  2. 點選「下一步」
定義政策 ID

憑證中的憑證政策擴充功能會顯示核發 CA 集區遵循的政策。這項擴充功能可包含憑證核發前身分驗證方式、憑證撤銷方式,以及如何確保 CA 集區完整性等資訊。這個擴充功能可協助您驗證 CA 集區核發的憑證,並查看憑證的使用方式。

詳情請參閱「憑證政策」。

如要指定定義憑證用途的政策,請按照下列步驟操作:

  1. 在「政策 ID」欄位中新增政策 ID。
  2. 按一下「下一步」
新增授權單位資訊存取權 (AIA) OCSP 伺服器

憑證中的 AIA 擴充功能會提供下列資訊:

  • OCSP 伺服器的位址,您可在此檢查憑證的撤銷狀態。
  • 憑證核發者的存取方法。

詳情請參閱「機構資訊存取」。

如要新增憑證 AIA 擴充欄位中顯示的 OCSP 伺服器,請按照下列步驟操作:

  1. 按一下「新增項目」
  2. 在「伺服器網址」欄位中,新增 OCSP 伺服器的網址。
  3. 按一下[Done] (完成)
  4. 按一下「下一步」
CA 選項

憑證範本中的「CA 選項」欄位,定義了如何在憑證授權單位 (CA) 階層中使用產生的憑證。CA 選項會決定憑證是否可用於簽署其他憑證,以及憑證核發的限制。

選擇下列任一選項:

  1. 加入設定來說明 CA X.509 的額外資訊欄位:在憑證範本中指定控制 X.509 擴充功能的設定。

  2. 將核發的憑證限制為僅適用於 CA:只有在選取上一個步驟中提及的核取方塊時,才會顯示這個選項。這個布林值表示憑證是否為 CA 憑證。如果設為 true,憑證可用於簽署其他憑證。如果 false,則憑證為終端實體憑證,無法簽署其他憑證。 按一下這個切換鈕後,系統會進一步提示您為 CA 憑證中的擴充功能定義名稱限制。

  3. 加入設定來說明 X.509 額外資訊欄位的路徑長度限制: 指定控制憑證鏈長度的設定, 該長度是從特定憑證衍生而來。如果將頒發機構路徑長度上限設為 0,CA 就只能核發終端實體憑證。如果設為 1,這個 CA 憑證底下的鏈結只能包含一個從屬 CA。如未宣告值,這個 CA 底下鏈結中的下層 CA 數量就不會受到限制。

  4. 點選「下一步」
設定其他擴充功能

如要設定其他自訂擴充欄位,以便納入 CA 集區核發的憑證,請按照下列步驟操作:

  1. 按一下「新增項目」
  2. 在「物件 ID」欄位中,新增以半形句點分隔的數字,做為有效的物件 ID。
  3. 在「Value」(值) 欄位中,新增 ID 的 Base64 編碼值。
  4. 如果擴充功能至關重要,請選取「擴充功能至關重要」

如要儲存所有基準值設定,請按一下「完成」

gcloud

如要使用 Google Cloud CLI 將憑證核發政策新增至 CA 集區,您必須建立 YAML 檔案,說明 CA 集區可核發的憑證限制。內容對應至 IssuancePolicy

  1. 使用 Cloud Shell 編輯器建立 policy.yaml 檔案,並加入下列內容:

    identityConstraints:
      allowSubjectPassthrough: true
      allowSubjectAltNamesPassthrough: true
    

    其中:

    • allowSubjectPassthrough 欄位為必填欄位。如果「allowSubjectPassthrough」欄位設為「true」,主體欄位會從憑證要求複製到簽署的憑證。否則系統會捨棄要求的 Subject。
    • 如果 allowSubjectAltNamesPassthrough 欄位設為 true,SubjectAltNames 擴充功能會從憑證要求複製到簽署的憑證。否則系統會捨棄要求的 SubjectAltNames。
  2. 如要使用上一步建立的檔案更新 CA 集區的憑證核發政策,請執行下列指令:

    gcloud privateca pools update POOL_NAME --location LOCATION --issuance-policy FILE_PATH
    

    更改下列內容:

    • POOL_NAME:CA 集區的名稱。
    • LOCATION:CA 集區的位置。如需完整的位置清單,請參閱「位置」。
    • FILE_PATHpolicy.yaml 檔案的路徑。

    如要進一步瞭解 gcloud privateca pools update 指令,請參閱 gcloud privateca pools update

支援的限制

CA 服務支援下列簽發政策限制。您可以視需要組合下列限制,建立自訂憑證核發政策。

限制或強制允許的 X.509 值

CA 集區可以設定 passthrough_extensions 欄位,限制憑證要求中允許的 X.509 值。

CA 集區也可以使用 baseline_values 欄位,明確指定要加入所有核發憑證的 X.509 值,並覆寫所有要求的值。

CA 集區的baseline_values可指定下列屬性:

你也可以同時使用這些選項。

如果更新 baseline_values 欄位的任何部分,更新會取代 baseline_values 欄位中的整組值。

  • 範例:限制 CA 只能核發具有相互傳輸層安全標準 (mTLS) X.509 值的終端實體憑證。

    policy.yaml

    baselineValues:
      caOptions:
        isCa: false
      keyUsage:
        baseKeyUsage:
          digitalSignature: true
          keyEncipherment: true
        extendedKeyUsage:
           clientAuth: true
           serverAuth: true
    
  • 範例:限制 CA 只能核發具有基準 AIA OCSP 網址的實體程式碼簽署憑證。

    policy.yaml

    baselineValues:
      caOptions:
        isCa: false
      keyUsage:
        baseKeyUsage:
          digitalSignature: true
        extendedKeyUsage:
          codeSigning: true
      aiaOcspServers:
        -   "http://foo.bar/revocation"
      additionalExtensions:
      -   objectId:
            objectIdPath:
              -   1
              -   2
              -   3
          critical: false
          value: "base64 encoded extension value"
    

如要進一步瞭解終端實體 mTLS 的憑證設定檔,請參閱終端實體 mTLS

限制允許的身分識別欄位

如要限制透過 CA 集區核發的憑證身分,您可以將 [通用運算式語言 (CEL)][4]{: .external} 運算式新增至核發政策的identity_constraints 欄位。CEL 運算式可對憑證的主體網域名稱 (包括通用名稱) 和 SAN 施加任意限制。

如要進一步瞭解如何使用 CEL 運算式限制主體和 SAN,請參閱「使用 CEL」一文。

  • 範例:允許 CA 僅核發符合指定主體的憑證。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: true
      allowSubjectAltNamesPassthrough: false
      celExpression:
        expression: 'subject.organization == "Example LLC" && subject.country_code in ["US", "UK"]'
    

    celExpression 欄位為選填。使用一般運算語言 (CEL) 運算式,在簽署憑證前驗證已解析的 X.509 主體和 SAN。如要進一步瞭解如何使用 CEL 運算式,請參閱「使用 CEL」。

  • 範例:只允許 DNS 名稱為 us.google.org 或結尾為 .google.com 的 SAN。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == DNS && (san.value == "us.google.org" || san.value.endsWith(".google.com")) )'
    
  • 範例:只允許具有 URI https://google.com/webhp 或以 spiffe://example-trust-domain-1/ns/namespace1/sa/ 開頭的 SAN。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == URI && (san.value == "https://google.com/webhp" || san.value.startsWith("spiffe://example-trust-domain-1/ns/namespace1/sa/")) )'
    
  • 範例:只允許具有電子郵件地址 example@google.com 或結尾為 @google.org 的 SAN。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == EMAIL && (san.value == "example@google.com" || san.value.endsWith("@google.org")) )'
    
  • 範例:只允許具有特定 OID 和自訂值的自訂 SAN。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == CUSTOM && san.oid == [1, 2, 3, 4] && san.value == "custom-data" )'
    

限制核發憑證的追溯日期

如要為核發的憑證設定過去的 not_before_time,請使用 backdate_duration 欄位。設定完成後,這個 CA 集區的憑證 not_before_time 會等於核發時間減去指定時間長度。系統會調整 not_after_time,以維持要求的憑證生命週期。backdate_duration 不得超過 48 小時。

範例

如要將憑證的日期調回 1 小時,請使用下列 policy.yaml 檔案:

policy.yaml

backdateDuration: 3600s

限制核發憑證的生命週期長度上限

如要限制核發憑證的生命週期,請使用 maximum_lifetime 欄位。如果要求的憑證生命週期長度超過上限,系統會明確截斷憑證的生命週期。

範例

如要允許最長 30 天的生命週期,請使用下列 policy.yaml 檔案:

policy.yaml

maximumLifetime: 2592000s

限制允許的憑證核發模式

您可以透過憑證簽署要求 (CSR) 或要求值的內嵌說明來要求憑證。部分機構可能會偏好限制可用的選項,因為後者不需要相關聯私密金鑰的擁有權證明。您可以使用 allowedIssuanceModes 欄位設定這些限制。

如要進一步瞭解如何指定可向 CA 集區要求憑證的方式,請參閱 IssuanceModes

如要進一步瞭解如何申請憑證,請參閱「建立憑證要求」。

  • 範例:僅允許核發 CSR。

policy.yaml

allowedIssuanceModes:
  allowCsrBasedIssuance: True
  allowConfigBasedIssuance: False

限制憑證要求的公開金鑰演算法

如要限制憑證可使用的最短金鑰長度和公開金鑰演算法,您可以使用憑證核發政策 YAML 檔案中的 allowedKeyTypes 欄位。如果指定這個欄位,憑證要求的公開金鑰必須與 YAML 檔案中列出的其中一種金鑰類型相符。如果未指定這個欄位,則可以使用任何金鑰,但模數大小少於 2048 位元的 RSA 金鑰除外。如要使用模數大小小於 2048 位元的 RSA 金鑰,您必須使用憑證核發政策明確允許。

範例:允許模數大小介於 3072 位元和 4096 位元 (含) 之間的 RSA 金鑰,或 NIST P-256 曲線上的橢圓曲線數位簽章演算法 (ECDSA) 金鑰。

policy.yaml

allowedKeyTypes:
-   rsa:
  minModulusSize: 3072
  maxModulusSize: 4096
-   ellipticCurve:
      signatureAlgorithm: ECDSA_P256

您可以選擇下列其中一種橢圓曲線簽章演算法:

  • EC_SIGNATURE_ALGORITHM_UNSPECIFIED - 可以使用任何簽名演算法。
  • ECDSA_P256 - 透過 NIST P-256 曲線的橢圓曲線數位簽章。
  • ECDSA_P384 - 透過 NIST P-384 曲線的橢圓曲線數位簽章。
  • EDDSA_25519 - 透過 25519 曲線的愛德華曲線數位簽章演算法,如 RFC 8410 所述。

後續步驟