從外部 CA 建立從屬 CA

本頁說明如何建立從屬憑證授權單位 (CA),並向上鏈結至外部根 CA。

如果您有現有的公開金鑰基礎架構 (PKI) 階層,其中包含根 CA 和從屬 CA,可以保留相同的根 CA,並在 CA 服務中建立從屬 CA,該 CA 會鏈結至外部根 CA。外部根 CA 的金鑰和作業仍位於 Google Cloud之外。 您只能使用外部根 CA,將從屬 CA 憑證核發給Google Cloud。任何信任外部根 CA 的工作負載,都會立即信任下層 CA。接著,您可以使用從屬 CA 簽發憑證,不必在執行階段連回外部根 CA。

事前準備

  • 確認您具備 CA 服務作業管理員 (roles/privateca.caManager) 或 CA 服務管理員 (roles/privateca.admin) IAM 角色。詳情請參閱「設定 IAM 政策」。
  • 找出外部根 CA。
  • 定義下層 CA 的名稱、主體、效期和金鑰大小。詳情請參閱「判斷 CA 設定」。

從外部 CA 建立從屬 CA

從外部 CA 建立從屬 CA 的步驟如下:

  1. 產生從屬 CA 憑證簽署要求 (CSR):第一步是產生從屬 CA 的 CSR,然後下載 CSR。

  2. 請外部根 CA 簽署從屬 CA 憑證:第二步是將 CSR 提交給外部根 CA 簽署。請務必按照外部根 CA 的具體指示,提交 CSR 並取得簽署的憑證。

  3. 將簽署的下層 CA 憑證匯入 CA 服務:最後一個步驟是使用 Google Cloud CLI 或 Google Cloud 控制台,上傳簽署的 PEM 憑證鏈。

以下章節說明如何從外部根 CA 建立下層 CA。

建立 CSR

控制台

  1. 在 Google Cloud 控制台中,前往「Security」(安全性) >「Certificate Authority Service」(憑證授權單位服務) 選單。

    前往憑證授權單位服務

  2. 按一下「CA 管理員」分頁標籤。

  3. 按一下「建立 CA」

選取 CA 類型

  1. 按一下「從屬 CA」
  2. 在「Valid for」欄位中,輸入您希望 CA 憑證核發的憑證有效期限。
  3. 按一下「Root CA is external」(根 CA 為外部)。
  4. 為 CA 層級選擇其中一個可用選項。詳情請參閱「選取作業層級」。
  5. 在「區域化」下方,從清單中選取「CA 位置」
  6. 點選「下一步」
設定 CA 主體名稱
  1. 在「Organization (O)」(機構 (O)) 欄位中,輸入貴公司名稱。
  2. 選用:在「機構單位 (OU)」欄位中,輸入公司部門或業務單位。
  3. 選用:在「Country name (C)」(國家/地區名稱 (C)) 欄位中,輸入兩個英文字母的國家/地區代碼。
  4. 選用:在「州/省名稱」欄位中,輸入您所在州/省的名稱。
  5. 選用:在「Locality name」(所在地名稱) 欄位中輸入城市名稱。
  6. 在「CA common name (CN)」(CA 一般名稱 (CN)) 欄位中,輸入 CA 名稱。
  7. 按一下「繼續」
設定 CA 金鑰大小和演算法
  1. 請選擇最符合需求的金鑰演算法。如要瞭解如何決定合適的金鑰演算法,請參閱「選擇金鑰演算法」。
  2. 按一下「繼續」
設定 CA 構件
  1. 選擇要使用 Google 代管或客戶代管的 Cloud Storage 值區。
    1. 如果是 Google 管理的 Cloud Storage 值區,CA 服務會在與 CA 相同的位置建立 Google 管理的值區。
    2. 如果是客戶代管的 Cloud Storage 值區,請按一下「瀏覽」,然後選取現有的 Cloud Storage 值區。
  2. 按一下「繼續」
新增標籤

下列步驟為選用步驟。

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

  1. 按一下「新增項目」
  2. 在「Key 1」欄位中,輸入標籤鍵。
  3. 在「Value 1」(值 1) 欄位中輸入標籤值。
  4. 如要新增其他標籤,請按一下「新增項目」。然後,按照步驟 2 和 3 所述,新增標籤鍵和值。
  5. 按一下「繼續」
檢查設定

詳閱所有設定,然後按一下「完成」建立 CA。

下載 CSR

  1. 在「憑證授權單位」頁面上,選取要啟用的 CA。
  2. 按一下「啟用」
  3. 在開啟的對話方塊中,按一下「下載 CSR」

    下載 CA 的 CSR。

gcloud

  1. 如要為下層 CA 建立 CA 集區,請執行下列指令。 詳情請參閱「建立 CA 集區」。

    gcloud privateca pools create SUBORDINATE_POOL_ID --location=LOCATION
    

    更改下列內容:

    • SUBORDINATE_POOL_ID:CA 集區的名稱。
    • LOCATION:CA 集區的位置。
  2. 如要在建立的 CA 集區中建立下層 CA,請執行下列 gcloud 指令。gcloud 指令也會建立 CSR,並儲存至 FILE_NAME 檔案。

      gcloud privateca subordinates create SUBORDINATE_CA_ID \
          --pool=SUBORDINATE_POOL_ID \
          --location=LOCATION \
          --create-csr --csr-output-file=FILE_NAME \
          --key-algorithm="ec-p256-sha256" \
          --subject="CN=Example Server TLS CA, O=Example LLC"
    

    更改下列內容:

    • SUBORDINATE_CA_ID:下層 CA 的專屬 ID。
    • SUBORDINATE_POOL_ID:CA 集區的名稱。
    • LOCATION:CA 集區的位置。
    • FILE_NAME:PEM 編碼 CSR 的寫入檔案名稱。

    --key-algorithm 旗標會採用您要用於建立 CA 代管 Cloud HSM 金鑰的加密編譯演算法。

    --subject 標記會採用憑證主體的 X.501 名稱。

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

