使用私人 CA 設定前端 mTLS

有效的用戶端憑證必須顯示信任鏈結,可追溯至信任存放區中的信任錨點。本頁說明如何使用您控管的私人 CA (憑證授權單位) 根憑證,建立自己的信任鏈。在這個設定中,私有 CA 是使用憑證授權單位服務建立。

取得私人 CA 的根憑證後,本文將說明如何將憑證上傳至 Certificate Manager TrustConfig 資源的信任存放區。接著,將信任設定連結至用戶端驗證 (ServerTLSPolicy) 資源,然後將用戶端驗證資源附加至負載平衡器的目標 HTTPS Proxy 資源。

事前準備

  • 查看雙向傳輸層安全標準 (TLS) 總覽
  • 請參閱管理信任設定指南。
  • 安裝 Google Cloud CLI。如需工具的完整總覽,請參閱 gcloud CLI 總覽。您可以在 API 和 gcloud CLI 參考資料中找到與負載平衡相關的指令。

    如果您先前沒有執行過 gcloud CLI,請先執行 gcloud init 進行驗證。

  • 請參閱建立 CA 集區指南。

  • 如果您使用全域外部應用程式負載平衡器或傳統版應用程式負載平衡器,請務必設定負載平衡器,並使用下列任一支援的後端:

    • VM 執行個體群組後端
    • Cloud Storage 值區 (除了後端值區外,負載平衡器也必須至少連結一個後端服務,才能支援這項功能)
    • Cloud Run、App Engine 或 Cloud Run functions
    • 混合式連線
  • 如果您使用區域外部應用程式負載平衡器、跨區域內部應用程式負載平衡器或區域內部應用程式負載平衡器,請務必使用下列任一支援的後端設定負載平衡器:

    • VM 執行個體群組後端
    • Cloud Run
    • 混合式連線

權限

如要取得完成本指南所需的權限,請要求管理員授予您專案的下列 IAM 角色:

  • 如要建立負載平衡器資源 (例如 TargetHTTPProxy): Compute 負載平衡器管理員 (roles/compute.loadBalancerAdmin)
  • 如要使用 Certificate Manager 資源: Certificate Manager 擁有者 (roles/certificatemanager.owner)
  • 如要建立安全性與網路元件: Compute 網路管理員 (roles/compute.networkAdmin) 和 Compute 安全管理員 (roles/compute.securityAdmin)
  • 如要建立專案 (選用): 專案建立者 (roles/resourcemanager.projectCreator)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

取得根 CA 的憑證

根 CA 具有自行簽署的憑證,您必須將該憑證新增至信任存放區。根 CA 的憑證位於憑證鏈的頂端。

如要取得根 CA 的憑證,請先建立 CA 集區 (建立時為空白)。接著,您需要建立根 CA 並新增至 CA 集區。根 CA 和 CA 集區是使用憑證授權單位服務建立,步驟如下:

  1. 如要建立 CA 集區,請使用 gcloud privateca pools create 指令

    gcloud privateca pools create CA_POOL \
       --location=us-central1
    

    CA_POOL 替換為父項 CA 集區的 ID 或名稱。

  2. 如要建立根 CA 並新增至 CA 集區,請使用 gcloud privateca roots create 指令

    gcloud privateca roots create CA_ROOT \
       --pool=CA_POOL \
       --subject="CN=my-ca, O=Test LLC" \
       --location=us-central1
    

    更改下列內容:

    • CA_ROOT:根 CA 的 ID 或名稱。
    • CA_POOL:上層 CA 集區的 ID 或名稱。
  3. 擷取可識別根 CA 的 PEM 編碼憑證。

    gcloud privateca roots describe CA_ROOT \
       --pool=CA_POOL \
       --location=us-central1 \
       --format='value(pemCaCertificates)' > root.cert
    

    更改下列內容:

    • CA_ROOT:私有 CA 的 ID 或名稱。
    • CA_POOL:上層 CA 集區的 ID 或名稱。

    根憑證 (root.cert) 必須上傳至信任存放區。我們將在下一節執行這個步驟。

