apache高可用环境下ssl握手延迟的核心在于跨节点会话复用:需统一启用sslsessiontickets、共用48字节密钥文件,并推荐使用memcache/redis共享缓存;同时强制tls 1.3、统一对齐ecdhe-aead密码套件,全局启用ocsp stapling并共享缓存后端。

Apache 在高可用环境(如多节点负载均衡、IP 漂移、集群部署)下处理 SSL 握手延迟,核心不是单机调优,而是让会话复用机制跨节点协同生效——否则客户端重连时频繁掉出缓存,握手退化为完整流程,延迟飙升。
统一会话票据密钥(SSLSessionTickets)
默认的内存级会话缓存(shmcb)只在本机有效,节点间不共享。解决跨节点复用问题,必须启用并严格管理会话票据:
- 在所有 Apache 节点的全局配置中开启:SSLSessionTickets on
- 指定统一密钥文件:SSLSessionTicketKeyFile /etc/ssl/private/ticket.key
- 密钥必须是 48 字节二进制文件,所有节点共用同一份(不可生成多份):openssl rand -out /etc/ssl/private/ticket.key 48
- 确保密钥文件权限严格(仅 root 可读):chmod 600 /etc/ssl/private/ticket.key
共享式会话缓存(可选但推荐)
若需更强一致性或票据失效兜底,可引入外部共享缓存后端,替代默认 shmcb:
- 启用 mod_socache_memcache 或 mod_socache_redis(需编译加载)
- 配置示例(memcached):SSLSessionCache memcache:10.0.1.10:11211
- 注意:memcache 会引入网络开销,建议部署在同一局域网低延迟链路;缓存大小和超时仍需设为 SSLSessionCacheTimeout 300
- 避免使用 dbm —— 文件锁在多节点写入时易冲突,导致握手阻塞
TLS 协议与密码套件对齐
不同节点若协议或套件不一致,客户端协商失败后会降级重试,增加延迟:
- 所有节点强制启用 TLS 1.3,并禁用旧协议:SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2 +TLSv1.3
- 统一密码套件,优先 ECDHE+AEAD:SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
- 禁用 RSA 密钥交换(无前向保密且慢),避免客户端因不匹配而 fallback
OCSP Stapling 全局启用并缓存同步
OCSP 响应若由各节点独立获取,可能因 CA 响应波动或本地缓存过期,造成验证延迟不一致:
- 所有节点开启:SSLUseStapling on
- 使用共享缓存路径(如 NFS 挂载目录)或统一 memcache 后端:SSLStaplingCache memcache:10.0.1.10:11211
- 确保证书含 OCSP URI(openssl x509 -in cert.pem -noout -text | grep OCSP)
- 上线后检查日志:grep "stapling response OK" /var/log/apache2/ssl_engine_log











