apache启用tls 1.3需openssl 1.1.1+且apache 2.4.37+,配置sslprotocol +tlsv1.2 +tlsv1.3与专用密钥套件,否则协商失败;实测首次连接延迟降低50%以上。

Apache 本身不处理 Java 应用的 TLS,mod_ssl 是其 C 层模块,依赖 OpenSSL 实现加密握手。要提升 Apache 前端 HTTPS 的性能与安全性,核心是正确启用 TLS 1.3 并精简握手路径——它能把完整握手从 TLS 1.2 的 2-RTT 压缩到 1-RTT,实测首次连接延迟降低 50% 以上,且默认禁用所有弱算法。
确认底层支持前提
TLS 1.3 不由 mod_ssl 版本决定,而取决于 Apache 编译时链接的 OpenSSL 是否为 1.1.1 或更高版本(如 1.1.1w、3.0.x)。仅升级 Apache 无效。
- 检查 OpenSSL 版本:
openssl version -a - 确认 Apache 使用的 OpenSSL:
httpd -V | grep -i openssl或ldd $(which httpd) | grep ssl - Apache 需为 2.4.37+(推荐 2.4.58+),否则即使 OpenSSL 满足也无法启用 TLS 1.3
关键配置项:协议与密钥套件必须匹配
在 ssl.conf 或虚拟主机配置块中,以下两项必须同时设置且严格对应:
-
明确启用协议:用
SSLProtocol +TLSv1.2 +TLSv1.3(不推荐all -xxx写法,易误禁 TLS 1.2) -
仅用 TLS 1.3 专用套件:
SSLCipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;混入任何 TLS 1.2 套件(如ECDHE-...)会导致协商失败 - 附加建议:
SSLHonorCipherOrder on(虽对 TLS 1.3 无实际影响,但保持配置一致性)
配套优化:会话复用与 OCSP Stapling
TLS 1.3 已内置高效会话恢复机制,但 Apache 层仍需配合缓存策略减少重复计算:
- 启用共享内存会话缓存:
SSLSessionCache "shmcb:/var/cache/httpd/ssl_scache(512000)" - 开启 OCSP Stapling:
SSLUseStapling on+SSLStaplingCache "shmcb:/var/cache/httpd/stapling_cache(128000)",避免客户端自行查询吊销状态,节省一次 DNS+HTTP 请求 - 证书链保持精简:只发送服务端证书和必要中间证书,根证书由客户端信任库提供,减少传输开销
验证是否生效
重启 Apache 后,通过三种方式交叉验证:
- 命令行测试:
openssl s_client -connect example.com:443 -tls1_3 2>/dev/null | grep "Protocol :,输出应为Protocol : TLSv1.3 - 浏览器开发者工具(Security 标签页),查看当前连接协议与密钥交换细节
- 第三方检测(如 SSL Labs),确认协议支持列表中明确列出 TLS 1.3,且无降级警告
不复杂但容易忽略:TLS 1.3 的性能优势依赖于客户端兼容性。Android 4.4、Java 8 默认 JSSE 等旧环境无法协商成功,生产环境启用前需评估用户终端分布。











