- 以真实的 TLS 握手开始;后续所有字节都是 TLS 应用数据。
- 认证方式是对预共享密码进行 SHA-224 哈希并做十六进制编码。
- 请求帧复用 SOCKS5 风格的地址字段,用于 CONNECT 和 UDP ASSOCIATE。
- 无效或未知流量可以转发到回落端点,使其看起来像正常的 HTTPS。
- 客户端与服务器完成标准 TLS 握手(SNI/ALPN 按配置)。
- 客户端发送
hex(SHA224(password)) + CRLF + Trojan Request + CRLF(+ 可选负载)。
- 服务器校验密码与请求,然后连接到目标。
- 对 TCP,数据双向转发;对 UDP,数据包会被封装并通过 TLS 流隧道传输。
- 精确的帧格式与字段定义见 报文格式。
- 首个 TLS 记录可在请求之后携带负载,以减少数据包数量。
- 使用标准 TLS 栈和证书,继承成熟的 TLS 安全性与 ALPN 支持。
- 当由合法的 HTTPS 端点提供服务时,难以进行指纹识别。
- 握手完成后,协议开销很小。
- 共享密码模式意味着撤销粒度较粗,除非使用按用户分配的密码。
- 需要有效的 TLS 证书并进行运维续期。
- 必须配置回落行为,使探测与真实 HTTPS 无法区分。
- https://trojan-gfw.github.io/trojan/protocol