为什么经过IPSec隧道后HTTPS会访问不通?一次隧道环境下的实战分析

举报
犀思云 发表于 2025/08/20 16:43:58 2025/08/20
【摘要】 在运维圈子里,大家可能都遇到过这种奇怪的问题:浏览器能打开 HTTP 网站,但一换成 HTTPS,页面就死活打不开。前段时间,我们就碰到这么一个典型案例。故障现象某公司系统在 VPN 隧道里访问 HTTPS 服务,结果就是——打不开。HTTP 正常,HTTPS 全军覆没。问题追踪乍一看,以为是证书、TLS 加密、浏览器兼容性这些问题。结果一层层排查下来,真正的罪魁祸首居然是:MTU(最大传输...

在运维圈子里,大家可能都遇到过这种奇怪的问题:

浏览器能打开 HTTP 网站,但一换成 HTTPS,页面就死活打不开。

前段时间,我们就碰到这么一个典型案例。



故障现象


某公司系统在 VPN 隧道里访问 HTTPS 服务,结果就是——打不开。HTTP 正常,HTTPS 全军覆没。

01.jpeg


问题追踪




乍一看,以为是证书、TLS 加密、浏览器兼容性这些问题。结果一层层排查下来,真正的罪魁祸首居然是:MTU(最大传输单元)

配图_画板 1 副本 35.png

原来:

  正常情况下,链路 MTU=1500,TCP MSS=1460;

  但由于数据要经过 IPSec 隧道,报文额外多了 52 字节封装;

  最终数据包=1512 字节,超过了 MTU;

  偏偏 HTTPS 报文设置了 DF=1(禁止分片),所以一旦超出 MTU,报文直接被丢弃;

  结果就是:HTTPS 握手直接挂掉。



HTTPS 为啥不分片?


因为 HTTPS 的核心是安全和完整性。TLS 协议要求传输的数据必须完整,一旦分片就有被截获或篡改的风险,所以干脆一刀切:禁止分片。

这就导致——只要 MTU 出问题,HTTPS 就比 HTTP 更容易“翻车”。

banner.png



解决方法


#直接改设备 MTU/MSS

让服务器和客户端都用更小的报文,比如 1400。但设备多时不现实。

#让中间设备帮忙调整 MSS(最优解)

很多防火墙/路由器都有类似功能:在 TCP 握手时,把 MSS 改小,提前避免超 MTU。

 思科的例子就是:ip tcp adjust-mss 1400

#Linux 网关

也能用 iptables 干预 TCP MSS:

02.png

这个案例其实告诉我们:

  HTTPS 故障,不一定是“证书问题”,可能是网络层的 MTU 问题;

  VPN/隧道场景下尤其常见;

  最优雅的解决方案,是让中间设备在握手阶段就“帮忙改 MSS”,而不是等到业务挂掉才救火。


所以,下次再遇到 HTTPS 打不开,别急着骂浏览器,先想想是不是报文太大了!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。