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。正确做法是看支持的版本扩展,以及服务端最终选择的版本。
没有服务端名称指示的握手多来自按地址直连的客户端或较旧的实现。在虚拟主机部署下,这类请求可能拿到默认证书,从而触发证书不匹配的错误。
这个域名标识在握手中是明文可读的,也就是说同一网络上可以直接观察到客户端访问了哪些站点。做安全评估时应当把这一点列入隐私风险的考量范围。