sslsessiontickets必须在apache全局配置中设置,因其属服务器级指令,写入会报错或失效;正确做法是在ssl.conf等主配置文件中启用并指定48字节二进制密钥文件。
不能在 apache 虚拟主机(<virtualhost></virtualhost>)中配置 sslsessiontickets —— 它必须放在全局配置上下文中,否则会被忽略或报错。
为什么 SSLSessionTickets 不支持 VirtualHost 级别配置
Apache 的 SSLSessionTickets 指令属于服务器级指令(server-pool scope),仅允许出现在主配置文件(如 httpd.conf 或 ssl.conf)的顶层,或 <server></server> 块中。写在 <virtualhost></virtualhost> 里会导致:
- 启动时报错:
Invalid command 'SSLSessionTickets', perhaps misspelled... - 即使 Apache 忽略错误继续运行,该设置也不会生效
- 客户端提交的 session ticket 将无法被服务端解密复用
正确启用 SSLSessionTickets 的位置和写法
在全局配置中(例如 /etc/apache2/mods-enabled/ssl.conf 或 /etc/httpd/conf.d/ssl.conf)添加:
SSLSessionTickets on SSLSessionTicketKeyFile /etc/ssl/private/ticket.key
-
SSLSessionTickets on显式启用票据机制(2.4.8+ 默认开启,但重启后密钥丢失,实际失效) -
SSLSessionTicketKeyFile必须指向一个 48 字节的二进制密钥文件,不可 base64 编码 - 密钥文件权限应为
600,属主为 Apache 运行用户(如www-data或apache)
多虚拟主机共用同一套票据配置
只要所有 HTTPS 站点都跑在同一组 Apache 进程上,一份全局 SSLSessionTickets 配置就自动对全部 <virtualhost></virtualhost> 生效。无需、也不能为每个站点单独配置。
- 移动端在访问
site-a.com后切换网络,再访问site-b.com,只要两者共享同一 ticket.key,且 TLS 版本兼容,就可能复用票据 - 若站点部署在不同服务器或负载均衡后端,务必确保所有节点使用完全相同的
ticket.key文件
配合使用的必要全局设置
仅开启 SSLSessionTickets 不够,还需同步检查以下全局项:
-
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1:禁用不支持票据的老协议 -
SSLCipherSuite中保留TLS_AES_*(TLS 1.3)和ECDHE前向安全套件 - 确认未在任何子配置(如 .htaccess 或某 VirtualHost 内)写
SSLSessionTickets off覆盖全局设置