建立 CSR 時,系統會傳回下列陳述式:

Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID] and saved CSR to FILE_NAME.

如要查看可用設定的完整清單,請執行下列指令:

gcloud privateca subordinates create --help

如果遺失 CSR,可以使用下列指令再次下載:

gcloud privateca subordinates get-csr SUBORDINATE_CA_ID \
    --pool=SUBORDINATE_POOL_ID \
    --location=LOCATION

Terraform

  1. 如要在 CA 集區中建立 CA 集區和下層 CA,請使用下列設定檔:

    resource "google_privateca_ca_pool" "default" {
      name     = "test-ca-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
    }
    
    resource "google_privateca_certificate_authority" "sub-ca" {
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = "my-certificate-authority-sub"
      location = "us-central1"
      config {
        subject_config {
          subject {
            organization = "HashiCorp"
            common_name = "my-subordinate-authority"
          }
          subject_alt_name {
            dns_names = ["hashicorp.com"]
          }
        }
        x509_config {
          ca_options {
            is_ca = true
            # Force the sub CA to only issue leaf certs
            max_issuer_path_length = 0
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign = true
            }
            extended_key_usage {
            }
         }
       }
      }
      lifetime = "86400s"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
      type = "SUBORDINATE"
    }
    
  2. 如要擷取 CSR,請附加下列設定。

    data "google_privateca_certificate_authority" "sub-ca-csr" {
      location = "us-central1"
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = google_privateca_certificate_authority.sub-ca.certificate_authority_id
    }
    
    output "csr" {
      value = data.google_privateca_certificate_authority.sub-ca-csr.pem_csr
    }
    
  3. 執行 terraform apply

簽署 CSR

將產生的 CSR 檔案傳送給貴機構負責核發憑證的成員,並要求對方簽署。具體步驟取決於貴機構的設定。

您可以使用下列 openssl 指令,試用簡單的根 CA:

Shell

設定新根 CA 的設定。

cat > root.conf <<- EOM
[ req ]
distinguished_name = req_distinguished_name
x509_extensions    = v3_ca
prompt             = no
[ req_distinguished_name ]
commonName = Sample Root
[ v3_ca ]
subjectKeyIdentifier=hash
basicConstraints=critical, CA:true
EOM

建立新的根 CA。

openssl req -x509 -new -nodes -config root.conf -keyout rootCA.key \
  -days 3000 -out rootCA.crt -batch

設定必須新增至新從屬 CA 憑證的擴充功能。

cat > extensions.conf <<- EOM
basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
extendedKeyUsage=critical,serverAuth
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOM

使用這個根憑證簽署從屬 CA 的 CSR。

openssl x509 -req -in FILE_NAME -CA rootCA.crt -CAkey rootCA.key \
  -CAcreateserial -out subordinate.crt -days 1095 -sha256 -extfile extensions.conf

將整個憑證鏈結串聯成單一檔案。

cat subordinate.crt > chain.crt
cat rootCA.crt >> chain.crt

上傳已簽署的憑證

如要使用已簽署的憑證啟用從屬 CA,請按照下列步驟操作:

控制台

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

    前往憑證授權單位服務

  2. 按一下「CA 管理員」分頁標籤。

  3. 在「憑證授權單位」底下,選擇您建立的下層 CA。

  4. 按一下「啟用」

  5. 在隨即開啟的對話方塊中,按一下「下載 CSR」,即可下載核發憑證的 CA 可簽署的 PEM 編碼 CSR 檔案。

  6. 點選「下一步」

  7. 在「Upload Certificate Chain」(上傳憑證鏈) 欄位中,按一下「Browse」(瀏覽)

  8. 上傳副檔名為 .crt 的簽署憑證檔案。

  9. 按一下「Activate」。

gcloud

gcloud privateca subordinates activate SUBORDINATE_CA_ID \
    --pool=SUBORDINATE_POOL_ID \
    --location=LOCATION \
    --pem-chain ./chain.crt

更改下列內容:

  • SUBORDINATE_CA_ID:要啟用的從屬 CA 專屬 ID。
  • SUBORDINATE_POOL_ID:包含從屬 CA 的 CA 集區名稱。
  • LOCATION:CA 集區的位置。如需完整清單,請參閱「地點」。

--pem-chain 旗標為必要旗標。這個標記會採用包含 PEM 編碼憑證清單的檔案。憑證清單開頭為目前的 CA 憑證,結尾為根 CA 憑證。

如要進一步瞭解 gcloud privateca subordinates activate 指令,請參閱 gcloud privateca subordinates activate

上傳簽署的憑證時,系統會傳回下列陳述式:

Activated certificate authority [SUBORDINATE_CA_ID].

Terraform

  1. 將簽署的 CA 憑證儲存至本機,並命名為 subordinate.crt
  2. 將簽署者 CA 憑證儲存至本機,格式為 rootCA.crt
  3. 移除第一個步驟中擷取 CSR 的設定,因為 CA 啟用後,系統不允許擷取 CSR。
  4. 使用下列欄位更新從屬 CA 設定,然後執行 terraform apply

    pem_ca_certificate     = file("subordinate.crt")
    subordinate_config {
      pem_issuer_chain {
          pem_certificates = [file("rootCA.crt")]
      }
    }
    

如果簽發者鏈結包含多個 CA,請將值指定為 [file("intermediateCA.cert"), file("rootCA.crt")]

後續步驟