在池層級設定 TLS 的相互驗證
請在池層級設定「TLS」( mTLS )的雙向驗證,以便在連線至後端伺服器時,驗證後端伺服器的憑證並出示客戶端憑證。
開始之前
在您於彙總層級設定驗證之前,請確保您已具備以下條件:
- 一個具備支援 mTLS 的設定檔的應用程式負載平衡器(請檢查
mtls_supported屬性) - 一個採用 HTTPS 通訊協定所配置的池
- (可選)儲存於 Secrets Manager 目錄中、格式為 PEM 的有效 CA 憑證,用於驗證後端伺服器憑證
- (可選)一個有效的客戶端憑證,其私密金鑰採用 PEM 格式,並儲存於 Secrets Manager 中,以便向後端伺服器出示
- 用於管理負載平衡器及存取憑證的適當 IAM 權限,位於 Secrets Manager
了解 mTLS 的叢集層級驗證
「池層級驗證」提供兩項獨特的功能,用以確保負載平衡器與後端伺服器之間的連線安全:
- 伺服器鑑別
- 透過將後端伺服器的憑證與已設定的 CA 憑證進行比對,以驗證其身分。 這可確保負載平衡器僅會連線至可信賴的後端伺服器。
- 用戶端鑑別
- 當後端基礎架構需要 mTLS 時,請將來自負載平衡器的客戶端憑證提交給後端伺服器。 這使後端伺服器能夠驗證負載平衡器的身分。
這些功能可根據您的安全性需求,獨立或一併進行設定。
mTLS 伺服器的驗證設定
伺服器驗證包含兩個組成部分:
- 驗證憑證
- 一個布林標誌,用於啟用或停用後端伺服器憑證驗證。 啟用此功能後,負載平衡器會在 TLS 握手過程中驗證後端伺服器的憑證。
- 憑證授權機構(CA)憑證
- 一個用於驗證後端伺服器憑證的可選 CA 憑證。 若已啟用伺服器驗證,但未提供 CA 憑證,負載平衡器將使用系統信任儲存庫來驗證後端伺服器的憑證。
mTLS 客戶端驗證設定
客戶端驗證需要:
- 用戶端憑證
- 當後端伺服器在 TLS 握手過程中要求客戶端驗證時,負載平衡器會向其出示的、附有私密金鑰的憑證。 該憑證必須儲存於 Secrets Manager。
在控制台中設定 mTLS 叢集的驗證設定
要在「IBM Cloud」主控台中為資源池設定驗證:
- 導航至「VPC 的負載平衡器」頁面。
- 點擊您的應用程式負載平衡器的名稱。
- 點選「後端叢集」索引標籤。
- 若要管理現有群組,請點選「動作」選單
,然後選擇「編輯」。 若要建立新的資料池,請按一下「建立」。
- 在叢集設定中:
- 請確保「通訊協定」已設定為 HTTPS。
- 在「伺服器驗證」區段中:
- 選取「驗證伺服器憑證」以啟用後端伺服器憑證驗證。
- (可選)在「憑證授權單位」欄位中,請從 Secrets Manager 選取將用於驗證後端伺服器憑證的 CA 憑證。 若未指定,則會使用系統信任儲存庫。
- 在「客戶端驗證」部分:
- 對於「客戶端憑證」,請從 Secrets Manager 選取該憑證,此憑證將由負載平衡器呈遞給後端伺服器。
- 點擊「儲存」或「建立」。
透過 CLI 設定 mTLS 叢集驗證
建立一個使用 mTLS 伺服器驗證的資料庫
若要建立一個已啟用後端伺服器憑證驗證的叢集,請使用 ibmcloud is load-balancer-pool-create 指令:
ibmcloud is load-balancer-pool-create POOL_NAME LOAD_BALANCER ALGORITHM PROTOCOL \
HEALTH_DELAY HEALTH_RETRIES HEALTH_TIMEOUT HEALTH_TYPE \
--server-auth-verify-cert true \
[--server-auth-ca-crn CA_CERT_CRN]
其中:
POOL_NAME是您的泳池名稱。LOAD_BALANCER這是您的負載平衡器的 ID 或名稱。ALGORITHM是負載平衡演算法(round_robin、weighted_round_robin 或 least_connections)。PROTOCOL若要支援mTLS,必須設定為https。CA_CERT_CRN此為用於驗證後端伺服器憑證的 CA 憑證的可選 CRN。
範例:
ibmcloud is load-balancer-pool-create my-pool my-load-balancer round_robin https \
20 2 5 http \
--server-auth-verify-cert true \
--server-auth-ca-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511
建立一個採用 mTLS 客戶端驗證的泳池
若要建立一個已啟用客戶端憑證呈遞功能的群組:
ibmcloud is load-balancer-pool-create POOL_NAME LOAD_BALANCER ALGORITHM PROTOCOL \
HEALTH_DELAY HEALTH_RETRIES HEALTH_TIMEOUT HEALTH_TYPE \
--client-auth-cert-crn CLIENT_CERT_CRN
範例:
ibmcloud is load-balancer-pool-create my-pool my-load-balancer round_robin https \
20 2 5 http \
--client-auth-cert-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512
建立一個同時支援伺服器端與客戶端 mTLS 驗證的資料庫
若要建立一個同時具備伺服器驗證與客戶端憑證出示功能的憑證池:
ibmcloud is load-balancer-pool-create my-pool my-load-balancer round_robin https \
20 2 5 http \
--server-auth-verify-cert true \
--server-auth-ca-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511 \
--client-auth-cert-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512
更新群集以啟用 mTLS 伺服器驗證
若要更新現有資源池以啟用伺服器驗證:
ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL \
--server-auth-verify-cert true \
[--server-auth-ca-crn CA_CERT_CRN]
範例:
ibmcloud is load-balancer-pool-update my-load-balancer my-pool \
--server-auth-verify-cert true \
--server-auth-ca-crn crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511
更新叢集以啟用 mTLS 客戶端驗證
若要更新現有群組以啟用客戶端驗證:
ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL \
--client-auth-cert-crn CLIENT_CERT_CRN
停用 mTLS 伺服器驗證
若要停用某個資源池的伺服器驗證:
ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL --reset-server-auth
停用 mTLS 的客戶端驗證
若要停用某個資源池的客戶端驗證:
ibmcloud is load-balancer-pool-update LOAD_BALANCER POOL --reset-client-auth
透過 API 設定池驗證
使用 mTLS 建立具伺服器與客戶端驗證功能的群組
若要建立一個同時啟用伺服器端與客戶端驗證的池,請呼叫 POST /load_balancers/{load_balancer_id}/pools 方法:
curl -X POST \
"$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools?version=2026-05-06&generation=2" \
-H "Authorization: Bearer $iam_token" \
-d '{
"name": "my-pool",
"algorithm": "round_robin",
"protocol": "https",
"health_monitor": {
"delay": 20,
"max_retries": 2,
"timeout": 5,
"type": "http"
},
"server_authentication": {
"verify_certificate": true,
"certificate_authority": {
"crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511"
}
},
"client_authentication": {
"certificate_instance": {
"crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512"
}
}
}'
更新群集以啟用 mTLS 伺服器驗證
若要更新現有的池以啟用伺服器驗證,請呼叫 PATCH /load_balancers/{load_balancer_id}/pools/{id} 方法:
curl -X PATCH \
"$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
-H "Authorization: Bearer $iam_token" \
-d '{
"server_authentication": {
"verify_certificate": true,
"certificate_authority": {
"crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511"
}
}
}'
更新叢集以啟用 mTLS 客戶端驗證
若要更新現有群組以啟用客戶端驗證:
curl -X PATCH \
"$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
-H "Authorization: Bearer $iam_token" \
-d '{
"client_authentication": {
"certificate_instance": {
"crn": "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512"
}
}
}'
停用 mTLS 伺服器驗證
若要停用伺服器驗證,請將 server_authentication 屬性設定為 null``:
curl -X PATCH \
"$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
-H "Authorization: Bearer $iam_token" \
-d '{
"server_authentication": null
}'
停用 mTLS 的客戶端驗證
若要停用客戶端驗證,請將 client_authentication 屬性設定為 null``:
curl -X PATCH \
"$vpc_api_endpoint/v1/load_balancers/$load_balancer_id/pools/$pool_id?version=2026-05-06&generation=2" \
-H "Authorization: Bearer $iam_token" \
-d '{
"client_authentication": null
}'
使用 Terraform 設定 mTLS 資源池的驗證機制
若要使用 Terraform 為資源池設定驗證,請使用 ibm_is_lb_pool 資源,並搭配 server_authentication 和 client_authentication 區塊:
resource "ibm_is_lb_pool" "example" {
lb = ibm_is_lb.example.id
name = "my-pool"
algorithm = "round_robin"
protocol = "https"
health_delay = 20
health_retries = 2
health_timeout = 5
health_type = "http"
server_authentication {
verify_certificate = true
certificate_authority_crn = "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f511"
}
client_authentication {
certificate_instance_crn = "crn:v1:bluemix:public:secrets-manager:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:aace9348-39da-4498-b132-e5ab918237f4:secret:e3bd96ce-1e4c-f642-d1f2-0d0ab025f512"
}
}
驗證 mTLS 池的驗證設定
設定完畢池驗證後,請確認其運作正常:
-
檢查叢集狀態,以確保後端伺服器運作正常:
ibmcloud is load-balancer-pool LOAD_BALANCER POOL -
若已啟用伺服器驗證,請確保後端伺服器提供由已設定的憑證授權機構 (CA) 簽署的有效憑證。
-
若已啟用客戶端驗證,請確認後端伺服器能否驗證由負載平衡器提交的客戶端憑證。
-
請監控負載平衡器的日誌,以查閱任何可能顯示憑證驗證問題的 TLS 握手錯誤。
關於 mTLS 群組層級驗證的重要注意事項
- 群集層級的設定適用於所有後端伺服器
- 伺服器驗證和客戶端驗證皆在池層級進行設定。 該叢集中的所有後端伺服器均使用相同的驗證設定。 若您需要針對不同的後端伺服器設定不同的憑證政策,請建立獨立的憑證池。
- 後端伺服器的多個憑證授權機構
- 當同一叢集中的後端伺服器由不同的憑證授權機構 (CA) 簽署時,您可以提供一個包含所有相關根憑證和中間憑證的捆綁式 CA 檔案。 若後端伺服器的憑證鏈包含捆綁包中任何一間憑證授權機構(CA),則該後端伺服器即被視為可信。
- 系統信任儲存庫
- 若已啟用伺服器驗證,但未提供 CA 憑證,負載平衡器將使用系統信任儲存庫( Ubuntu Linux )來驗證後端伺服器憑證。 此方法適用於由知名公共憑證授權機構 (CA) 簽署的憑證,但不適用於自簽憑證或私人憑證授權機構 (CA) 簽署的憑證。
- 證書更新
- 當您在 Secrets Manager 更新憑證時,負載平衡器會自動取得已更新的憑證。 不過,可能需要重新建立現有的連線,才能使用新的憑證。