新版握手长什么样
较新的协议版本把密钥交换并入 Hello 扩展,握手压到一个往返完成,并且从服务端首个响应之后的内容就进入加密,证书等握手消息也不再明文。抓包上的形态差别很明显:旧版本在服务端 Hello 之后能看到明文的证书与密钥交换消息,新版本则很快转入加密的应用数据,只留下时序与长度可读。识别这一点,才知道为什么有些字段突然就看不到了。
基本信息
| 适用平台 | Wireshark / tshark,新旧版本对比尤其直观 |
|---|---|
| 识别依据 | 服务端首个响应之后是否立刻进入加密握手数据 |
| 已知标记 | 兼容用途的变更密码规格消息为伪包,不改变加密状态 |
| 解密前提 | 加密的握手内容需要密钥日志才能查看 |
典型使用场景
- 解释「为什么抓包里看不到证书内容」
- 确认服务端实际启用了哪个协议版本
- 排查版本降级或协商失败导致的兼容问题
- 对比改造前后握手的往返次数
- 定位重试请求造成的「多一轮」现象
- 为客户端兼容性测试提供报文依据
形态对照
形态对照
# 旧版本: 服务端 Hello → 明文证书 → 密钥交换 → 变更密码规格
# 新版本: 服务端 Hello → 兼容用伪包 → 之后为加密的握手内容
tls.handshake.type == 2 # 服务端 Hello
tls.record.content_type == 23 # 应用数据记录
# 加密的握手内容需密钥日志才能解读
# 出现第二组 Hello 时说明发生了重试,时间线会多一个往返形态逐项读法
| 观察项 | 含义 | 异常信号 |
|---|---|---|
| 服务端响应后立即加密 | 新版本握手特征 | 属正常,不要当作解析失败 |
| 明文证书消息 | 旧版本握手特征 | 与配置启用的版本对照 |
| 兼容用伪包 | 为中间设备保留的痕迹 | 不改变加密状态,忽略即可 |
| 出现第二组 Hello | 协商重试 | 多一个往返属正常,非故障 |
协商重试会让握手看起来多了一轮,这是协议允许的行为,不应作为性能退化或故障的证据。
为兼容保留的那条变更密码规格消息是伪包,不改变实际加密状态,排查时按噪声处理。