建立憑證授權單位集區

本頁說明如何建立憑證授權單位 (CA) 集區。

CA 集區內含多個 CA,這些 CA 採用相同的憑證核發政策和 Identity and Access Management (IAM) 政策。CA 集區可簡化 CA 輪替管理作業,並讓您達到更高的每秒有效查詢總數 (QPS)。

您必須先建立 CA 集區,才能使用憑證授權單位服務建立 CA。 詳情請參閱「CA 集區總覽」。

事前準備

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

決定 CA 集區的設定

本節說明 CA 集區的設定,並提供決定設定的建議。

永久憑證授權單位集區設定

建立 CA 集區後,就無法變更下列 CA 集區設定。

位置
指定 CA 集區的位置。CA 集區會儲存在單一Google Cloud 位置。建議您在打算使用 CA 集區的位置或附近建立 CA 集區。
如需支援位置的完整清單,請參閱「位置」一節。
級別
選擇要使用 DevOps 或 Enterprise 層級建立 CA 集區。這項選擇會影響 CA 服務是否會保留建立的憑證、建立的憑證是否可稍後撤銷,以及您可從 CA 集區中的 CA 建立憑證的最高速率。詳情請參閱「選取作業層級」。

選用憑證授權單位集區設定

憑證核發政策

CA 集區可以有憑證核發政策。這項核發政策會限制 CA 集區中的 CA 可核發的憑證。建立 CA 集區後,您可以更新 CA 集區的核發政策。詳情請參閱「範本和發行政策總覽」。

如要進一步瞭解如何設定憑證核發政策,請參閱將憑證核發政策新增至 CA 集區

發布選項

您可以設定 CA 集區,發布每個 CA 的 CA 憑證。核發憑證時,這個 CA 憑證的網址會以授權單位資訊存取權 (AIA) 擴充功能的形式納入憑證。

您可以允許企業級別憑證授權單位集區中的憑證授權單位,將憑證撤銷清單 (CRL) 發布至相關聯的 Cloud Storage 值區。核發憑證時,這個 CRL 的網址會以 CRL 發布點 (CDP) 擴充功能的形式,加入憑證中。如果憑證中沒有 CDP 擴充功能,您就無法找到 CRL。詳情請參閱「撤銷憑證」。

您也可以選取已發布 CA 憑證和 CRL 的編碼格式。 支援的編碼格式為隱私強化郵件 (PEM) 和區別編碼規則 (DER)。如未指定編碼格式,系統會使用 PEM。

如果您使用 Google Cloud CLI 或 Google Cloud 控制台建立 CA 集區,CA 服務預設會啟用這些發布選項。詳情請參閱「停用 CA 集區中 CA 的 CA 憑證和 CRL 發布功能」。

建立憑證授權單位集區

如要建立 CA 集區,請按照下列操作說明進行:

控制台

選擇 CA 集區的名稱

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

    前往憑證授權單位服務

  2. 按一下「CA pool manager」(CA 集區管理員)

  3. 按一下「建立集區」

  4. 為 CA 集區新增區域專屬名稱。

  5. 從「Region」(區域) 欄位的下拉式選單中選取一個區域。詳情請參閱選擇最佳位置

  6. 選取 Enterprise 或 DevOps 層級。詳情請參閱「選取作業層級」。

  7. 點選「下一步」

設定允許的金鑰演算法和大小

CA 服務可讓您為 CA 集區中 CA 的 Cloud KMS 金鑰選擇簽署演算法。根據預設,系統會允許所有金鑰演算法。

如要限制 CA 集區核發憑證中的可用金鑰,請按照下列步驟操作。這個步驟可以省略。

  1. 按一下切換鈕。
  2. 按一下「新增項目」
  3. 在「類型」清單中,選取金鑰類型。

    如要使用 RSA 金鑰,請按照下列步驟操作:

    1. 選用:新增模數大小下限 (以位元為單位)。
    2. 選用:新增模數大小上限 (以位元為單位)。
    3. 按一下 [完成]

    如要使用橢圓曲線金鑰,請按照下列步驟操作:

    1. 選用:在「橢圓曲線類型」清單中,選取橢圓曲線類型。
    2. 按一下 [完成]
  4. 如要新增其他允許的金鑰,請按一下「新增項目」,然後重複步驟 2。

  5. 點選「下一步」

設定憑證要求方法

如要限制憑證要求者向 CA 集區要求憑證時可用的方法,請按照下列步驟操作:

  1. 選用:如要限制以 CSR 為基礎的憑證要求,請按一下切換鈕。
  2. 選用:如要限制以設定為基礎的憑證要求,請按一下切換鈕。

設定發布選項

如要設定發布選項,請按照下列步驟操作:

  1. 選用步驟:如要禁止將 CA 集區中 CA 的 CA 憑證發布至 Cloud Storage 值區,請按一下切換鈕。
  2. 選用步驟:如要禁止將 CA 集區中 CA 的 CRL 發布至 Cloud Storage bucket,請點選切換鈕。
  3. 按一下選單,選取已發布 CA 憑證和 CRL 的編碼格式。

    為 CA 集區中的 CA 設定 CA 憑證和 CRL 的發布選項。

  4. 點選「下一步」

