建立憑證範本

本頁面說明憑證範本的屬性,並解釋如何建立憑證範本。如要進一步瞭解認證範本,請參閱「關於認證範本」。

必要的角色

如要取得建立憑證範本所需的權限,請要求管理員為您授予專案、資料夾或機構的 CA 服務作業管理員 (roles/privateca.caManager) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

建立憑證範本

如要建立認證範本,請使用下列其中一種方法:

控制台

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

    前往憑證授權單位服務

  2. 按一下「範本管理工具」分頁標籤,然後點選「建立範本」

  3. 使用「區域」清單選取憑證範本的位置。這個位置必須與您打算搭配憑證範本使用的 CA 集區位置相同。

  4. 在「憑證範本 ID」欄位中,輸入憑證範本的專屬 ID。視需要提供憑證範本的說明。

  5. 點選「下一步」

  6. 如要為使用這個範本的憑證設定預設 X.509 值,請按一下「將預先定義的值納入使用這個憑證範本核發的憑證」切換鈕。然後按一下「設定預先定義的值」

  7. 使用下列資訊設定預先定義的值:

    定義基礎金鑰使用方式

    這項設定是指數位憑證中的 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 伺服器的位址,您可在此檢查憑證的撤銷狀態。
    • 憑證核發者的存取方法。

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

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

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

    CA 選項

    憑證範本中的「CA 選項」欄位,定義了在憑證授權單位 (CA) 層級中,如何使用產生的憑證。這項擴充功能主要用於判斷憑證是否可用於簽署其他憑證,以及憑證核發的任何限制。

    選擇下列任一選項:

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

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

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

    4. 點選「下一步」

    設定其他擴充功能

    選用:您可以設定其他自訂擴充功能,納入 CA 集區核發的憑證。請執行下列步驟:

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

  9. 接著,前往「設定擴充功能限制」部分。選取下列任一選項:

    • 將憑證要求中的所有擴充欄位複製到憑證
    • 捨棄憑證要求中的所有擴充欄位
    • 將憑證要求中的特定擴充欄位複製到憑證
  10. 如要複製特定擴充功能,請按照下列步驟操作:
    • 按一下「已知憑證副檔名」欄位,然後從清單中清除不需要的副檔名。
    • 在「自訂擴充功能」欄位中,新增要納入 CA 集區核發憑證的擴充功能物件 ID。

  11. 按一下「下一步」,然後前往「設定身分限制」部分。 如要設定 CA 集區核發憑證中主體和 SAN 的限制,請選取下列一或兩個選項:

    • 將憑證要求中的主體複製到憑證
    • 將憑證要求中的主體別名 (SAN) 複製到憑證
    選用:在「設定身分限制」部分中,新增一般運算語言 (CEL) 運算式,定義憑證主體的限制。詳情請參閱「使用 CEL」。

  12. 依序按一下「下一步」和「完成」

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

更改下列內容:

  • TEMPLATE_ID:憑證範本的專屬 ID。
  • FILE_PATH:YAML 檔案,說明憑證範本設定的 X.509 值。

--copy-sans 標記可將憑證要求中的主體別名 (SAN) 擴充功能複製到已簽署的憑證。或者,您也可以指定 --no-copy-sans,從憑證要求中捨棄任何呼叫端指定的 SAN。

--copy-subject 旗標可將憑證要求中的主體複製到已簽署的憑證。或者,您也可以指定 --no-copy-subject,從憑證要求中捨棄任何呼叫端指定的主體。

--identity-cel-expression 標記會採用 CEL 運算式,在核發憑證前針對憑證的主體和主體別名進行評估,並傳回布林值,指出是否應允許要求。如要瞭解如何使用一般運算語言 (CEL) 運算式建立憑證範本,請參閱「使用 CEL 建立憑證範本」。

