梯子地图

卡住

开梯子后网页提示SSL错误:端口填错和时间不准两个常见原因

短答

开梯子后浏览器报 ERR_SSL_PROTOCOL_ERROR,常见原因是在地址栏用 https 打开了客户端的代理端口,或者代理类型被选成了 HTTPS,这个端口只说 HTTP 和 SOCKS,握手自然失败。报的是证书日期类错误,先校系统时间。两项都对,再查系统代理有没有残留和客户端的 HTTPS 解密开关。

更新于

你现在多半是这样。客户端开着,节点也测过延迟,打开某个网页时浏览器却停在一张灰色的报错页上,底下一行小字写着 ERR_SSL_PROTOCOL_ERROR,或者 ERR_CERT 开头的一串。先把那行代码抄下来,SSL 错误有好几种,代码不同,查的地方也不同。下面先按代码分开,再按“端口、时间、残留设置”的顺序逐项核对。

梯子报 ERR_SSL_PROTOCOL_ERROR 先看错误代码

SSL 和它的后继 TLS 是网页加密用的协议,浏览器打开 https 地址时先和对方握手、核对证书,两步里任何一步失败都会给出一个错误代码。Chromium 把这些代码集中列在一个公开的文件里,Chrome 和 Edge 都用这一套。开着梯子时常见的四种如下。

报错代码 Chromium 里的含义 开梯子时常见的来源 先做什么
ERR_SSL_PROTOCOL_ERROR 握手过程中出现协议错误 地址栏里用 https 打开了代理端口;代理类型选成了 HTTPS 核对你打开的地址和插件里的代理类型
ERR_CERT_DATE_INVALID 证书已过期,或者按本机时间还没生效 系统时间偏了 校准系统时间
ERR_CERT_AUTHORITY_INVALID 证书的签发者不受信任 客户端开了 HTTPS 解密,又没有信任它的证书 关掉解密开关
ERR_PROXY_CONNECTION_FAILED 连不上设置里的代理 系统代理还指着一个已经关掉的端口 核对或清掉系统代理

Firefox 用的是自己的一套代码名,同样的情况下常见的是 SSL_ERROR_RX_RECORD_TOO_LONG,本站没有拿 Firefox 的文档逐条核对过,看到它可以先按第一行处理。

第一个常见原因:端口当成了网址,或者类型选错

客户端会在本机监听一个代理端口,拿 Clash Verge Rev 2.x 来说,出厂时这个端口号是 7897。mihomo 的文档说明,混合端口同时接受 HTTP(S) 和 SOCKS5 两种代理请求,这里的 HTTP(S) 指它能替浏览器转发 https 网页,端口本身收的是代理请求,不和浏览器做 TLS 握手。浏览器用 https 去连它,发出的是加密握手的第一个包,收回来的却是明文回应,握手当场失败,屏幕上就是 ERR_SSL_PROTOCOL_ERROR。

按下面三步核对。

  1. 看地址栏。你打开的如果是 https://localhost:7897 这类地址,这个报错就是预期结果。代理端口是填进代理设置的,不是用来访问的,关掉这个标签页就行。
  2. 看代理插件。浏览器里装了代理切换类插件的,打开它的情景设置,代理协议一栏应该是 HTTP 或 SOCKS5,选成 HTTPS 会让浏览器先和本机端口做 TLS 握手。改回 HTTP 后刷新页面,报错消失就找到了原因。还拿不准是不是插件的事,先把它停用再试,Chrome 帮助中心的连接错误排查也把停用扩展程序列为一步。
  3. 看端口号。插件或系统设置里填的端口要和客户端设置页上显示的一致。换过客户端的人容易漏这一步,旧客户端的端口还留在插件里。

第二个常见原因:系统时间不准

证书里写着生效和到期两个时间点,RFC 5280 把它们叫做 notBefore 和 notAfter。浏览器拿本机时间去比,本机时间落在这两个点之外,就认为证书无效,报 ERR_CERT_DATE_INVALID。Chromium 错误代码表在这个代码的注释里,也把本机时钟不准列为原因之一。