如要進一步瞭解如何使用憑證授權單位服務建立 CA 集區和根 CA,請參閱下列文章:

設定根 CA 憑證格式

如要在信任存放區中加入根憑證,請將憑證格式設為單行,並儲存在環境變數中,以便信任設定 YAML 檔案參照。

export ROOT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')

建立信任設定資源

信任設定是 Certificate Manager 中的資源,代表您的公用金鑰基礎架構 (PKI) 設定。

如要建立信任設定資源,請完成下列步驟:

主控台

  1. 前往 Google Cloud 控制台的「Certificate Manager」頁面。

    前往 Certificate Manager

  2. 在「信任設定」分頁中,按一下「新增信任設定」

  3. 輸入設定名稱。

  4. 在「Location」(位置) 部分,選取「Global」(全域) 或「Regional」(區域)

    位置代表信任設定資源的儲存位置。如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請建立全域信任設定資源。如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立區域性信任設定資源。

    如果選取「區域」,請選取區域。

  5. 在「信任儲存庫」部分中,按一下「新增信任錨點」,然後上傳 PEM 編碼憑證檔案,或複製憑證內容。

  6. 按一下「新增」

  7. 點選「建立」

確認新的信任設定資源是否顯示在設定清單中。

gcloud

  1. 建立信任設定 YAML 檔案 (trust_config.yaml),指定信任設定參數。在本例中,信任設定資源是信任存放區,其中包含代表根憑證的單一信任錨點。這個根憑證是使用私有 CA 產生。

    cat << EOF > trust_config.yaml
    name: TRUST_CONFIG_NAME
    trustStores:
    - trustAnchors:
        - pemCertificate: "${ROOT?}"
    EOF
    
  2. 如要匯入信任設定 YAML 檔案,請使用 gcloud certificate-manager trust-configs import 指令

    全球

    如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請指定 global 做為信任設定資源的儲存位置。

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
        --source=trust_config.yaml \
        --location=global
    

    更改下列內容:

    • TRUST_CONFIG_NAME:信任設定資源的名稱。

    區域

    如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請指定儲存信任設定資源的區域。

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME  \
        --source=trust_config.yaml \
        --location=LOCATION
    

    更改下列內容:

    • TRUST_CONFIG_NAME:信任設定資源的名稱。
    • LOCATION:儲存信任設定資源的區域。預設位置為 global

建立用戶端驗證資源

有了用戶端驗證 (也稱為 ServerTLSPolicy) 資源,您就能指定伺服器端 TLS 模式和信任設定資源,用於驗證用戶端憑證。如果用戶端向負載平衡器提供無效憑證或未提供憑證,clientValidationMode 會指定如何處理用戶端連線。詳情請參閱「mTLS 用戶端驗證模式」。

  • 如果 clientValidationMode 設為 ALLOW_INVALID_OR_MISSING_CLIENT_CERT,即使驗證失敗或缺少用戶端憑證,所有要求都會傳遞至後端。
  • 如果 clientValidationMode 設為 REJECT_INVALID,只有提供可根據 TrustConfig 資源驗證的用戶端憑證,要求才會傳送至後端。

如要建立用戶端驗證 (ServerTlsPolicy) 資源,請完成下列步驟:

主控台

  1. 前往 Google Cloud 控制台的「Authentication Configuration」(驗證設定) 頁面。

    前往「驗證設定」

  2. 在「Client Authentication」(用戶端驗證) 分頁中,按一下「Create」(建立)

  3. 輸入用戶端驗證資源的名稱。

  4. 在「Location」(位置) 部分,選取「Global」(全域) 或「Regional」(區域)

    如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請將位置設為全域。如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請將位置設為負載平衡器設定所在的區域。

  5. 在「Client Authentication mode」(用戶端驗證模式) 中,選取「Load balancing」(負載平衡)

  6. 選取用戶端驗證模式。

  7. 選取您先前建立的信任設定資源。

  8. 點選「建立」

