Apache启用TLS会话复用的核心是同时配置Session ID(通过SSLSessionCache全局缓存)和Session Tickets(通过SSLSessionTickets on及统一ticket.key),前者依赖服务端内存缓存,后者将加密票据交由客户端存储以实现无状态复用。

Apache 中启用 TLS Session Resumption,核心是同时配置两种主流机制:基于服务端缓存的 Session ID 和基于客户端存储的 Session Tickets。两者互补——Session ID 适合单机或共享缓存场景,Session Tickets 则解决多机部署、IP 频繁切换(尤其是移动端)下的复用失效问题。
启用并配置 SSLSessionCache(Session ID 方式)
这是最基础、兼容性最好的会话复用方式,依赖 Apache 在内存中缓存会话密钥:
- 在主配置或虚拟主机中添加:
SSLSessionCache shmcb:/var/cache/apache2/ssl_scache(10485760)
路径需提前创建并赋予 Apache 运行用户(如 www-data)读写权限 - 必须配对设置老化时间:
SSLSessionCacheTimeout 300(单位秒,建议 300–600,避免缓存无限堆积) - 确保
mod_ssl已启用,且未被 .htaccess 或子配置覆盖为 off
启用并稳定配置 SSLSessionTickets(推荐用于生产环境)
Session Tickets 把加密票据交给客户端保存,服务端无需维护状态,特别适合负载均衡和移动网络场景:
- 确认 Apache 版本 ≥ 2.4.8(旧版本默认关闭或不支持稳定密钥)
- 开启票据功能:
SSLSessionTickets on - 生成并指定固定密钥文件:
SSLSessionTicketKeyFile /etc/ssl/private/ticket.key
用命令生成一次:openssl rand -out /etc/ssl/private/ticket.key 48 - 严格设权限:
chmod 600 /etc/ssl/private/ticket.keychown www-data:www-data /etc/ssl/private/ticket.key(按实际运行用户调整) - 多节点集群时,所有 Apache 实例必须使用完全相同的 ticket.key文件
验证是否生效
光配不验等于没配。两个简单验证方式:
- 命令行测试复用:
openssl s_client -connect example.com:443 -reconnect -servername example.com 2>/dev/null | grep "Reused"
连续多次执行,若输出depth=0后出现Reused session即表示成功 - 浏览器 DevTools → Security 标签页查看连接详情:
“Connection” 显示secure (with TLS 1.3)或secure (with TLS 1.2),且无obsolete提示;
抓包看 ClientHello 是否含session_ticket扩展,ServerHello 是否返回NewSessionTicket
配套安全与兼容性要点
Session Resumption 要真正起效,还需清理干扰项:
- 禁用老旧协议:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Session Tickets 仅在 TLS 1.2+ 生效,旧协议会强制走完整握手 - 确认客户端支持:现代 Android/iOS 系统浏览器、WebView、OkHttp、NSURLSession 默认启用,无需额外设置
- 若前端有 TLS 终结型 LB(如 Nginx),需确保它透传
session_ticket扩展,否则票据无法抵达后端 Apache


















