你现在多半是这样。客户端开着,节点也测过延迟,打开某个网页时浏览器却停在一张灰色的报错页上,底下一行小字写着 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。
按下面三步核对。
- 看地址栏。你打开的如果是 https://localhost:7897 这类地址,这个报错就是预期结果。代理端口是填进代理设置的,不是用来访问的,关掉这个标签页就行。
- 看代理插件。浏览器里装了代理切换类插件的,打开它的情景设置,代理协议一栏应该是 HTTP 或 SOCKS5,选成 HTTPS 会让浏览器先和本机端口做 TLS 握手。改回 HTTP 后刷新页面,报错消失就找到了原因。还拿不准是不是插件的事,先把它停用再试,Chrome 帮助中心的连接错误排查也把停用扩展程序列为一步。
- 看端口号。插件或系统设置里填的端口要和客户端设置页上显示的一致。换过客户端的人容易漏这一步,旧客户端的端口还留在插件里。
第二个常见原因:系统时间不准
证书里写着生效和到期两个时间点,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 的默认值,你改过端口或者用的是别的客户端,以客户端设置页显示的为准。
接下来去哪
- 报错消失了,但节点一测延迟全部超时,按 梯子全部节点超时的排查顺序 从订阅查到本机。
- 想确认端口、系统代理开关在客户端里的位置,对照 Clash Verge Rev 在 Windows 上的安装教程 的截图找。
- 现在用的客户端没有清楚的端口设置,想换一个,去 梯子客户端栏目 按系统挑。
延伸问题
正文没展开、但和这个问题挨着的几条。点问题展开答案。
关掉梯子以后同一个网站还是报 SSL 错误说明什么
说明问题和代理无关,多半在网站自己或者本机。换一个浏览器打开同一个地址,再打开另一个 https 网站对照。只有这一个站报错,是对方证书或配置的问题,你这边能做的只有等。
手机上开梯子以后 App 提示证书不受信任怎么办
先看客户端里有没有打开 HTTPS 解密,Quantumult X 叫 MitM,Shadowrocket 也有同类开关。没有专门要抓包或改写的需求,把它关掉再试。开着它又没有安装并信任客户端生成的证书,App 和网页都会拒绝连接。
只有 Chrome 报错而 Firefox 能打开是哪里的问题
两个浏览器读代理的方式可能不同。Firefox 可以在自己的设置里单独填代理,不一定跟随系统。先在 Chrome 里停用代理类插件,再对照两边用的代理地址和端口,不一致就改成客户端里显示的那一组。
参考
相关问答
- 梯子全部节点超时怎么办:先查订阅是否过期,再查本机梯子全部节点超时,先回机场面板看订阅是否过了到期日、流量条是否见底,多数情况出在这两项。
- 梯子TUN模式是什么意思:什么时候要开,开了有什么变化梯子的 TUN 模式是让客户端在系统里建一张虚拟网卡,所有程序发出的数据包先进这张网卡再由客户端分流,所以不读系统代理的游戏和终端命令也能走节点。
下一步问题没解决,回问答目录找挨着的那一条;要动手装,去梯子客户端按系统走;和这一篇相关的还有Clash Verge Rev Windows挂梯子教程:10 步,节点都超时先查哪里。