首页/网络/抓包与流量分析速查/双向认证(mTLS)判读
应用层报文判读71 条

双向认证(mTLS)判读

服务端在握手中发 CertificateRequest,客户端回证书:抓包中 ServerHello 之后出现客户端 Certificate 即 mTLS;缺证书则收到握手失败类告警。

双向认证怎么判读

mTLS 是双向认证:服务端在握手里发出 CertificateRequest(类型 13)索取客户端证书,客户端回一个 Certificate(类型 11)并用 CertificateVerify 证明自己持有对应私钥。抓包上最直观的判断就是「ServerHello 之后出现客户端方向发出的 Certificate」。客户端证书缺失或不受信时,服务端会以握手失败类告警收场,客户端侧报错往往比较含糊。

基本信息

关键字段tls.handshake.type == 13(请求)与 11(客户端证书)
触发条件服务端配置要求客户端证书,如网关、服务网格、专线对接
失败表现certificate_required(116)、bad_certificate(42)、unknown_ca(48) 或 handshake_failure(40)
证书可见性包内可展开看主题与有效期,但需能解密

典型使用场景

  • 确认某个客户端是否真的完成了双向认证,而不是只做了服务端证书校验
  • 排查「证书已安装仍被拒」:核对客户端证书链是否完整
  • 网关或服务网格场景验证 mTLS 是否真的生效
  • 审计:确认哪些服务端口开启并强制要求客户端证书
  • 取证:服务端日志不全时用抓包还原握手过程

过滤与判读

过滤与判读
tshark -r t.pcap -Y "tls.handshake.type==13 || tls.handshake.type==11" -T fields -e frame.number -e ip.src -e tls.handshake.type
# 13 由服务端发出=要求客户端证书;11 由客户端发出=客户端证书,即 mTLS
tshark -r t.pcap -Y "tls.alert_message.desc==116" # certificate_required(TLS 1.3)
# 逐帧看:ClientHello → ServerHello → Certificate(S) → CertificateRequest → Certificate(C) → Finished

握手消息对照

消息type方向含义
ClientHello1客户端到服务端声明能力与支持的参数
ServerHello2服务端到客户端给出选中的参数
Certificate11双向都可能服务端证书或客户端证书
CertificateRequest13服务端到客户端要求提供客户端证书,是 mTLS 的信号
CertificateVerify15各自的发送方用私钥签名,证明持有证书对应的私钥
Finished20双向校验握手完整性,之后进入应用数据
客户端证书同样可以在抓包里看到主题、颁发者与有效期,排错不必只依赖服务端日志。但在 TLS 1.3 中这些消息已加密,需要导出会话密钥才能查看具体内容。
证书撤销检查失败在部分实现里也归入握手失败,告警描述码不一定直观。遇到「证书看着没问题却握手失败」时,要结合服务端日志确认是否卡在 OCSP 或 CRL 检查环节。

排查顺序

  • 先确认服务端是否发了 CertificateRequest,没有就说明没启用双向认证
  • 确认客户端是否回了 Certificate,回了但失败要看证书链是否完整
  • 确认客户端证书是否过期、密钥用法是否包含客户端认证
  • 确认服务端信任库是否包含签发该客户端证书的根或中间证书
  • 核对失败发生在握手哪个阶段,用帧号顺序定位是证书还是 Finished 之后的应用层错误

易错点

  • 客户端证书缺失时部分实现只在服务端留日志,客户端报错含糊,容易误判成网络问题
  • 客户端证书链不完整(缺中间证书)时服务端直接拒绝,但本地工具校验可能通过,需在服务端侧复测
  • 把服务端要求客户端证书误读为普通的双向加密,实际 mTLS 失败会直接握手失败而不进入应用层
  • 未解密就断言没有 mTLS:TLS 1.3 中 Certificate 消息在加密记录里,看不到不代表没发生

数据来源与参考

  • RFC 8446(客户端证书)
  • RFC 5246
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