系统时间不对连不上,原因有两类:一是部分协议的认证依赖时间,设备与服务端时间偏差过大就握手失败;二是 TLS 证书有有效期,设备时间过早或过晚,会被判断为证书未生效或已过期。处理方法是打开系统自动同步时间并立即同步,确认日期、时区与时间都正确,再重新连接。
系统时间不对连不上,是最容易被忽略、却又最便宜的一类排查项。它的典型特征是:**所有节点同时连不上,换节点没用,订阅也没问题,别的设备却一切正常。**这种时候人们通常会怀疑机场、怀疑客户端、怀疑网络,唯独不会想到去看一眼右下角的时钟。这篇讲为什么时间会影响代理连接、怎么检查和同步,以及怎样把“时间错误”和“证书本身有问题”区分开。
症状自测
| 现象 | 倾向于时间问题 |
|---|---|
| 所有节点同时握手失败 | 是 |
| 换节点、换协议都无效 | 是 |
| 日志出现证书“未生效”“已过期”“无效”等字样 | 是 |
| 设备的日期或时间明显不对 | 是 |
| 同一网络下其他设备、同一订阅正常 | 是 |
| 只有个别节点失败,其他正常 | 不太像,更可能是节点问题 |
满足三条以上,就值得先校对时间。
为什么时间会影响连接
时间影响代理连接,有两条独立的路径:
| 路径 | 原理 | 表现 |
|---|---|---|
| 协议认证依赖时间 | 部分协议的认证里包含时间信息,客户端与服务端时间差过大,认证失败 | 握手阶段失败,无明显报错 |
| 证书有效期校验 | TLS 证书都有生效和失效时间,设备依据系统时间判断是否有效 | 提示证书无效、未生效或已过期 |
第一条路径的典型例子是 VMess,读 VMess 协议是什么,里面讲了它为什么对时间敏感。第二条路径则适用于使用 TLS 的各种节点:设备时间如果比证书生效时间还早,证书就“还没生效”;如果时间被调到很久以后,证书就“已经过期”。
系统时间不对连不上:先检查这四项
| 检查项 | 怎么看 | 常见问题 |
|---|---|---|
| 日期 | 是否与今天一致 | 日期停在很久以前,或者被调到了未来 |
| 时间 | 是否与标准时间接近 | 偏差几分钟甚至更多 |
| 时区 | 是否与所在地区一致 | 时区错误会导致显示时间看似正确,实际偏差数小时 |
| 自动设置 | 是否开启 | 关闭后时间会逐渐漂移 |
注意时区这一项:有些人只看时钟显示的“几点”,没注意时区设错,实际的世界标准时间偏差了好几个小时,证书和认证都会受影响。
怎么同步时间
具体菜单因系统而异,大致思路相同:
| 系统 | 思路 |
|---|---|
| Windows | 在日期与时间设置中,开启“自动设置时间”和“自动设置时区”,再点击立即同步 |
| macOS | 在系统设置的日期与时间里,开启自动设置日期与时间,并选择正确的时区 |
| Android | 在日期与时间设置里,开启自动确定日期和时间,以及自动时区 |
| iPhone | 在日期与时间设置里,开启自动设置 |
| Linux | 通过系统的时间同步服务校准,具体命令因发行版而异 |
以上叫法以系统当前界面为准。同步之后,完全退出客户端再重新打开,让它在正确的时间下重新建立连接。
同步不成功时,怎么办
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 点了同步但时间没变 | 当前网络无法访问时间服务器 | 换网络,或手动设置一个接近的时间,之后再自动同步 |
| 时间一重启就变回去 | 主板电池电量不足(部分台式机或老旧笔记本) | 更换电池,期间保持自动同步 |
| 双系统时间互相错乱 | 两个系统对硬件时钟的理解不同 | 按所用系统的方法统一设置 |
| 虚拟机里时间不对 | 与宿主机时间同步设置有关 | 开启虚拟机的时间同步选项 |
另外一个有趣的现象是:连不上代理的时候,往往无法自动同步时间,因为某些同步服务本身也需要网络。先让设备能正常上网,再同步时间。
区分:时间错误,还是证书真的过期了
| 对比项 | 时间错误导致 | 证书本身过期 |
|---|---|---|
| 影响范围 | 所有使用 TLS 的节点同时受影响 | 通常只影响使用该证书的节点 |
| 换设备 | 另一台时间正常的设备能连上 | 另一台设备同样连不上 |
| 校正时间后 | 恢复 | 无变化 |
| 谁来处理 | 你自己 | 机场 |
如果校正时间后仍然只有个别节点提示证书错误,就是节点方面的问题,应反馈给机场。不要为了连上而手动关闭证书校验,这会让你失去确认对端身份的保护。关于 tls证书过期的更多处理,也可参考 节点超时怎么办 的整体思路。
举例:时间错误是怎样悄悄发生的
下面几种情形,都可能让设备的时间在你不知情的时候出错(均为常见情形的描述):
| 情形 | 后果 |
|---|---|
| 设备长期关机后重新开机,电池已耗尽 | 时间回到很早的日期 |
| 出差到另一个时区,自动时区没有开启 | 显示的时间看似正常,实际偏差数小时 |
| 为了测试某个软件手动调了时间,忘记改回 | 时间一直错下去 |
| 系统更新后设置被重置 | 自动同步被关闭,时间逐渐漂移 |
遇到突然“全部连不上”,而你最近恰好遇到过上面的情形,就更有理由先查时间。
把它放进整体排查流程
时间检查是整体排查里最便宜的一步,建议放在较前面:
- 先看设备能否正常上网;
- 校对系统日期、时间、时区;
- 完全退出客户端再重开;
- 更新订阅,参考 订阅更新失败怎么办;
- 换节点、换协议对比;
- 仍不行,再看客户端报错,见 Clash 报错怎么办。
整体框架见 机场连不上怎么办。
预防:让时间一直准确
- 保持系统自动设置时间开启;
- 出差或旅行后,确认时区自动更新;
- 经常断电的设备留意主板电池;
- 不要为了某些软件试用而随意调整系统时间,用完立即改回;
- 发现“时间突然变了”,先找原因,而不是单纯改回去。
几个常见的误解
- **“时间差几分钟没关系。”**对时间敏感的协议,几分钟就可能失败;
- **“显示的时间对就行。”**时区也要对;
- **“证书错误一定是机场的问题。”**设备时间不对同样会导致;
- **“关掉证书校验就能连上。”**这会降低安全性,是治标不治本。
下一步
下次碰到“所有节点都连不上”,把校对时间排在第一步。想按条件筛选机场,用 选机场向导。系统时间不对连不上,几乎是最容易解决的一类问题,因为答案常常就在屏幕右下角。
- 时间容差的具体数值因协议而异,请以相应协议的官方文档为准,本文不给出具体数字。
- 各系统同步时间的菜单位置与叫法不同,请以系统当前界面为准。
- 证书确实已过期的情况需要机场处理,本文无法替你判断某个节点的证书状态。
这篇的几个常见问题
系统时间会影响代理连接吗?
会。有的协议的认证机制依赖时间,客户端与服务端的时间差超过一定范围,认证就会失败;使用 TLS 的节点,还要靠系统时间判断证书是否在有效期内。时间不准,两类问题都可能出现,表现为所有节点握手失败,甚至换节点也无效。
怎么判断是系统时间的问题?
看几个线索:所有节点同时连不上,且换节点无效;日志里出现证书无效、未生效或已过期之类的提示;设备时间明显与实际不符;其他设备同一网络、同一订阅却正常。出现这些,先校对时间,是最低成本的排查步骤。
时间是准的,但还是提示证书错误,怎么办?
那就可能是节点自身的证书问题,比如证书过期、域名与证书不匹配,需要机场处理。可以换其他节点对比,如果只有个别节点报错,反馈给机场;不要为了连上而手动关闭证书校验,那会降低安全性。
怎么避免再次出现时间错误?
开启系统的自动设置时间功能,并确认时区正确;经常断电的设备留意主板电池状态;虚拟机和双系统环境下,注意时间设置的差异。发现时间被意外改动,及时校正。