系统时间不对导致连不上怎么办?TLS 握手失败排查

客户端提示证书错误、TLS 握手失败、或订阅更新报证书问题?系统时间偏差过大是常被忽略的原因。本文讲清时间与加密连接的关系并给出校准方法。

直接回答:日志里出现 x509: certificate has expired or is not yet valid,或者订阅更新、节点连接同时报证书错误,先看系统时间。证书有生效期和过期期,系统时钟偏差超过几小时,客户端就会把所有证书判成无效,表现为「全部连不上」。校准时间,问题即消失。

怎么确认是时间问题

三个信号同时出现基本就是它:

  1. 浏览器打开随便一个 HTTPS 网站(不开代理)也提示「证书无效 / 您的时钟不正确」——Chrome 会直接写出「时钟慢了」;
  2. 客户端日志里是证书类报错而不是超时:Mihomo / sing-box 都是 Go 写的,报错原文是 x509: certificate has expired or is not yet valid;v2rayN 的日志里是 tls: failed to verify certificate(日志位置见 v2rayN 教程);
  3. 问题出现在重装系统、换主板、长期断电的电脑,或者刚从另一个时区回来。

订阅更新失败但节点能连,通常不是时间问题,见订阅更新失败怎么办。

校准时间

先看当前时间和真实时间差多少,再开自动同步:

  • Windows:「设置 → 时间和语言 → 日期和时间」,打开「自动设置时间」,点「立即同步」;命令行(管理员)w32tm /resync 强制同步一次;
  • macOS:「系统设置 → 通用 → 日期与时间」,打开「自动设置日期与时间」;终端 sudo sntp -sS time.apple.com 立即校准;
  • Linux:timedatectl set-ntp true,timedatectl 查看是否 System clock synchronized: yes。

同步本身要联网,而你现在可能正因为时间不对连不上——先关掉代理用直连同步,国内时间服务器(如 ntp.aliyun.com)直连可达。

时区错了也算时间错

时间「看起来」对但时区不对,系统内部的 UTC 时间照样偏了好几个小时,效果一样。确认时区是「(UTC+08:00) 北京」;双系统(Windows + Linux)的电脑常见一边按本地时间、一边按 UTC 写硬件时钟,每次切换系统就差 8 小时,在 Linux 里执行 timedatectl set-local-rtc 1 统一即可。

每次关机都回到过去

开机就是某个固定的旧日期,是主板的 CMOS 电池没电了,关机后时钟停走。换一颗纽扣电池(CR2032),几块钱;换之前每次开机手动同步一次也能凑合。

校准后仍报证书错误的,才是线路层的问题(少数中转在特殊时期会被做 TLS 干扰),转节点连接不上;内核起不来另见客户端内核无法启动。同类问题见网络问题排查 · 客户端与系统。

常见问题

时间不准为什么会连不上?

加密连接(TLS)会校验证书有效期,依赖系统时间。时间偏差过大时证书被判为「未生效」或「已过期」,握手失败,表现为连不上或证书错误。

怎么快速排除?

检查系统日期时间是否正确,开启「自动设置时间」。校准后重试,若恢复即为时间问题。

时间总是不准怎么办?

多为主板电池老化或时区设置错误。开启网络自动同步时间,并确认时区正确。