You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud负载均衡器基于PrivateCA的mTLS配置失败求助

Google Cloud全球HTTPS负载均衡器mTLS配置失败:client_cert_validation_failed错误排查

我在Google Cloud全球HTTPS负载均衡器上配置mTLS时,客户端连接始终被拒绝,报错client_cert_validation_failed。我严格按照官方步骤操作,但信任配置(trust config)似乎未生效。


信任配置

trustStores:
- trustAnchors:
  - pemCertificate: |
      -----BEGIN CERTIFICATE-----
      MIICWzCCAgKgAwIBAgIUANxN5VlXyQgGZp4uZJi7iXnIivEwCgYIKoZIzj0EAwIw
      [...]
      SM49BAMCA0cAMEQCIBmn2170sahTzA0iBYuULNeywX+r8fX8JucglsMQNBT8AiAP
      vJwqN9I7bmTgItfpjozMIExZiSeiTn45TfEdNLNsTQ==
      -----END CERTIFICATE-----

注意:PEM格式绝对正确。


TLS策略配置

执行查询命令:

gcloud beta network-security server-tls-policies describe london-ips-tls-policy --location=global 

返回的策略详情:

createTime: '2023-08-22T15:59:51.030272533Z'
mtlsPolicy:
  clientValidationMode: REJECT_INVALID
  clientValidationTrustConfig: projects/MY_PROJECT_NUM/locations/global/trustConfigs/london-ips-trust-config
name: projects/MY_PROJECT_ID/locations/global/serverTlsPolicies/london-ips-tls-policy
updateTime: '2023-08-22T16:28:04.303764856Z'

Target HTTPS Proxy配置

# ...
serverTlsPolicy: //networksecurity.googleapis.com/projects/MY_PROJECT_ID/locations/global/serverTlsPolicies/london-ips-tls-policy

客户端测试情况

使用已批准的客户端证书发起请求:

-----BEGIN CERTIFICATE-----
MIIDWzCCAwKgAwIBAgIUAKpLh7uR2I/q21WKu84Sg5VZadowCgYIKoZIzj0EAwIw
[...]
kC2s86eKXEhjU4t22QIgOHZaPGUzO3Zr9m1esHYn8T+cnSEZPaYaXigSxlil6cg=
-----END CERTIFICATE-----

Go测试代码:

// load key/cert pair
clientCertForTls, err := tls.LoadX509KeyPair(os.ExpandEnv(*clientCertPath), os.ExpandEnv(*privateKeyPath))
if err != nil {
    log.Fatalf("unable to load x509 pair, %v", err)
}

// http client with client certs
mTLSClient := &http.Client{
    Transport: &http.Transport{
        TLSClientConfig: &tls.Config{
            ClientAuth:   tls.RequestClientCert,
            Certificates: []tls.Certificate{clientCertForTls},
        },
    },
}

// make request
resp, err := mTLSClient.Get("https://OUR_URL.com/")
if err != nil {
    log.Fatalf("unable to mtls ips, %v", err)
}
bodyDat, _ := io.ReadAll(resp.Body)
log.Printf("body: %s", bodyDat)
for k := range resp.Header {
    log.Printf("header[%s]: %s", k, resp.Header.Get(k))
}
if resp.StatusCode != http.StatusOK {
    log.Fatalf("failed to mtls ips, %s: %s", resp.Status)
} else {
    log.Printf("ALL GOOD! :)")
}

日志报错信息

使用日志查询语句:

jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"

得到的拒绝日志内容:

{
httpRequest: {
latency: "0s"
remoteIp: "REDACTED"
}
insertId: "REDACTED"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
backendTargetProjectNumber: "projects/MY_PROJECT_NUM"
remoteIp: "REDACTED"
statusDetails: "client_cert_validation_failed"
}
logName: "projects/MY_PROJECT_ID/logs/requests"
receiveTimestamp: "2023-08-22T17:00:55.441451401Z"
resource: {
labels: {
backend_service_name: ""
forwarding_rule_name: "lb-frontend-acme-protected"
project_id: "MY_PROJECT_ID"
target_proxy_name: ""
url_map_name: ""
zone: "global"
}
type: "http_load_balancer"
}
severity: "INFO"
timestamp: "2023-08-22T17:00:54.413317Z"
}

额外测试说明

将clientValidationMode改为ALLOW_INVALID_OR_MISSING_CLIENT_CERT后,流量可正常通过,说明负载均衡器在拒绝由已配置根CA签发的合法客户端证书。

更新:使用cURL测试同样出现连接重置,命令如下:

curl --key ~/.vipro-key.pem --cert ~/Downloads/client-cert.crt -v https://OUR_PROTECTED_ENDPOINT/

内容的提问来源于stack exchange,提问作者Tom Medhurst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:14:56