apache 的 ssl/tls 会话缓存需通过配置 sslsessioncache 启用(如 shmcb 或 dbm),禁用则设为 none;shmcb 缓存无法手动删除,应使用 sudo apachectl graceful 重置共享内存并清空缓存,同时配合 sslsessioncachetimeout 控制有效期以防止过期复用。

Apache 本身不直接管理 SSL/TLS 会话缓存(如 TLS session tickets 或 session IDs),这部分功能通常由底层 OpenSSL 库或前端代理(如 Nginx、HAProxy)承担。但 Apache 在启用 mod_ssl 后,可通过配置控制 SSL 会话的生命周期与缓存行为,“清理过期 SSL 会话缓存”本质上是让旧会话自动失效、避免复用,而非手动删除某个缓存文件。
确认 Apache 是否启用了 SSL 会话缓存
检查你的 httpd.conf 或虚拟主机配置中是否包含类似以下指令:
-
SSLSessionCache "shmcb:/var/cache/apache2/ssl_scache(512000)"(共享内存缓存) -
SSLSessionCache "dbm:/var/cache/apache2/ssl_scache"(基于文件的 DBM 缓存) -
SSLSessionCache none(禁用缓存)
只有启用 shmcb 或 dbm 类型时,Apache 才会维护本地 SSL 会话缓存;若使用 none 或前端代理接管 TLS,则无需在 Apache 层清理。
针对 shmcb 类型缓存:重置共享内存区
Apache 的 shmcb 缓存存储在共享内存段中,无法直接删文件,但可安全重置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 执行命令:
sudo apachectl graceful(推荐)或sudo systemctl reload apache2 - 该操作会平滑重启工作进程,清空当前 shmcb 缓存区,新连接将使用全新会话缓存
- 不会中断已有连接,也不会触发完整服务中断
控制会话有效期,让过期自动失效
真正防止“过期会话被复用”的关键是缩短其有效时间,而不是事后清理:
-
SSLSessionTimeout 300(单位:秒,默认 300 秒 = 5 分钟)——建议设为 60–300 秒之间 -
SSLSessionCacheTimeout 300(仅对 dbm 缓存生效,指定磁盘缓存条目过期时间) - 配合
SSLUseStapling on和SSLStaplingCache配置 OCSP 装订缓存,避免因证书状态查询延迟导致会话异常保留
针对 dbm 类型缓存:可手动清理缓存文件
如果使用的是 dbm 缓存(较少见,多用于调试):
- 缓存文件路径即
SSLSessionCache指令中指定的路径,例如/var/cache/apache2/ssl_scache - 停止 Apache:
sudo systemctl stop apache2 - 删除缓存文件:
sudo rm -f /var/cache/apache2/ssl_scache* - 重启 Apache:
sudo systemctl start apache2 - 注意:dbm 缓存在高并发下性能较差,生产环境不推荐
补充:操作系统级 SSL 状态缓存无需 Apache 干预
Windows 的 certutil -urlcache * delete 或 IE/Edge 的「清除 SSL 状态」只影响客户端本机,和 Apache 服务器无关。Linux/macOS 无等效全局 SSL 会话缓存机制,OpenSSL 会话复用完全由 Apache 进程自身管理。