定義基礎金鑰使用方式

這項設定是指數位憑證內的 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. 如果擴充功能至關重要,請選取「擴充功能至關重要」

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

如要建立 CA 集區,請按一下「完成」

gcloud

執行下列指令:

gcloud privateca pools create POOL_NAME --location=LOCATION

更改下列內容:

  • POOL_NAME:CA 集區的名稱。
  • LOCATION:要建立 CA 集區的位置。如需完整清單,請參閱「地點」。

如果未指定 CA 集區的所需層級,系統預設會選取 Enterprise 層級。如要為 CA 集區指定層級,請執行下列 gcloud 指令:

gcloud privateca pools create POOL_NAME --location=LOCATION --tier=TIER_NAME

更改下列內容:

  • POOL_NAME:CA 集區的名稱。
  • LOCATION:要建立 CA 集區的位置。如需完整清單,請參閱「地點」。
  • TIER_NAMEdevopsenterprise。詳情請參閱「選取作業層級」。

如未指定 CA 集區的發布編碼格式,系統會預設選取PEM發布編碼格式。如要為 CA 集區指定發布編碼格式,請執行下列 gcloud 指令:

gcloud privateca pools create POOL_NAME --location=LOCATION --publishing-encoding-format=PUBLISHING_ENCODING_FORMAT

更改下列內容:

  • POOL_NAME:CA 集區的名稱。
  • LOCATION:要建立 CA 集區的位置。如需完整清單,請參閱「地點」。
  • PUBLISHING_ENCODING_FORMATPEMDER

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

如要瞭解如何限制 CA 集區可核發的憑證類型,請參閱「為 CA 集區新增憑證核發政策」。

Terraform

resource "google_privateca_ca_pool" "default" {
  name     = "ca-pool"
  location = "us-central1"
  tier     = "ENTERPRISE"
  publishing_options {
    publish_ca_cert = true
    publish_crl     = true
  }
  labels = {
    foo = "bar"
  }
}

Go

如要向 CA 服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

import (
	"context"
	"fmt"
	"io"

	privateca "cloud.google.com/go/security/privateca/apiv1"
	"cloud.google.com/go/security/privateca/apiv1/privatecapb"
)

// Create a Certificate Authority pool. All certificates created under this CA pool will
// follow the same issuance policy, IAM policies, etc.
func createCaPool(w io.Writer, projectId string, location string, caPoolId string) error {
	// projectId := "your_project_id"
	// location := "us-central1"	// For a list of locations, see: https://cloud.google.com/certificate-authority-service/docs/locations.
	// caPoolId := "ca-pool-id"		// A unique id/name for the ca pool.

	ctx := context.Background()
	caClient, err := privateca.NewCertificateAuthorityClient(ctx)
	if err != nil {
		return fmt.Errorf("NewCertificateAuthorityClient creation failed: %w", err)
	}
	defer caClient.Close()

	caPool := &privatecapb.CaPool{
		// Set the tier (see: https://cloud.google.com/certificate-authority-service/docs/tiers).
		Tier: privatecapb.CaPool_ENTERPRISE,
	}

	locationPath := fmt.Sprintf("projects/%s/locations/%s", projectId, location)

	// See https://pkg.go.dev/cloud.google.com/go/security/privateca/apiv1/privatecapb#CreateCaPoolRequest.
	req := &privatecapb.CreateCaPoolRequest{
		Parent:   locationPath,
		CaPoolId: caPoolId,
		CaPool:   caPool,
	}

	op, err := caClient.CreateCaPool(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateCaPool failed: %w", err)
	}

	if _, err = op.Wait(ctx); err != nil {
		return fmt.Errorf("CreateCaPool failed during wait: %w", err)
	}

	fmt.Fprintf(w, "CA Pool created")

	return nil
}

Java

如要向 CA 服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。


