Apache启用TLS 1.3需同时满足OpenSSL≥1.1.1、Apache≥2.4.37且mod_ssl链接新版OpenSSL;配置须设SSLProtocol +TLSv1.2 +TLSv1.3并指定TLS 1.3专用AEAD密钥套件,否则协商失败。
Apache 升级到 TLS 1.3 能显著提升连接安全性与握手速度,但不是改一行配置就能生效——它依赖底层 OpenSSL 版本、Apache 编译环境和配置项的协同配合。
TLS 1.3 由 OpenSSL 实现,Apache 只是调用模块。必须同时满足:
检查命令:
openssl version -a —— 查看 OpenSSL 实际版本
httpd -V | grep -i openssl 或 ldd $(which httpd) | grep ssl —— 确认 Apache 使用的 OpenSSL 路径与版本
若显示 OpenSSL 1.0.2 或更低,需重装 OpenSSL 并重新编译 Apache,或升级系统(如 Ubuntu 20.04+/RHEL 8+ 默认已满足)。
在虚拟主机或主 SSL 配置块中(如 /etc/apache2/sites-enabled/default-ssl.conf),设置明确的协议白名单:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3
注意:不能只写 +TLSv1.3,否则会禁用 TLS 1.2,导致旧客户端(如部分 Java 8 应用、Android 4.4 浏览器)无法连接;也不要用 SSLProtocol TLSv1.3 这种写法,它会彻底关闭其他版本。
同时确保:SSLHonorCipherOrder on,让服务器按你指定顺序选择套件,避免客户端强制协商弱算法。
TLS 1.3 使用独立的一组 AEAD 套件,不能与 TLS 1.2 混用。需分两层配置:
推荐写法:
SSLCipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
该组合既满足 TLS 1.3 握手需求,又向下兼容 TLS 1.2 客户端,同时全部支持前向保密(PFS)和现代加密模式(AEAD)。
重启 Apache 后,用三种方式交叉验证:
openssl s_client -connect yourdomain.com:443 -tls1_3 2>/dev/null | grep "Protocol ",输出应为 Protocol : TLSv1.3
若 TLS 1.3 显示为“Not supported”,重点排查 OpenSSL 版本、Apache 编译链接、配置语法错误(如漏掉 +TLSv1.2)三处。