在池级别配置 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 中更新证书时,负载均衡器会自动获取更新后的证书。 不过,可能需要重新建立现有连接才能使用新证书。