打开系统的日期与时间设置,确认“自动设置”处于开启状态,开着的话关一下再开,逼它重新对一次时。对完和手机屏幕上的钟比一比,分钟数要一致。时区单独看一眼,选错时区的电脑,屏幕上的钟点也许没错,折算成标准时间却会差出几个小时。都改好以后,关掉浏览器重开,再访问刚才报错的网页。

时间偏差还会连带让节点握手失败。按 V2Fly 对 VMess 的说明,本机 UTC 时间的误差得控制在 90 秒内,超出以后节点会全部超时,症状和这里不同,怎么处理见文末第一条链接。

还不对就查残留的代理设置和 HTTPS 解密

前两项都排除了,看本机有没有留下别的东西。

  • 系统代理残留。客户端被强制结束或者崩溃时,系统代理那一行可能还指着它的端口。打开系统设置里的手动代理那一栏,把里面的端口号和正在运行的客户端设置页对照,对不上的,先把手动代理关掉,再回客户端重新拨开系统代理,让它写入正确的值。
  • TUN 留下的虚拟网卡和 DNS。开过 TUN 又没有正常关闭的,所有网页都可能出错,按 TUN 模式的关闭顺序 先关一次再测。
  • HTTPS 解密。Quantumult X、Surge、Shadowrocket 这类客户端带 MitM 功能,开着它时客户端会用自己生成的证书替网站出示证书。证书没装或者没被系统信任,就会报 ERR_CERT_AUTHORITY_INVALID。没有改写或抓包的需要,把它关掉。

每改一处,刷新一次页面,报错代码变了就回到上面的表里重新对照。

什么时候这个答案不成立

  • 关掉梯子以后同一个网站照样报错。问题在网站自己或者本机的其他软件,和代理无关。
  • 在单位或学校的网络里。管理方可能部署了自己的 HTTPS 检查设备,证书类报错来自那一环,本站没在这类网络里走过。
  • 杀毒软件开着网页扫描。有的安全软件也会替网站出示证书,表现和 HTTPS 解密很像,这一段本站没有逐个核对。
  • 报错代码不在上表里。表里只列了开梯子时常见的四种,其他代码的含义以 Chromium 错误代码表为准。
  • 浏览器和版本。上面的代码名按 Chromium 公开的代码表写,Safari 的提示文字不同,本站没有对照过。
  • 端口号会变。7897 只是 Clash Verge Rev 2.x 的默认值,你改过端口或者用的是别的客户端,以客户端设置页显示的为准。

接下来去哪

延伸问题

正文没展开、但和这个问题挨着的几条。点问题展开答案。

关掉梯子以后同一个网站还是报 SSL 错误说明什么

说明问题和代理无关,多半在网站自己或者本机。换一个浏览器打开同一个地址,再打开另一个 https 网站对照。只有这一个站报错,是对方证书或配置的问题,你这边能做的只有等。

手机上开梯子以后 App 提示证书不受信任怎么办

先看客户端里有没有打开 HTTPS 解密,Quantumult X 叫 MitM,Shadowrocket 也有同类开关。没有专门要抓包或改写的需求,把它关掉再试。开着它又没有安装并信任客户端生成的证书,App 和网页都会拒绝连接。

只有 Chrome 报错而 Firefox 能打开是哪里的问题

两个浏览器读代理的方式可能不同。Firefox 可以在自己的设置里单独填代理,不一定跟随系统。先在 Chrome 里停用代理类插件,再对照两边用的代理地址和端口,不一致就改成客户端里显示的那一组。

参考

  1. Chromium 网络错误代码表(net_error_list.h)
  2. Chrome 帮助中心,修复连接和加载错误
  3. RFC 5280,证书有效期字段
  4. mihomo 文档,入站端口
  5. V2Fly 文档,VMess 协议

相关问答

下一步问题没解决,回问答目录找挨着的那一条;要动手装,去梯子客户端按系统走;和这一篇相关的还有Clash Verge Rev Windows挂梯子教程:10 步,节点都超时先查哪里。