AnyTLS .wiki

AnyTLS 简介

AnyTLS 是一个试图缓解“嵌套 TLS 握手指纹(TLS in TLS)”问题的代理协议,anytls-go 是该协议的参考实现。

AnyTLS 是什么

AnyTLS 的名字来源于 Any in TLS。它本身不负责加密——加密由底层 TLS 完成;它真正负责的是两件事:合理的 TCP 连接复用与性能表现,以及 控制数据包长度模式,以缓解“嵌套 TLS 握手指纹识别”。正因为加密依赖 TLS,协议才取名为 AnyTLS。

anytls-go 是该协议的官方参考实现,提供了一个简洁的示例服务端与客户端。除此之外,sing-box、mihomo 等主流代理框架以及 Shadowrocket 也已内置 AnyTLS 协议支持。

它要解决的问题

当一个代理协议把流量包裹在 TLS 中,而被代理的流量本身又是 HTTPS(即又一层 TLS)时,就形成了 TLS in TLS(嵌套 TLS)。这种嵌套握手在数据包长度、往返次数等维度上会呈现出与正常 HTTPS 浏览不同的统计特征,可能被深度包检测(DPI)用于识别代理流量。

AnyTLS 通过可配置的分包与填充策略(PaddingScheme)来打散和重整这些特征,并且把填充方案设计成可由服务端动态下发、低成本更换的形式。

关于 TLS 特征本身

AnyTLS 不关注 TLS ClientHello / ServerHello 本身的指纹(uTLS 等工具已能轻松改变这些特征),它关注的是嵌套握手产生的流量形态(包长、包数、时序)特征。

核心特性

  • 灵活的分包和填充策略:按包号定义长度模式,服务端可下发自定义 PaddingScheme。
  • 连接复用:在 TLS 之上实现会话层多路复用,降低代理建连延迟。
  • 简洁的配置:作为参考实现,配置项精简,专注核心能力。

项目定位

官方明确指出,anytls-go 只是提供一个简洁的 Any in TLS 代理示例,并不旨在成为“通用代理工具”。作为参考实现,它不对 TLS 协议本身做过多处理。如果你需要更精细地控制 TLS ClientHello / ServerHello,建议把该协议集成到 sing-box、mihomo 等成熟代理平台中使用。

安全提示

示例服务端和客户端默认采用不安全的 TLS 配置(如自签证书、insecure),它假设你不会遭遇 TLS 中间人攻击。若用于不可信网络,请务必配置可信证书与正确的 SNI,否则通信内容可能被中间人截获。

下一步

继续阅读快速上手,用一对示例服务端 / 客户端在几分钟内跑通你的第一条 AnyTLS 链路。