首页/安全/加密与证书速查/关闭通知(close_notify)与截断防护
TLS 与 HTTPS60 条

关闭通知(close_notify)与截断防护

TLS 规范要求正常结束会话前发送 close_notify 警报;对端未收到就断开时,应用可能把被截断的数据当成完整数据,HTTP 层靠长度校验与分块编码共同兜底。

加密与证书速查安全更新于 2026-10-13

关闭通知与截断防护

协议规范要求在正常结束会话前发送关闭通知警报,明确告知对端不再发送数据。如果对端没有收到通知就断开连接,应用可能把被截断的数据当成完整数据,这类问题在下载与流式响应中最隐蔽。防护手段是在应用层做长度校验、分块编码校验或内容校验,同时区分正常结束与异常截断。

基本信息

警报类型关闭通知,编号为 0
作用明确告知对端不再发送数据
风险连接直接断开可能意味着数据被截断
防护长度校验、分块编码、应用层内容校验

典型使用场景

  • 下载类业务:确认文件是否完整
  • 流式接口排错:响应中途结束但客户端未报错
  • 自研协议栈:区分正常结束与异常截断
  • 抓包分析:判断连接是正常关闭还是被重置
  • 中间设备排查:代理或网关未转发通知

观察会话结束行为

观察会话结束行为
printf 'GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n' | openssl s_client -connect example.com:443 -servername example.com -quiet 2>&1 | tail -3
# 抓包时关注是否有警报记录
tshark -r tls.pcap -Y 'tls.alert_message' -T fields -e tls.alert_message.desc | head

结束方式对照

结束方式含义风险
收到关闭通知正常结束低
直接断开可能被截断中,需应用层校验
连接被重置异常中断高,可能被中间设备干预
部分中间设备或旧代理不发关闭通知;自研协议栈应显式区分正常结束与异常截断,而不是把断开一律当成正常结束。

落地建议

  • 下载与导出类接口都做长度或内容校验
  • 在客户端记录异常结束的统计指标
  • 对中间设备的行为建立基线并定期对比
  • 自研协议明确结束帧与超时的处理分支
抓包看到连接被重置就判定为攻击是常见误判:也可能只是中间设备或服务端超时回收连接,需要结合上下文与其他指标判断。

易错点

  • 把连接断开一律当成正常结束,下载类业务需额外做长度或内容校验
  • 抓包看到重置就判定为攻击,忽略超时回收与中间设备行为
  • 自研协议栈不区分正常结束与异常截断,截断数据被当作完整数据
  • 只依赖传输层保证完整性,忽略代理可能提前关闭连接
  • 排障时只看服务端日志,忽略链路中间设备的行为
  • 把该警报当成可选优化项,实际上它承担着完整性语义

数据来源与参考

  • RFC 5246 附录 A(Alert Protocol)
  • RFC 8446 §6(Alerts)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