Trojan 协议原理:借用 HTTPS 外观的代理方式
Trojan 先与服务器完成一次标准 TLS 握手,再在加密通道里发送密码哈希和目标地址;认证失败的连接被转交给一个正常网站。它的安全与外观都来自 TLS,因此域名、证书与 SNI 是否正确决定能否连接。本文按连接顺序拆解原理。
Trojan 的核心思路:先做一次真正的 HTTPS 握手
Trojan 的做法可以概括为“先像网站一样握手,再在加密通道里说暗号”。客户端与服务器完成一次标准的 TLS 握手,然后发送一个密码哈希;服务器认出哈希就开始代理,认不出就把连接交给一个正常的网站。因此,Trojan 的加密强度和外观特征几乎都来自 TLS 本身,而协议自己只增加了很薄的一层认证。
本文只讲原理,不比较品牌。所属二级专题见 代理协议二级专题,三种协议的概览见 一级专题的协议章节。
一次 Trojan 连接的四个阶段
按协议公开说明,一次连接大致经过以下阶段:
- TLS 握手。 客户端连接服务器的 443 等端口,发起标准 TLS 握手,SNI 填写节点的域名。服务器出示该域名的证书,客户端按常规方式校验。
- 发送认证与请求。 握手完成后,客户端在加密通道里发送一段数据:密码的哈希值(以十六进制文本表示)、一个换行,接着是指令、目标地址与端口,再一个换行,后面紧跟要转发的首段数据。
- 服务器判断。 服务器解密后取出哈希,与自己保存的列表比对。匹配则连接目标地址,开始双向转发。
- 认证失败的回落。 如果读到的不是合法哈希,例如浏览器或探测程序直接访问,服务器会把这条连接原样转交给预先配置的回落服务,通常是一个普通网站,访问者看到的就是这个网站的页面。
可以看到,协议层的结构很简单:没有自己的加密算法,没有时间校验,没有密钥协商。复杂的部分全部交给了 TLS。
“像 HTTPS”具体像在哪里
说 Trojan 借用 HTTPS 外观,指的是以下几个可观察点与普通网站一致:
| 观察角度 | Trojan 节点的表现 |
|---|---|
| 端口 | 常用 443,与网站相同 |
| 握手 | 标准 TLS 握手,证书由受信任机构签发 |
| 握手后的数据 | 加密数据,看不到内部结构 |
| 用浏览器直接访问 | 看到回落网站的页面 |
但“像”并不等于完全无法区分。流量的时长、方向比例、包长分布,以及客户端 TLS 握手本身的特征,都可能与真实浏览器不同。一些客户端会模拟浏览器的握手指纹来缩小差异。这些属于外观层面的设计取舍,用户无法从资料里判断某个机场的具体做法。
为什么证书与 SNI 决定能否连上
Trojan 把信任建立在 TLS 证书校验上,这带来两个直接后果。
客户端必须能完成校验。 服务器证书过期、域名不匹配、证书链不完整,客户端都会拒绝握手。节点导入参数里的“SNI”或“服务器名称”一项,就是告诉服务器“我要访问哪个域名”,以便服务器选出正确的证书。节点地址写的是 IP 时,SNI 一项尤其不能缺。
关闭校验会削弱认证。 有些客户端提供“跳过证书校验”的选项。打开它可以让证书有问题的节点暂时能连,但也意味着客户端不再确认对方身份;如果连接被中间人截获,密码哈希就可能落入他人之手,而这个哈希足以冒用你的节点。除非运营方明确说明原因,不建议长期开启。
证书类故障的具体表现与排查方向,见 TLS、SNI 与证书校验:节点连不上的协议层原因。
UDP 与传输方式的扩展
Trojan 协议定义了 UDP 转发指令。启用后,每个 UDP 数据包会附上目标地址和长度,按帧放进同一条 TLS 连接里传输。这样做的好处是不需要额外端口,代价是 UDP 被装进了 TCP,遇到丢包时会被 TCP 重传拖慢,实时性不如原生 UDP。节点能否转发 UDP,还取决于服务器配置和客户端运行方式,见 机场节点支持 UDP 的三方条件。
原始的 Trojan 运行在 TLS 之上的 TCP 连接中。社区的一些实现还让它跑在 WebSocket、gRPC 等传输方式之上,以便经过 CDN 或反向代理。这些组合增加了参数,也增加了客户端兼容性的不确定性,传输方式的差别见 TCP、WebSocket 与 gRPC 的取舍。
回落机制保护了什么,没保护什么
回落是 Trojan 设计里很关键的一环。它让节点在面对不知道密码的访问者时,表现得和一个普通网站一样:浏览器打开能看到页面,探测程序发送随机数据也只会收到网站的正常响应。这降低了节点被主动探测识别的可能。
但回落只处理“认证之前”的阶段。合法用户一旦通过认证,后续流量的时长、方向和包长仍可能与普通网页浏览不同;另外,回落网站本身是否像一个真实站点,也取决于运营方的配置。用户无法从外部判断这些细节,也不需要自己去测试,只需了解:Trojan 的外观优势主要体现在握手和被探测的时候。
和 VLESS、Shadowsocks 的定位差别
| 维度 | Trojan | VLESS + TLS | Shadowsocks |
|---|---|---|---|
| 认证凭据 | 密码(发送哈希) | UUID | 预共享密钥 |
| 加密由谁负责 | 外层 TLS | 外层 TLS | 协议自身 |
| 是否需要证书 | 需要 | 需要 | 不需要 |
| 协议层扩展能力 | 较少 | 支持流控等扩展字段 | 依赖插件 |
Trojan 和 VLESS + TLS 在结构上很接近,区别主要在认证凭据和扩展能力上。选择哪种通常由运营方决定,用户能做的是确认客户端支持;按客户端条件选择的思路,见 VLESS、Trojan、Shadowsocks 怎么选。
本站资料中的 Trojan
本站整理的 17 个品牌资料中,没有任何一个品牌把 Trojan 写为主要协议;12 个写明 VLESS,5 个协议待核实。因此本文不涉及任何品牌的 Trojan 配置。如果你在订阅里看到 Trojan 节点,可以把它理解为多协议订阅的一部分,用途分析见 多协议机场的节点用途。不熟悉的术语可以查阅 常用术语表。
请遵守所在地法律法规与平台条款使用网络服务,本文不提供服务器搭建或规避监管的方法。
常见问题
Trojan 的密码是明文发送的吗?
不是明文暴露在网络上。客户端发送的是密码的哈希值,而且这一步发生在 TLS 握手完成之后,处于加密通道之内,旁观者看不到。但如果 TLS 证书校验被关闭,中间人就有机会拿到这个哈希,因此不应随意关闭证书校验。
Trojan 节点为什么需要域名?
因为 Trojan 依赖标准 TLS,服务器需要一张由受信任机构签发、与域名匹配的证书,客户端才能通过证书校验。这也是 Trojan 节点导入参数中常见 SNI 一项的原因。
Trojan 支持 UDP 吗?
协议规定了 UDP 转发的指令,UDP 数据会被分帧后放在同一条 TLS 连接里传输。是否真正可用,取决于服务器是否开启以及客户端是否以能接管 UDP 的方式运行。
来源与更新
品牌字段来自本站品牌数据文件(整理自 2026-09-04 品牌清单,Vendor Data,官网待核实);测速截图为 2026-10-18 复核后发布的单次 Measured Data;AI 与流媒体均为 Not Tested。发布 2026-10-18,最近更新 2026-10-18。本页不承诺任何平台的收录、排名或引用。