首页/网络/抓包与流量分析速查/TLS ClientHello 字段判读
应用层报文判读71 条

TLS ClientHello 字段判读

握手首包携带版本、随机数、SNI、候选算法与扩展:排查"握手失败/选错算法"从这包入手,字段齐全性也反映客户端实现特征。

ClientHello 字段判读

ClientHello 是 TLS 握手的第一个报文,携带客户端支持的协议版本、随机数、会话标识、候选密码套件以及各类扩展,其中服务端名称指示决定了服务端返回哪一张证书。排查握手失败或算法协商异常时,这个报文是最重要的起点,它同时也透露了客户端的实现特征。

基本信息

适用平台Wireshark 的 TLS 解析,TLS 1.2 与 1.3 均适用
关键字段tls.handshake.extensions_server_name、tls.handshake.version
过滤条件tls.handshake.type == 1(ClientHello)
标准依据RFC 8446(TLS 1.3)与 RFC 6066(SNI 扩展)

典型使用场景

  • 确认服务端名称指示:多域名部署时判断服务端该返回哪张证书
  • 排查握手失败:核对候选算法与版本是否存在交集
  • 识别客户端实现:扩展的种类与顺序能反映客户端类型
  • 定位版本问题:真实版本要看版本列表扩展而非遗留字段
  • 观察会话恢复:会话标识或预共享密钥扩展提示是否在复用

常用过滤

常用过滤
tls.handshake.type == 1                                           # ClientHello
tls.handshake.extensions_server_name contains "example.com"       # 按 SNI 筛选
tls.handshake.type == 2                                           # ServerHello,与前者对照

关键字段读法

字段含义判读要点
遗留版本字段兼容性写法常固定为 1.2,不代表真实版本
支持的版本扩展真实支持的版本列表判断版本能力的依据
服务端名称指示客户端要访问的域名决定服务端选用哪张证书
候选密码套件客户端支持的算法与 ServerHello 的选择对照
只看遗留版本字段判断真实版本会误判,TLS 1.3 的连接在这里通常仍然写着 1.2。正确做法是看支持的版本扩展,以及服务端最终选择的版本。
没有服务端名称指示的握手多来自按地址直连的客户端或较旧的实现。在虚拟主机部署下,这类请求可能拿到默认证书,从而触发证书不匹配的错误。
这个域名标识在握手中是明文可读的,也就是说同一网络上可以直接观察到客户端访问了哪些站点。做安全评估时应当把这一点列入隐私风险的考量范围。

易错点

  • 按遗留版本字段判断真实版本会误判,认准支持版本扩展
  • 没有 SNI 的握手多来自地址直连或旧客户端,按虚拟主机部署时要关注
  • 把 SNI 当加密信息看待会低估隐私风险:它在握手中是明文
  • 只看 ClientHello 不看 ServerHello,无法确认协商最终结果,两者要成对给出

数据来源与参考

  • RFC 8446(TLS 1.3)
  • RFC 6066(SNI)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