首页/安全/加密与证书速查/证书压缩(RFC 8879)
TLS 与 HTTPS60 条

证书压缩(RFC 8879)

在握手时对证书链做无损压缩(zlib/brotli/zstd 等编码),减少大证书链的握手流量与延迟;需客户端与服务端同时声明支持才会启用。

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

证书压缩是什么

证书压缩(RFC 8879)在握手过程中对证书链做无损压缩,减少大证书链带来的握手字节数与延迟。客户端在 ClientHello 里用 compress_certificate 扩展声明自己支持的压缩算法及优先级,服务端从交集里选一个,把 Certificate 消息压缩后发送;两侧没有共同算法时不启用,握手照常进行。收益主要出现在证书链较大、跨地域链路延迟高或移动网络首包敏感的场景。

基本信息

标准RFC 8879
协商方式客户端 compress_certificate 扩展列出算法偏好,服务端择一
算法编号zlib(1)、brotli(2)、zstd(3),见 IANA TLS Certificate Compression 注册表
生效条件客户端与服务端同时支持同一算法
收益场景大证书链、跨地域握手、移动网络首连
额外开销压缩解压消耗 CPU,高并发时需评估占比

典型使用场景

  • 移动端首连优化:证书链大的站点在弱网下握手字节数是首屏延迟的重要构成。
  • 多域名网关:一台网关承载大量证书时,压缩能显著降低握手流量。
  • 跨境访问:延迟高、丢包多的链路上,减少往返字节比压缩静态资源见效更直接。
  • CDN 能力核对:确认边缘节点是否已与客户端协商启用证书压缩。
  • 成本评估:在带宽账单与 CPU 占用之间做实测权衡,而不是默认全开。

确认是否协商成功

确认是否协商成功
openssl s_client -connect example.com:443 -servername example.com -msg </dev/null 2>&1 | grep -i 'compress_certificate' | head -3
# 对比启用前后的握手字节数(可用 tcpdump 抓包后按字节统计)
# tshark -r handshake.pcap -Y 'tls.handshake.type == 11' -T fields -e frame.len | awk '{s+=$1} END {print s}'
# 服务端侧看实现支持的算法与优先级配置

算法与收益对照

编码编号特点
zlib1兼容性最好,压缩率一般
brotli2压缩率较好,编解码开销中等
zstd3压缩率与速度均衡,较新实现支持
不压缩不协商两侧无交集时的默认行为
小证书链的收益有限,评估时以实际握手字节数与首字节时间变化为准;只看扩展是否出现,并不能说明压缩真的省了流量。

易错点

  • 两侧未同时支持时测不出效果:容易误判为配置无效,实际是客户端或服务端任一版本过旧。
  • 全局开默认算法不做压测:压缩带来 CPU 开销,高并发网关可能出现新瓶颈。
  • 只看扩展出现在抓包里就认定生效:还要核对 Certificate 消息长度确实变小。
  • 把证书压缩与 HTTP 压缩混为一谈:前者只作用于握手期的证书消息,不压缩业务数据。

数据来源与参考

  • RFC 8879(TLS Certificate Compression)
  • IANA TLS Certificate Compression 注册表
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