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

Envoy TLS配置引发SSL WRONG_VERSION_NUMBER错误求助

Envoy TLS握手报错WRONG_VERSION_NUMBER排查方案

问题描述

配置Envoy将本地端口11610的Trino请求转发至指定主机,添加TLS配置后调用API时,Envoy日志显示主机已解析为正确IP,但出现以下TLS握手错误:

[source/extensions/transport_sockets/tls/ssl_socket.cc:191] [C29] handshake expecting read
[2023-05-17 04:14:24.357][911][debug][connection] [source/extensions/transport_sockets/tls/ssl_socket.cc:198] [C29] handshake error: 1
[2023-05-17 04:14:24.357][911][debug][connection] [source/extensions/transport_sockets/tls/ssl_socket.cc:226] [C29] TLS error: 268435703:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER
[2023-05-17 04:14:24.357][911][debug][connection] [source/common/network/connection_impl.cc:208] [C29] closing socket: 0

但使用curl携带相同TLS证书直接调用目标端点可正常工作。Envoy版本为1.15(支持TLSv1.2和1.3),目标服务器也兼容这些版本。当前Envoy的TLS配置片段如下:

tls_context:
  common_tls_context:
    validation_context:
      trusted_ca:
        filename: /etc/cacerts.pem
    tls_certificates:
      - certificate_chain:
          filename: "/etc/client.pem"
        private_key:
          filename: "/etc/client-key.pem"
hosts:
- socket_address:
    address: trino-gateway.path.com
    port_value: 443

可能的原因及解决方法

1. TLS配置位置错误

大概率是把TLS配置加到了监听(listener)的transport_socket中,而非集群(cluster)的transport_socket。如果是转发HTTPS请求,TLS配置应该放在集群侧,让Envoy作为客户端和目标服务器建立加密连接;若监听侧配置了TLS,意味着要求Trino给Envoy发HTTPS请求,但Trino可能实际发的是HTTP请求,导致协议不匹配,触发版本错误。

调整集群配置,确保transport_socket为tls类型并包含证书配置,监听侧若接收Trino的HTTP请求则用raw_buffer类型:

clusters:
- name: trino-gateway-cluster
  connect_timeout: 0.25s
  type: STRICT_DNS
  lb_policy: ROUND_ROBIN
  transport_socket:
    name: envoy.transport_sockets.tls
    typed_config:
      "@type": type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext
      tls_context:
        common_tls_context:
          validation_context:
            trusted_ca:
              filename: /etc/cacerts.pem
          tls_certificates:
            - certificate_chain:
                filename: "/etc/client.pem"
              private_key:
                filename: "/etc/client-key.pem"
  hosts:
  - socket_address:
      address: trino-gateway.path.com
      port_value: 443

2. 显式指定TLS版本范围

虽然Envoy 1.15支持TLSv1.2和1.3,但默认协商的版本可能和目标服务器不兼容。可以在common_tls_context中强制指定版本范围:

common_tls_context:
  tls_params:
    tls_minimum_protocol_version: TLSv1_2
    tls_maximum_protocol_version: TLSv1_3
  # 其余配置保持不变

3. 验证证书配置一致性

确认Envoy加载的证书和curl使用的完全一致:

  • 检查/etc/cacerts.pem是否包含目标服务器的根CA证书(虽错误日志是版本问题,但可排除验证异常的可能)
  • 确保client.pem和client-key.pem的权限正确,Envoy进程拥有读取权限(可执行chmod 644调整,或把Envoy用户加入证书所在组)

4. 配置SNI匹配

部分服务器要求SNI字段与域名匹配,可在TLS配置中添加sni字段:

tls_context:
  sni: trino-gateway.path.com
  # 其余配置保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:17:36