有效的用戶端憑證必須在信任存放區中,顯示回溯至信任錨點 (根憑證) 的信任鏈結。本頁面提供操作說明,教您如何使用 OpenSSL 程式庫設定自己的根憑證和中繼憑證,建立自己的信任鏈結。
建立信任根後,本文將說明如何將信任根上傳至 Certificate Manager TrustConfig
資源的信任儲存區。接著,將信任設定連結至用戶端驗證 (ServerTLSPolicy
) 資源,然後將用戶端驗證資源附加至負載平衡器的目標 HTTPS Proxy 資源。
事前準備
- 查看雙向傳輸層安全標準 (TLS) 總覽。
- 請參閱管理信任設定指南。
安裝 Google Cloud CLI。如需工具的完整總覽,請參閱 gcloud CLI 總覽。您可以在 API 和 gcloud CLI 參考資料中找到與負載平衡相關的指令。
如果您之前沒有執行過 gcloud CLI,請先執行
gcloud init
指令進行驗證。啟用下列 API:Compute Engine API、Certificate Manager API、Network Security 和 Network Services API。詳情請參閱「啟用 API」。
如果您使用全域外部應用程式負載平衡器或傳統版應用程式負載平衡器,請務必設定負載平衡器,並使用下列任一支援的後端:
- VM 執行個體群組後端
- Cloud Storage 值區 (除了後端值區外,負載平衡器也必須至少連結一個後端服務,才能支援這項功能)
- Cloud Run、App Engine 或 Cloud Run functions
- 混合式連線
- Private Service Connect 後端
如果您使用區域外部應用程式負載平衡器、跨區域內部應用程式負載平衡器或區域內部應用程式負載平衡器,請務必使用下列任一支援的後端設定負載平衡器:
- VM 執行個體群組後端
- Cloud Run
- 混合式連線
- Private Service Connect 後端
設定專案。
gcloud
gcloud config set project PROJECT_ID
權限
如要取得完成本指南所需的權限,請要求管理員授予您專案的下列 IAM 角色:
-
如要建立負載平衡器資源 (例如
TargetHTTPSProxy
): Compute 負載平衡器管理員 (roles/compute.loadBalancerAdmin
) -
如要使用 Certificate Manager 資源:
Certificate Manager 擁有者 (
roles/certificatemanager.owner
) -
如要建立安全性與網路元件,請執行下列步驟:
Compute 網路管理員 (
roles/compute.networkAdmin
) 和 Compute 安全管理員 (roles/compute.securityAdmin
) -
如要建立專案 (選用):
專案建立者 (
roles/resourcemanager.projectCreator
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
建立根憑證和中繼憑證
本節使用 OpenSSL 程式庫建立根憑證 (信任錨點) 和中繼憑證。
根憑證位於憑證鏈頂端,中繼憑證是信任鏈結的一部分,可追溯至根憑證。中繼憑證由根憑證以密碼編譯方式簽署。負載平衡器收到用戶端憑證時,會建立從用戶端憑證到設定信任錨點的信任鏈,藉此驗證憑證。
使用下列指令建立根憑證和中繼憑證。中繼憑證為選用項目,不過,在這個設定中,我們使用中繼憑證簽署用戶端憑證。
建立 OpenSSL 設定檔。
在下列範例中,設定檔 (
example.cnf
) 包含[ca_exts]
區段,其中指定了 X.509 擴充功能,可將憑證標示為適用於 CA。如要進一步瞭解根憑證和中繼憑證的規定,請參閱「憑證規定」。cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
建立自行簽署的 X.509 根憑證 (
root.cert
)。根憑證會使用自己的私密金鑰 (root.key
) 自行簽署。openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
為中繼憑證建立憑證簽署要求 (
int.req
)。openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
簽署 CSR,建立 X.509 中繼憑證 (
int.cert
)。CSR 是使用根憑證簽署。openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
建立可新增至許可清單的自行簽署憑證
您可以建立自行簽署的憑證,並將其新增至信任設定中的許可清單。
使用下列 OpenSSL 指令建立自行簽署的 X.509 憑證。
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
然後將這個憑證新增至信任設定中的 allowlistedCertificates
欄位。
設定憑證格式
如要在 TrustStore
中加入新憑證或現有憑證,請將憑證格式設為單行,並儲存在環境變數中,以便信任設定 YAML 檔案參照。
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
如要在信任設定中加入新增或現有的憑證 (已新增至允許清單),請將憑證格式化為單行,並儲存在環境變數中,以便讀取至 YAML 檔案。如要使用許可清單上的憑證,請使用下列指令將憑證格式化為單行,並儲存在 ALLOWLISTED_CERT
環境變數中。
export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
建立信任設定資源
信任設定是 Certificate Manager 中的資源,代表您的公用金鑰基礎架構 (PKI) 設定。
如要建立信任設定資源,請完成下列步驟:
主控台
前往 Google Cloud 控制台的「Certificate Manager」頁面。
在「信任設定」分頁中,按一下「新增信任設定」。
輸入設定名稱。
在「Location」(位置) 部分,選取「Global」(全域) 或「Regional」(區域)。
位置代表信任設定資源的儲存位置。如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請建立全域信任設定資源。如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請建立區域性信任設定資源。
如果選取「區域」,請選取區域。
在「信任儲存庫」部分中,按一下「新增信任錨點」,然後上傳 PEM 編碼憑證檔案,或複製憑證內容。
按一下「新增」。
在「信任存放區」部分中,按一下「新增中繼 CA」,然後上傳 PEM 編碼憑證檔案,或複製憑證內容。
這個步驟可讓您在根憑證和伺服器憑證之間新增信任層級。
按一下「新增」,即可新增中繼 CA。
選用:在「允許的憑證」部分中,按一下「新增憑證」並上傳 PEM 編碼憑證檔案,或複製憑證內容。
按一下「新增」,即可新增允許的憑證。
點選「建立」。
確認新的信任設定資源是否顯示在設定清單中。
gcloud
建立信任設定 YAML 檔案 (
trust_config.yaml
),指定信任設定參數。這個範例信任設定資源包含信任儲存庫,以及信任錨點和中繼憑證。這個指令會從上一個「格式化憑證」步驟中建立的環境變數讀取憑證內容。cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" EOF
如要使用其他信任錨點或中繼憑證建立信任儲存區,請在適當的區段中新增
pemCertificate
列。選用:在
allowlistedCertificates
欄位中,指定要新增至信任設定 YAML 檔案的憑證。將憑證新增至許可清單時,不需要信任儲存區。cat << EOF >> trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
新增至允許清單的憑證代表可封裝在信任設定中的任何憑證,因此一律視為有效。如要在許可清單中指定多個憑證,請使用多個
pemCertificate
欄位執行個體。如要匯入信任設定 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
) 資源,請完成下列步驟:
主控台
前往 Google Cloud 控制台的「Authentication Configuration」(驗證設定) 頁面。
在「Client Authentication」(用戶端驗證) 分頁中,按一下「Create」(建立)。
輸入用戶端驗證資源的名稱。
在「Location」(位置) 部分,選取「Global」(全域) 或「Regional」(區域)。
如果是全域外部應用程式負載平衡器、傳統版應用程式負載平衡器和跨區域內部應用程式負載平衡器,請將位置設為全域。如果是區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請將位置設為負載平衡器設定所在的區域。
在「Client Authentication mode」部分,選取「Load balancing」。
選取用戶端驗證模式。
選取您先前建立的信任設定資源。
點選「建立」。
確認是否顯示「用戶端驗證」圖示 (ServerTlsPolicy
)。
gcloud
根據您想處理連線的方式,選取下列其中一個選項,以 YAML 格式定義「用戶端驗證」(
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
:您先前建立的信任設定資源名稱。
如要匯入用戶端驗證
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
) 資源的名稱。選用:如要列出所有 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 資源。
主控台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
從負載平衡器清單中,選取要附加「用戶端驗證」(
ServerTLSPolicy
) 資源的負載平衡器。按一下「編輯」
。在 HTTPS 前端的「前端設定」部分,展開「顯示進階功能」部分。
從「用戶端驗證」清單中,選取「用戶端驗證」資源。
按一下 [完成]。
按一下「Update」。
gcloud
如要列出專案中的所有目標 HTTPS Proxy 資源,請使用
gcloud compute target-https-proxies list
指令:gcloud compute target-https-proxies list
記下要附加
ServerTLSPolicy
資源的目標 HTTPS Proxy 名稱。這個名稱在後續步驟中稱為TARGET_HTTPS_PROXY_NAME
。如要將目標 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
:您設定負載平衡器的區域。
如要列出所有用戶端驗證 (
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
。將用戶端驗證 (
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。
如要從檔案匯入目標 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 連線的相關資訊傳遞至後端服務。
如要列出專案中的所有後端服務,請使用
gcloud compute backend-services list
指令:gcloud compute backend-services list
記下後端服務的名稱,以便啟用自訂標頭和記錄功能。 這個名稱在下一個步驟中稱為
BACKEND_SERVICE
。如要更新後端服務,請使用
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}"
使用中繼憑證簽署用戶端憑證
本節提供額外的設定選項,可產生用戶端 (葉片) 憑證。如果您已建立包含中繼憑證的 TrustConfig 資源,請執行下列操作:
建立設定檔,產生用戶端憑證的 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
如要將 SPIFFE 身分附加至設定檔,請按照下列步驟操作:
在
[extension_requirements]
區段中新增subjectAltName
欄位,如下所示:subjectAltName = @sans_list
在
client.config
檔案底部新增一個區段 ([sans_list]
),如下所示:[sans_list] URI.1 = spiffe://example.com/test-identity
建立用戶端憑證的 CSR (
client.csr
)。openssl req -new \ -config client.config \ -keyout client.key -out client.csr
簽署 CSR,核發 X.509 用戶端憑證 (
client.cert
)。CSR 由中繼憑證簽署。openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile client.config \ -extensions extension_requirements \ -in client.csr -out client.cert
使用用戶端 SSL 憑證,將安全 HTTPS 要求傳送至負載平衡器的 IP 位址。用戶端會提供憑證 (
client.cert
) 向負載平衡器驗證身分。curl -v --key client.key --cert client.cert https://IP_ADDRESS
將 IP_ADDRESS 替換為負載平衡器的 IP 位址。