確認是否顯示「用戶端驗證」圖示 (ServerTlsPolicy)。

gcloud

  1. 根據您要如何處理連線,選取下列其中一個選項,以 YAML 格式定義 Client Authentication (ServerTlsPolicy) 資源。

    • 選項 1: clientValidationMode 設為 ALLOW_INVALID_OR_MISSING_CLIENT_CERT

      全球

      如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請建立 YAML 檔案,以宣告方式指定用戶端驗證模式和全域信任設定資源:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      區域

      如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立 YAML 檔案,以宣告方式指定用戶端驗證模式和區域信任設定資源:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
          clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      
    • 選項 2: clientValidationMode 設為 REJECT_INVALID

      全球

      如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請建立 YAML 檔案,以宣告方式指定用戶端驗證模式和全域信任設定資源:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
          clientValidationMode: REJECT_INVALID
          clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      區域

      如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立 YAML 檔案,以宣告方式指定用戶端驗證模式和區域信任設定資源:

      cat << EOF > server_tls_policy.yaml
      name: SERVER_TLS_POLICY_NAME
      mtlsPolicy:
            clientValidationMode: REJECT_INVALID
            clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME
      EOF
      

      更改下列內容:

      SERVER_TLS_POLICY_NAME:用戶端驗證 (ServerTlsPolicy) 資源的名稱。

      PROJECT_ID:您的 Google Cloud 專案 ID。

      LOCATION:如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請使用 global。如果是區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請使用您設定負載平衡器的區域。

      TRUST_CONFIG_NAME:您先前建立的信任設定資源名稱。

  2. 如要匯入用戶端驗證 ServerTlsPolicy 資源,請使用 gcloud network-security server-tls-policies import 指令

    全球

    如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請將 --location 旗標設為 global

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=global
    

    更改下列內容:

    SERVER_TLS_POLICY_NAME:用戶端驗證 (ServerTlsPolicy) 資源的名稱。

    區域

    如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請將 --location 旗標設為負載平衡器設定所在的區域。

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \
      --source=server_tls_policy.yaml \
      --location=LOCATION
    

    更改下列內容:

    SERVER_TLS_POLICY_NAME:用戶端驗證 (ServerTlsPolicy) 資源的名稱。

  3. 選用:如要列出所有 Client Authentication (ServerTlsPolicies) 資源,請使用 gcloud network-security server-tls-policies list 指令

    gcloud network-security server-tls-policies list \
      --location=LOCATION
    

    更改下列內容:

    LOCATION:如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請使用 global。如果是區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請使用您設定負載平衡器的區域。

將用戶端驗證資源附加至負載平衡器

如要啟用雙向 TLS 驗證,請在設定負載平衡器後,將用戶端驗證 (ServerTLSPolicy) 資源附加至負載平衡器的目標 HTTPS Proxy 資源。

主控台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

    前往「Load balancing」(負載平衡)

  2. 從負載平衡器清單中,選取要附加「用戶端驗證」(ServerTLSPolicy) 資源的負載平衡器。

  3. 按一下「編輯」

  4. 在 HTTPS 前端的「前端設定」部分,展開「顯示進階功能」部分。

  5. 從「用戶端驗證」清單中,選取用戶端驗證資源。

  6. 按一下 [完成]

  7. 按一下「更新」