--predefined-values-file 旗標會指定 YAML 檔案的路徑,用於說明這個範本設定的任何預先定義 X.509 值。系統會將提供的擴充功能複製到使用這個範本的任何憑證要求,並優先採用這些擴充功能,而非憑證要求中允許的擴充功能。如果您更新預先定義的 X.509 值,更新會取代整組預先定義的 X.509 值。

如果設定 --copy-all-requested-extensions 旗標,憑證要求中指定的所有擴充功能都會複製到簽署的憑證。

如果設定 --copy-extensions-by-oid 標記,系統會將特定 OID 從憑證要求複製到簽署的憑證。

如果設定 --copy-known-extensions 標記,系統會將特定擴充欄位從憑證要求複製到簽署的憑證。這些已知擴充功能可以是下列其中一種:base-key-usageextended-key-usageca-optionspolicy-idsaia-ocsp-servers

移除 --copy-all-requested-extensions 旗標,即可忽略憑證要求中的所有 X.509 擴充功能,但仍保留這個範本中定義的預先定義值。

以下是憑證範本設定範例:

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

如果 YAML 中未指定值,系統會省略這些值,或將預設值設為 false

如未指定值,系統會省略下列擴充功能:

  • keyUsage
  • policyIds
  • additionalExtensions
  • caOptions 擴充功能的「maxIssuerPathLength」欄位

如未指定值,下列擴充功能預設為 false

  • caOptions 擴充功能的「isCa」欄位

建立常見情境適用的憑證範本

本節提供 gcloud 指令,可為常見用途建立憑證範本。

任何網域的 DNS 伺服器 TLS 憑證

如要建立憑證範本,以便核發允許任何網域的伺服器 TLS 憑證,請按照下列操作說明進行:

  1. 建立名為 leaf_server_tls_values.yaml 的檔案,並在其中加入下列終端實體伺服器 TLS 設定:

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. 如要只允許使用 DNS 類型 SAN 的憑證,請執行下列 gcloud 指令:

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

    如要進一步瞭解 gcloud privateca templates create 指令,請參閱 gcloud privateca templates create

僅含測試網域的 DNS 伺服器 TLS 憑證

如要建立憑證範本,以便核發 DNS SAN 僅限於測試網域的伺服器 TLS 憑證,請使用下列 gcloud 指令:

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

leaf_server_tls_values.yaml 檔案的內容必須與上一個範例相同。

如要進一步瞭解如何使用 CEL 運算式,確保 DNS 名稱以特定字串開頭或結尾,請參閱 CEL 運算式範例

Workload Identity 憑證

如要建立憑證範本來核發相互傳輸層安全標準 (mTLS) 憑證,請按照下列操作說明進行:

  1. 建立名為 leaf_mtls_values.yaml 的檔案,並在其中加入下列端點實體相互 TLS 設定。

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. 如要只允許使用具有 SPIFFE URI SAN 的憑證,請使用下列 gcloud 指令:

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

    如要進一步瞭解 gcloud privateca templates create 指令,請參閱 gcloud privateca templates create

如要進一步瞭解如何使用 CEL 運算式,確保 DNS 名稱以特定字串開頭或結尾,請參閱 CEL 運算式範例

授予憑證範本存取權

如果您具備 CA 服務憑證範本使用者 (roles/privateca.templateUser) 角色,即可使用憑證範本。建議憑證範本的作者將「CA 服務憑證範本使用者」角色授予機構中可能會使用該憑證範本的成員。

如要將 CA 服務憑證範本使用者 (roles/privateca.templateUser) 角色授予 example.com 網域中的所有使用者,請使用下列 gcloud 指令:

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

更改下列內容:

  • TEMPLATE_ID:憑證範本的專屬 ID。

如要進一步瞭解 gcloud privateca templates add-iam-policy-binding 指令,請參閱 gcloud privateca templates add-iam-policy-binding

如要進一步瞭解 CA 服務的 IAM 角色和相關聯的權限,請參閱「使用身分與存取權管理功能控管存取權」一文。

後續步驟