在池層級設定 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」主控台中為資源池設定驗證:

  1. 導航至「VPC 的負載平衡器」頁面。
  2. 點擊您的應用程式負載平衡器的名稱。
  3. 點選「後端叢集」索引標籤。
  4. 若要管理現有群組,請點選「動作」選單 「動作」選單,然後選擇「編輯」。 若要建立新的資料池,請按一下「建立」。
  5. 在叢集設定中:
    • 請確保「通訊協定」已設定為 HTTPS
  6. 在「伺服器驗證」區段中:
    • 選取「驗證伺服器憑證」以啟用後端伺服器憑證驗證。
    • (可選)在「憑證授權單位」欄位中,請從 Secrets Manager 選取將用於驗證後端伺服器憑證的 CA 憑證。 若未指定,則會使用系統信任儲存庫。
  7. 在「客戶端驗證」部分:
    • 對於「客戶端憑證」,請從 Secrets Manager 選取該憑證,此憑證將由負載平衡器呈遞給後端伺服器。
  8. 點擊「儲存」或「建立」。

透過 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_authenticationclient_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 池的驗證設定

設定完畢池驗證後,請確認其運作正常:

  1. 檢查叢集狀態,以確保後端伺服器運作正常:

    ibmcloud is load-balancer-pool LOAD_BALANCER POOL
    
  2. 若已啟用伺服器驗證,請確保後端伺服器提供由已設定的憑證授權機構 (CA) 簽署的有效憑證。

  3. 若已啟用客戶端驗證,請確認後端伺服器能否驗證由負載平衡器提交的客戶端憑證。

  4. 請監控負載平衡器的日誌,以查閱任何可能顯示憑證驗證問題的 TLS 握手錯誤。

關於 mTLS 群組層級驗證的重要注意事項

群集層級的設定適用於所有後端伺服器
伺服器驗證和客戶端驗證皆在池層級進行設定。 該叢集中的所有後端伺服器均使用相同的驗證設定。 若您需要針對不同的後端伺服器設定不同的憑證政策,請建立獨立的憑證池。
後端伺服器的多個憑證授權機構
當同一叢集中的後端伺服器由不同的憑證授權機構 (CA) 簽署時,您可以提供一個包含所有相關根憑證和中間憑證的捆綁式 CA 檔案。 若後端伺服器的憑證鏈包含捆綁包中任何一間憑證授權機構(CA),則該後端伺服器即被視為可信。
系統信任儲存庫
若已啟用伺服器驗證,但未提供 CA 憑證,負載平衡器將使用系統信任儲存庫( Ubuntu Linux )來驗證後端伺服器憑證。 此方法適用於由知名公共憑證授權機構 (CA) 簽署的憑證,但不適用於自簽憑證或私人憑證授權機構 (CA) 簽署的憑證。
證書更新
當您在 Secrets Manager 更新憑證時,負載平衡器會自動取得已更新的憑證。 不過,可能需要重新建立現有的連線,才能使用新的憑證。

下一步