gcloud

  1. 如要列出專案中的所有目標 HTTPS Proxy 資源,請使用 gcloud compute target-https-proxies list 指令

    gcloud compute target-https-proxies list
    

    記下要附加 ServerTLSPolicy 資源的目標 HTTPS Proxy 名稱。這個名稱在後續步驟中稱為 TARGET_HTTPS_PROXY_NAME

  2. 如要將目標 HTTPS Proxy 的設定匯出至檔案,請使用 gcloud compute target-https-proxies export 指令

    全球

      gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
          --destination=TARGET_PROXY_FILENAME \
          --global
      

    更改下列內容:

    • TARGET_HTTPS_PROXY_NAME:目標 Proxy 的名稱。
    • TARGET_PROXY_FILENAME:目標 Proxy 的設定檔名稱,格式為 YAML。 例如:mtls_target_proxy.yaml

    區域

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --destination=TARGET_PROXY_FILENAME \
        --region=REGION
    

    更改下列內容:

    • TARGET_HTTPS_PROXY_NAME:目標 Proxy 的名稱。
    • TARGET_PROXY_FILENAME:目標 Proxy 的設定檔名稱,格式為 YAML。 例如:mtls_target_proxy.yaml
    • REGION:您設定負載平衡器的區域。
  3. 如要列出所有用戶端驗證 (ServerTlsPolicy) 資源,請使用 gcloud network-security server-tls-policies list 指令

    gcloud network-security server-tls-policies list \
        --location=LOCATION
    

    更改下列內容:

    LOCATION:如果是跨區域內部應用程式負載平衡器、全域外部應用程式負載平衡器或傳統版應用程式負載平衡器,請使用 global。如果是區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請使用您設定負載平衡器的區域。

    請記下要設定 mTLS 的用戶端驗證 (ServerTLSPolicy) 資源名稱。這個名稱在下一個步驟中稱為 SERVER_TLS_POLICY_NAME

  4. 將用戶端驗證 (ServerTlsPolicy) 附加至目標 HTTPS Proxy。

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • LOCATION:適用於全域外部應用程式負載平衡器或傳統版應用程式負載平衡器,以及跨區域內部應用程式負載平衡器,請使用 global。如果是區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請使用您設定負載平衡器的區域。
    • SERVER_TLS_POLICY_NAME:用戶端驗證 (ServerTLSPolicy) 資源的名稱。
    • TARGET_PROXY_FILENAME:目標 Proxy 設定檔的名稱,格式為 YAML。
  5. 如要從檔案匯入目標 HTTPS Proxy 的設定,請使用 gcloud compute target-https-proxies import 指令

    全球

      gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
          --source=TARGET_PROXY_FILENAME \
          --global
      

    更改下列內容:

    • TARGET_HTTPS_PROXY_NAME:目標 Proxy 的名稱。
    • TARGET_PROXY_FILENAME:目標 Proxy 的設定檔名稱,格式為 YAML。 例如:mtls_target_proxy.yaml

    區域

      gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
          --source=TARGET_PROXY_FILENAME \
          --region=REGION
      

    更改下列內容:

    • TARGET_HTTPS_PROXY_NAME:目標 Proxy 的名稱。
    • TARGET_PROXY_FILENAME:目標 Proxy 設定檔的名稱,格式為 YAML。例如:mtls_target_proxy.yaml
    • REGION:您設定負載平衡器的區域。

新增 mTLS 自訂標頭

啟用 mTLS 後,您可以使用自訂標頭傳遞 mTLS 連線的相關資訊。您也可以啟用記錄功能,以便在記錄中擷取 mTLS 連線失敗事件。

在後端服務中新增 mTLS 自訂標頭

如果是全域外部應用程式負載平衡器或傳統應用程式負載平衡器,可以使用 自訂標頭,將 mTLS 連線的相關資訊傳遞至後端服務

  1. 如要列出專案中的所有後端服務,請使用 gcloud compute backend-services list 指令

    gcloud compute backend-services list
    

    記下後端服務的名稱,以便啟用自訂標頭和記錄功能。 這個名稱在下一個步驟中稱為 BACKEND_SERVICE

  2. 如要更新後端服務,請使用 gcloud compute backend-services update 指令

    gcloud compute backend-services update BACKEND_SERVICE \
      --global \
      --enable-logging \
      --logging-sample-rate=1 \
      --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \
      --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \
      --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \
      --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \
      --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \
      --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \
      --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \
      --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \
      --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \
      --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
    

