Reality 是什么,它和普通 TLS 差在哪
节点链接里出现 security=reality、pbk、sid 这些参数时,说明它用的是 Reality。本文说明它借用真实网站 TLS 特征的原理、为什么不需要自己的域名和证书,以及 pbk / sid / fp 各是什么。
本文目录(8 节 · 约 2 分钟) +
- 01 它解决的是什么问题
- 02 大致怎么工作
- 03 链接里那几个参数是什么
- 04 和普通 TLS 的关键差别
- 05 一个常见误解
- 06 它不是万能的
- 07 检查你手上的链接
- 08 小结
一句话结论:Reality 不用自己的证书,而是借用一个真实存在的第三方网站的 TLS 握手特征。 客户端靠预共享的公钥(pbk)来确认服务端身份,所以既不需要域名和证书,也不需要关闭证书校验。
它解决的是什么问题
用 TLS 伪装的代理有个长期困境:
- 用自己的证书,就得有域名、要续期,而且这个域名一旦被标记就废了
- 用自签名证书,客户端必须开
allowInsecure跳过校验——那等于放弃了身份验证,中间人可以解密你的全部流量 - 更麻烦的是主动探测:观测方可以主动去连你的服务器,看它的 TLS 握手行为像不像一个正常网站。伪装得不像就会暴露
Reality 的思路是:既然要像一个真实网站,那就直接借用一个真实网站的握手。
大致怎么工作
服务端配置里指定一个「借用目标」,通常是某个真实存在、且从你的服务器能正常访问的大站。
- 正常用户连过来(带着正确的公钥):服务端识别出是自己人,转入代理流程
- 探测者连过来(没有公钥):服务端把连接原样转发给那个真实网站,探测者看到的就是那个网站的真实证书和真实响应
所以从外部主动探测的角度,你的服务器看起来就是那个网站的一个前置。这是 Reality 相比传统 TLS 伪装的核心优势。
链接里那几个参数是什么
用节点链接解析器解开一条 Reality 链接,通常会看到:
| 参数 | 含义 |
|---|---|
security=reality | 声明用的是 Reality |
pbk | 公钥。客户端用它验证服务端身份,对应服务端的私钥。填错就连不上 |
sid | shortId。一个短标识,服务端用来区分不同客户端;可以为空 |
sni | 借用的那个真实网站的域名。握手时报的就是它 |
fp | TLS 指纹伪装。让握手的字节特征看起来像某个真实浏览器,常见值 chrome、firefox、safari |
spx | spiderX,探测时访问的路径,通常留空 |
flow | XTLS 的流控模式,常见 xtls-rprx-vision |
pbk 是这里唯一真正的凭证,它和服务端私钥配对。sid 和 fp 更像是配置项而非密钥。
和普通 TLS 的关键差别
| 普通 TLS | Reality | |
|---|---|---|
| 需要域名 | 是 | 否 |
| 需要证书 | 是(或关校验) | 否 |
| 客户端怎么验证服务端 | 靠证书链 | 靠预共享公钥 pbk |
| 被主动探测时 | 暴露自签名证书或异常响应 | 转发给真实网站,看起来正常 |
| 配置复杂度 | 低 | 中等,参数多且必须精确 |
注意最后一行:Reality 的参数容错很低。pbk 错一个字符就连不上,sni 填的域名如果服务端不支持也会失败。所以拿到一条 Reality 链接时,先解开看清参数比直接导入更省事——参数不全的话,客户端往往只报一个笼统的连接失败。
一个常见误解
Reality 不是加密方式,它是 TLS 层的伪装与身份验证方案。真正传输数据的仍然是 VLESS 协议本身。所以你会看到 encryption=none 和 security=reality 同时出现——前者说的是 VLESS 层不额外加密(因为 TLS 层已经加密了),不是「没有加密」。
这一点经常被误读成「Reality 节点是明文的」,并不是。
它不是万能的
- 借用的目标网站如果从你的服务器访问不通,握手会失败
- 借用的目标如果本身被限制访问,伪装反而更显眼
- 客户端必须支持 Reality(mihomo、sing-box 的较新版本支持,老内核不支持)
如果你的客户端报「不支持的 security 类型」,通常就是内核太老。
检查你手上的链接
把 Reality 链接粘进节点链接解析器,它会把 pbk、sid、fp、serviceName 这些参数逐个翻成中文说明,也会指出缺失的必需字段。解析在你的浏览器里完成,链接不会上传。
小结
- Reality 借用真实网站的 TLS 握手,不需要自己的域名和证书
- 客户端靠
pbk(公钥)验证服务端,所以不需要关闭证书校验 - 被主动探测时,服务端把连接转给真实网站,看起来正常
- 参数容错低,导入前先解开看清比事后排查省事
相关文章
SNI 是什么,为什么配错了就握手失败
节点配置里的 sni 字段决定 TLS 握手时报哪个域名。它是明文传输的,也正因如此成了最容易出问题的一项。本文说明它的作用、和 Host 的区别,以及三种典型的配错场景。
订阅地址打开是一大串乱码,那到底是什么
在浏览器里打开机场订阅地址,看到的往往是一长串没有换行的字符。那不是加密,是 Base64 编码的节点清单。本文说明它的结构、为什么要编码、以及三种常见的订阅返回格式怎么区分。
规则写对了却不生效?多半是顺序放错了
Clash 的规则从上往下逐条匹配、命中即停,所以一条宽泛的规则放在前面,会让它后面所有具体规则永远不执行。本文说明正确的排列顺序、GEOIP 为什么必须靠后,以及怎么验证某个域名到底命中了哪条。