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

Istio服务网格出站访问外部HTTPS资源SSL证书验证错误求助

根因分析

你遇到的问题是Istio出站路由匹配异常导致的流量错发:

  1. 你开启了REGISTRY_ONLY出站拦截模式,所有未在Istio注册的外部服务都会被拦截
  2. 原有配置中ServiceEntry使用HTTPS协议、同时DestinationRule配置了SIMPLE模式TLS Origination,而你的Java应用本身也在发起HTTPS请求,形成双重TLS封装:Sidecar无法识别加密流量中的Host字段,匹配不到你配置的ServiceEntry规则,导致路由错乱,请求被转发到了缓存的Google服务后端IP,因此返回了Google的证书,进而触发Java的证书SAN校验失败报错。

解决方案

提供两种适配不同场景的方案,二选一即可:

方案1:透传应用TLS请求(无需修改应用代码)

适合保留应用本身HTTPS请求逻辑的场景:

  1. 修改ServiceEntry配置,将端口协议改为TLS,支持SNI匹配,同时可直接用通配符匹配所有cmp.net子域名减少冗余配置:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: internalnet
  namespace: ppct
spec:
  hosts:
    - "*.cmp.net"
  exportTo:
    - "."
  ports:
    - number: 443
      name: tls
      protocol: TLS
  location: MESH_EXTERNAL
  resolution: DNS
  1. 删除原有三个单独配置的DestinationRule,不需要Sidecar做TLS封装,直接透传应用的HTTPS流量即可。

方案2:Sidecar统一做TLS封装(需要修改应用请求逻辑)

适合由Istio统一管理外部服务TLS证书的场景:

  1. 调整ServiceEntry配置,使用通配符域名:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: internalnet
  namespace: ppct
spec:
  hosts:
    - "*.cmp.net"
  exportTo:
    - "."
  ports:
    - number: 443
      name: https
      protocol: HTTPS
  location: MESH_EXTERNAL
  resolution: DNS
  1. 合并DestinationRule为一个统一配置,显式指定SNI避免匹配错误:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: internalnet
  namespace: ppct
spec:
  host: "*.cmp.net"
  trafficPolicy:
    tls:
      mode: SIMPLE
      sni: "%HOST%"
  1. 修改应用代码,将请求地址从https://x.cmp.net/doc.pdf改为http://x.cmp.net:443/doc.pdf,应用侧发明文HTTP请求,由Sidecar统一封装为HTTPS发往外部服务。

验证方法

配置更新后进入应用容器验证:

  • 方案1:执行openssl s_client -showcerts -connect x.cmp.net:443 -servername x.cmp.net,确认返回的证书为DigiCert颁发的*.cmp.net证书即可
  • 方案2:执行curl http://x.cmp.net:443/doc.pdf,确认可以正常获取资源即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:27:01