在網址對應中新增 mTLS 自訂標頭

如果是跨區域內部應用程式負載平衡器、區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,可以使用 自訂標頭,將 mTLS 連線的相關資訊傳遞至網址對應

如要列出專案中的所有網址對應,請使用 gcloud compute url-maps list 指令

   gcloud compute url-maps list
   

請記下網址對應的名稱,以便啟用自訂標頭和記錄。 這個名稱在後續步驟中稱為 URL_MAP_NAME

全球

如要編輯跨區域內部應用程式負載平衡器的網址對應,請使用 gcloud compute url-maps edit 指令:

   gcloud compute url-maps edit URL_MAP_NAME --global
   

以下是 YAML 檔案範例,說明如何在自訂要求標頭 (requestHeadersToAdd) 中使用變數。您可以使用相同變數傳送自訂回應標頭 (responseHeadersToAdd)。

   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

區域

如要編輯區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器的網址對應,請使用 gcloud compute url-maps edit 指令:

   gcloud compute url-maps edit URL_MAP_NAME --region=REGION
   

以下是 YAML 檔案範例,說明如何在自訂要求標頭 (requestHeadersToAdd) 中使用變數。您可以使用相同變數傳送自訂回應標頭 (responseHeadersToAdd)。

   defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
      name: regional-lb-map
      region: region/REGION
   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

使用 CSR 取得用戶端憑證

本節提供額外的設定選項,可產生由根 CA 憑證簽署的用戶端 (葉) 憑證。

如要取得用戶端憑證,請產生憑證簽署要求 (CSR),並提交至 CA 集區。

  1. 建立 OpenSSL 設定檔,產生用戶端憑證的 CSR。

    下列設定檔 (client.config) 包含 [extension_requirements] 區段,用於指定要納入 CSR 的 X.509 擴充功能。如要進一步瞭解用戶端憑證規定,請參閱「憑證規定」。

    cat > client.config << EOF
    [req]
    default_bits              = 2048
    req_extensions            = extension_requirements
    distinguished_name        = dn_requirements
    prompt                    = no
    
    [extension_requirements]
    basicConstraints          = critical, CA:FALSE
    keyUsage                  = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage          = clientAuth
    
    [dn_requirements]
    countryName               = US
    stateOrProvinceName       = California
    localityName              = San Francisco
    0.organizationName        = example
    organizationalUnitName    = test
    commonName                = test.example.com
    emailAddress              = test@example.com
    
    EOF
    
  2. 執行下列 openssl 指令,產生 CSR (csr.pem) 和對應的私密金鑰 (key.pem)。

    openssl req -newkey rsa:2048 -nodes \
        -config client.config \
        -keyout key.pem \
        -out csr.pem
    
  3. 執行下列 gcloud privateca certificates create 指令,提交 CSR 並向 CA 集區中的 CA 要求 X.509 用戶端憑證。

    gcloud privateca certificates create \
         --issuer-pool CA_POOL \
         --issuer-location=us-central1 \
         --csr csr.pem \
         --cert-output-file CERT_FILENAME
    

    更改下列內容:

    • CA_POOL:CA 集區的 ID 或名稱。
    • CERT_FILENAME:PEM 編碼憑證鏈結檔案,順序為從分葉到根。
  4. 使用用戶端 SSL 憑證,將安全 HTTPS 要求傳送至負載平衡器的 IP 位址。用戶端會出示憑證,向負載平衡器驗證自身。

    curl -v --key key.pem --cert CERT_FILENAME https://IP_ADDRESS
    
    

    更改下列內容:

    • CERT_FILENAME:PEM 編碼憑證鏈結檔案,排序方式為從分葉到根。
    • IP_ADDRESS:負載平衡器的 IP 位址。

後續步驟