启用并稳定管理sslsessiontickets可显著降低高频短连接tls握手开销;需显式配置48字节共享密钥、禁用老旧协议、搭配现代加密套件,并通过devtools或抓包验证票据实际生效。
直接在虚拟主机配置中启用并稳定管理 sslsessiontickets,能显著降低移动端、api客户端等高频短连接场景下的 tls 握手开销——关键不是“开了就行”,而是确保票据可跨请求、跨重启、跨机器持续有效。
必须显式配置稳定票据密钥
Apache 2.4.8+ 虽默认开启 SSLSessionTickets on,但若不指定密钥文件,每次重启都会生成新密钥,导致旧票据无法解密,实际退化为全握手。需在虚拟主机或全局 SSL 配置块中添加:
SSLSessionTickets onSSLSessionTicketKeyFile /etc/ssl/private/ticket.key
其中 ticket.key 是一个严格 48 字节的二进制文件,用 openssl rand -out /etc/ssl/private/ticket.key 48 生成一次即可,不可重复运行。文件权限设为 600,属主为 Apache 运行用户(如 www-data)。
多节点部署必须共享同一密钥
负载均衡后端有多个 Apache 实例时,所有节点必须使用**完全相同的** ticket.key。否则客户端在 A 节点获取的票据,到 B 节点就无法验证,复用失效。建议通过配置中心或 Ansible 等工具统一分发,避免人工遗漏。
配合协议与加密套件收紧范围
票据只对 TLS 1.2 及以上生效。若客户端仍走 TLS 1.1 或更早版本,票据扩展不会被识别。务必在虚拟主机中明确禁用老旧协议:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1- 搭配现代强密码套件,例如:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
这样既保障票据可用,又避免协商降级导致功能被绕过。
验证是否真正生效
不要只看配置语法正确。真实验证方式有二:
- 用 Chrome DevTools → Security 标签页,刷新页面后查看 “Connection” 是否显示 “secure (with 0-RTT)” 或至少没有 “obsolete TLS version” 提示
- 抓包看
ClientHello含session_ticket扩展,且ServerHello后紧接NewSessionTicket消息
若只在单机测试通,上线后失效,优先排查负载均衡器是否终结 TLS(如 Nginx 做 HTTPS 卸载),此时票据交换被截断,应改由 LB 统一管理或透传原始 TLS 流量。