import com.google.api.core.ApiFuture;
import com.google.cloud.security.privateca.v1.CaPool;
import com.google.cloud.security.privateca.v1.CaPool.IssuancePolicy;
import com.google.cloud.security.privateca.v1.CaPool.Tier;
import com.google.cloud.security.privateca.v1.CertificateAuthorityServiceClient;
import com.google.cloud.security.privateca.v1.CertificateIdentityConstraints;
import com.google.cloud.security.privateca.v1.CreateCaPoolRequest;
import com.google.cloud.security.privateca.v1.LocationName;
import com.google.longrunning.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class CreateCaPool {

  public static void main(String[] args)
      throws InterruptedException, ExecutionException, IOException {
    // TODO(developer): Replace these variables before running the sample.
    // location: For a list of locations, see:
    // https://cloud.google.com/certificate-authority-service/docs/locations
    // poolId: Set a unique poolId for the CA pool.
    String project = "your-project-id";
    String location = "ca-location";
    String poolId = "ca-pool-id";
    createCaPool(project, location, poolId);
  }

  // Create a Certificate Authority Pool. All certificates created under this CA pool will
  // follow the same issuance policy, IAM policies,etc.,
  public static void createCaPool(String project, String location, String poolId)
      throws InterruptedException, ExecutionException, IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `certificateAuthorityServiceClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (CertificateAuthorityServiceClient certificateAuthorityServiceClient =
        CertificateAuthorityServiceClient.create()) {

      IssuancePolicy issuancePolicy = IssuancePolicy.newBuilder()
          .setIdentityConstraints(CertificateIdentityConstraints.newBuilder()
              .setAllowSubjectPassthrough(true)
              .setAllowSubjectAltNamesPassthrough(true)
              .build())
          .build();

      /* Create the pool request
        Set Parent which denotes the project id and location.
        Set the Tier (see: https://cloud.google.com/certificate-authority-service/docs/tiers).
      */
      CreateCaPoolRequest caPoolRequest =
          CreateCaPoolRequest.newBuilder()
              .setParent(LocationName.of(project, location).toString())
              .setCaPoolId(poolId)
              .setCaPool(
                  CaPool.newBuilder()
                      .setIssuancePolicy(issuancePolicy)
                      .setTier(Tier.ENTERPRISE)
                      .build())
              .build();

      // Create the CA pool.
      ApiFuture<Operation> futureCall =
          certificateAuthorityServiceClient.createCaPoolCallable().futureCall(caPoolRequest);
      Operation response = futureCall.get();

      if (response.hasError()) {
        System.out.println("Error while creating CA pool !" + response.getError());
        return;
      }

      System.out.println("CA pool created successfully: " + poolId);
    }
  }
}

Python

如要向 CA 服務進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

import google.cloud.security.privateca_v1 as privateca_v1


def create_ca_pool(project_id: str, location: str, ca_pool_name: str) -> None:
    """
    Create a Certificate Authority pool. All certificates created under this CA pool will
    follow the same issuance policy, IAM policies,etc.,

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        location: location you want to use. For a list of locations, see: https://cloud.google.com/certificate-authority-service/docs/locations.
        ca_pool_name: a unique name for the ca pool.
    """

    caServiceClient = privateca_v1.CertificateAuthorityServiceClient()

    ca_pool = privateca_v1.CaPool(
        # Set the tier (see: https://cloud.google.com/certificate-authority-service/docs/tiers).
        tier=privateca_v1.CaPool.Tier.ENTERPRISE,
    )
    location_path = caServiceClient.common_location_path(project_id, location)

    # Create the pool request.
    request = privateca_v1.CreateCaPoolRequest(
        parent=location_path,
        ca_pool_id=ca_pool_name,
        ca_pool=ca_pool,
    )

    # Create the CA pool.
    operation = caServiceClient.create_ca_pool(request=request)

    print("Operation result:", operation.result())

REST API

  1. 建立 CA 集區。

    HTTP 方法和網址:

    POST https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/caPools\?ca_pool_id=POOL_ID

    JSON 要求主體:

    {
      "tier": "ENTERPRISE"
    }
    

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    {
        "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID",
        "metadata": {...},
        "done": false
    }
    

  2. 輪詢作業,直到完成為止。

    長時間執行的作業的 done 屬性設為 true 時,即代表作業完成。

    HTTP 方法和網址:

    GET https://privateca.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID

    如要傳送要求,請展開以下其中一個選項:

    您應該會收到如下的 JSON 回應:

    {
        "name": "projects/PROJECT_ID/locations/LOCATION/operations/operation-UUID",
        "metadata": {...},
        "done": true,
        "response": {
          "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CaPool",
          "name": "...",
          "tier": "ENTERPRISE"
        }
    }
    

在 CA 集區中新增或更新標籤

標籤是鍵/值組合,可協助您整理 CA 服務資源。您可以根據標籤篩選資源。

如要新增或更新 CA 集區的標籤,請按照下列步驟操作:

控制台

如要新增標籤,請按照下列步驟操作:

  1. 前往「Certificate Authority Service」(憑證授權單位服務) 頁面。

    前往憑證授權單位服務

  2. 在「CA pool manager」(CA 集區管理員) 分頁中,選取 CA 集區。

  3. 按一下 [標籤]

  4. 按一下「新增標籤」

  5. 新增鍵/值組合。

  6. 按一下 [儲存]

    為現有 CA 集區新增標籤。

如要編輯現有標籤,請按照下列步驟操作:

  1. 前往「Certificate Authority Service」(憑證授權單位服務) 頁面。

    前往憑證授權單位服務

  2. 在「CA pool manager」(CA 集區管理員) 分頁中,選取 CA 集區。

  3. 按一下 [標籤]

  4. 編輯標籤值。

  5. 按一下 [儲存]

gcloud

執行下列指令:

gcloud privateca pools update POOL_ID --location=LOCATION --update-labels foo=bar

更改下列內容:

  • POOL_ID:CA 集區的名稱。
  • LOCATION:CA 集區的位置。如需完整的位置清單,請參閱「位置」。

後續步驟