先从日志区分时间校验失败、证书域名不匹配与普通连接超时,再同步系统时间、核对节点 SNI,最后用真连接延迟和实际访问复测。适合订阅已经导入、内核可以启动,但连接时出现 TLS 或 x509 报错的用户;涉及服务端证书到期的情况,需要交由节点维护者处理。
定位 TLS 握手失败的阶段
TLS 握手发生在建立安全连接的过程中。连接普通 TLS 节点时,客户端需要与服务器协商参数,并检查服务器证书的有效期、签发链和身份。TCP 端口能够连接,只能说明传输层可达,不能证明证书检查通过,也不能证明后续 VMess 或 VLESS 认证成功。
先在 v2rayN 底部日志区域找到本次测试对应的记录。保留最后一层具体原因,不要只截取外层的 failed to process outbound traffic。同一条连接可能经过多层包装,真正有用的信息通常在后面的 x509:、tls: 或 dial tcp 附近。
报错:x509: certificate has expired or is not yet valid
原因与解法:本机当前时间不在证书有效期内——先同步日期与时间;时间正确仍报错,再让维护者检查证书起止时间和实际部署的证书。
报错:x509: certificate is valid for …, not …
原因与解法:用于验证的服务器名称不在证书允许的名称中——按节点提供方的配置核对 SNI,并检查服务端是否因名称不对而返回了默认站点证书。
报错:x509: certificate signed by unknown authority
原因与解法:证书链无法连接到受信任的根证书——检查服务端中间证书是否完整、本机信任库是否正常,以及网络中是否存在 TLS 检查设备。
同步系统时间与时区
证书有效期按绝对时间判断,不以桌面上显示的时区名称为准。仅仅把时区设错,但系统实际时刻仍然正确,一般不会造成证书失效;手动调快日期、双系统时间处理不一致、虚拟机从旧快照恢复,则可能让系统实际时刻偏离。先确认年份、月份和日期,再看分钟,不要只检查右下角的小时数。
-
记录时间
抄下日志中的当前时间与证书有效期。若日志包含 UTC 时间,先换算再比较:例如 UTC 02:00 与 UTC+8 的 10:00 是同一时刻,不能直接认定相差八小时。
-
开启自动校时
Windows 11 打开「设置」→「时间和语言」→「日期和时间」,启用「自动设置时间」,核对时区,再点击「立即同步」。若同步失败,先检查当前网络能否访问时间服务。
-
确认同步状态
Windows 可在终端运行
w32tm /query /status查看时间源和最近成功同步时间。需要手动触发时,在管理员终端运行w32tm /resync;报错时不要反复修改节点参数。 -
重新发起测试
返回客户端,重新选择当前服务器并执行真连接延迟测试。对照新日志的时间戳确认是新连接,不用旧记录判断修复结果。
按其他平台确认时间源
- macOS:打开「系统设置」→「通用」→「日期与时间」,启用自动设置日期与时间;若设备受组织策略管理,先确认时间源没有被策略锁定。
- Android:通常从「设置」→「系统」→「日期和时间」启用自动设置时间与自动设置时区。部分设备位于「更多设置」或「常规管理」,以系统设置搜索结果为准。随后回到 v2rayNG 或 v2flyNG 重新连接。
- Linux:在使用 systemd 的发行版运行
timedatectl status,检查系统时钟是否同步。可用sudo timedatectl set-ntp true启用系统支持的网络校时;如果发行版使用独立时间服务,应检查对应服务状态。
这些数字用于区分服务用途,不是要求把节点统一改为 443。若校时后仍然提示证书已经过期,应检查日志中证书的到期时间;客户端调整时间不能替代服务端续期。
核对 SNI、服务器地址与传输 Host
SNI 是 TLS ClientHello 中用于指示目标服务器名称的信息。它常被界面标作「SNI」「服务器名称」或「serverName」,部分教程称其为伪装域名。这个名称不是任意装饰文本:普通 TLS 验证中,它通常同时影响服务端选择哪张证书,以及客户端应核对哪个名称。
| 字段 | 实际作用 | 核对重点 |
|---|---|---|
| 地址与端口 | 确定连接的远端入口 | 按订阅保留域名或 IP,不因证书报错擅自改端口 |
| SNI / serverName | 指示 TLS 服务器名称,通常用于名称验证 | 填写提供方指定的主机名,不带协议头、路径或端口 |
| WebSocket Host | 参与 HTTP 请求的虚拟主机选择 | 不能直接代替 SNI;两者是否相同取决于部署 |
| WebSocket path | 确定 HTTP 升级请求的路径 | 保留前导斜杠、大小写与必要参数,不填进 SNI |
例如教学主机名 edge.example.invalid 只说明 SNI 的文本格式;它不可用于实际连接。SNI 不应写成 https://edge.example.invalid:443/path,也不能把整条订阅地址粘进去。需要填写的真实名称必须来自节点提供方,不能随意换成常见网站域名。
-
定位当前节点
在 v2rayN 服务器列表确认当前选中的条目与订阅分组,双击该条目打开编辑窗口。先记录地址、端口、传输方式和传输安全类型,避免修改同名的另一条节点。
-
核对服务器名
在传输安全设置中检查 SNI 或服务器名称字段。与提供方参数逐字比较,删除首尾空格;不要添加
https://、端口和路径。字段位置会随客户端版本及协议而变化。 -
分开检查 Host
使用 WebSocket 时,再检查 Host 与 path。不要为了消除域名报错,把地址、SNI、Host 三处全部改成同一个值;入口地址与证书名称本来就可能不同。
-
保存并复测
保存后重新选择该节点,触发一次真连接延迟测试。记录错误是否从证书不匹配变为其他类型,一次只调整一组相关字段。
Android 端可在 v2rayNG 或 v2flyNG 的节点列表进入对应条目的编辑页面,再展开 TLS 相关设置核对服务器名称。订阅节点的手动改动可能在下次更新订阅时被覆盖;若修正后有效,应联系提供方更新订阅源,而不是长期依赖本机补丁。
区分证书链问题与 REALITY 参数问题
本机时间正确、SNI 也与配置一致,仍不能排除服务端问题。普通 TLS 服务需要返回正确的叶证书和必要的中间证书;只部署叶证书、续期后没有重新加载服务、入口负载均衡中只有部分机器更新,都可能导致同一节点间歇性失败。
- 有效期错误:让维护者检查当前入口实际返回的证书,而不是仅查看磁盘中新证书的日期。续期成功不代表所有入口已经使用新证书。
- 名称错误:检查证书的 Subject Alternative Name 是否覆盖配置中的服务器名称。通配符
*.example.invalid通常只覆盖一级子域,不覆盖根域或更深层名称。 - 未知签发机构:检查中间证书链、本机系统更新及根证书信任状态。若只在公司或校园网络复现,询问是否存在 TLS 检查策略,不要直接导入来源不明的根证书。
- REALITY 节点:除服务器名称外,还要按提供方配置检查公钥、shortId、指纹与 flow。REALITY 不是普通自建证书部署,不能只套用“续期证书”的处理方法。
v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核。遇到 REALITY 等能力相关问题,要先确认客户端与内核是否支持该节点配置;换一个界面并不能自动补齐协议能力。桌面端可结合客户端对比确认 v2rayN 的使用定位,再核对当前实际使用的内核与版本。
复测真连接延迟与实际访问
修正后先复测节点,再测试应用。TCPing 成功但真连接延迟失败,说明仍可能在 TLS、代理认证或测试目标访问阶段出错。真连接延迟也受测试地址与路由规则影响,不能只看一个耗时数字判断所有应用都正常。
- 保留原节点副本或记录关键参数,修正时间后先测一次;仍报域名错误时,再核对 SNI,避免同时改动过多设置。
- 对当前节点执行真连接延迟测试,同时查看同一时间戳的日志。测试方法可参照真连接延迟说明。
- 按系统代理说明确认应用确实走代理。系统代理与 TUN 的接管范围不同,浏览器失败不一定代表内核没有启动。
- 访问一个允许使用的 HTTPS 目标并核对出口信息。若只有单个目标失败,检查路由分流和该目标的证书,不要立即再次修改节点 SNI。
- 需要反馈时提交报错原文、发生时间、系统版本、客户端与内核版本、已完成的检查项。隐藏订阅 token、用户标识和完整节点凭据。
TLS 握手排查常见问题
电脑时间看起来正确,为什么还提示证书过期?
先比较日志里的绝对时间与证书有效期,排除 UTC 显示差异。系统时间确实正确时,可能是服务端证书过期或入口仍在使用旧证书,需要维护者检查,不能靠客户端“延长有效期”。
节点地址是 IP,SNI 也必须填 IP 吗?
不必。连接地址可以是 IP,服务器名称仍可以是提供方指定的域名。若实际按 IP 做证书身份验证,证书需要包含对应的 IP 地址标识;不要据此擅自清空 SNI。
更新订阅后又坏了,应该反复修改吗?
先确认更新后条目的 SNI、传输方式和端口是否变化。若订阅源持续下发错误字段,把修正前后的差异反馈给提供方,并按订阅分组说明确认没有更新错分组。
同一节点手机能用,电脑不能用,先查什么?
先对比两台设备的系统时刻、节点参数和内核版本,再让它们接入同一网络复测。若电脑独有未知签发机构错误,检查系统信任库和安全软件的 HTTPS 检查设置,不要直接关闭证书验证。