要在 Apache 2.4 上启用 TLS 1.3,前提是你的 Apache 版本不低于 2.4.37 且编译链接的 OpenSSL 版本不低于 1.1.1,否则配置写了也不会生效。
先说结论:版本够才能配,先查环境再改配置,不要盲目复制粘贴。
- 适合:Apache 2.4.37+ 且 OpenSSL 1.1.1+ 的环境
- 先准备:确认当前版本号和证书文件路径
- 验收:用命令行工具验证协议版本而非仅看浏览器
命令速用版
如果你确认版本符合要求,核心配置通常在 httpd-ssl.conf 或 ssl.conf 中,关键指令如下:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCertificateFile "/path/to/your/certificate.crt"
SSLCertificateKeyFile "/path/to/your/private.key"
注意:TLS 1.3 在 OpenSSL 1.1.1+ 中默认启用,但建议显式禁用旧协议以确保安全。
为什么会这样
TLS 1.3 是协议层的升级,Apache 自身通过 mod_ssl 模块调用 OpenSSL 库来实现加密。如果底层的 OpenSSL 库版本太老(比如 1.0.2 系列),它根本不懂 TLS 1.3 的握手规则,Apache 配置再正确也无法协商成功。Apache 2.4.37 是一个分水岭版本,在此之前即使 OpenSSL 支持,mod_ssl 也没有做好适配。
分步处理
1. 检查版本
先确认 Apache 和 OpenSSL 版本,避免做无用功。
httpd -v openssl version如果 Apache 低于 2.4.37 或 OpenSSL 低于 1.1.1,建议先升级系统库或编译环境。
2. 修改配置文件
找到 SSL 配置文件,常见路径是
/etc/httpd/conf.d/ssl.conf或/etc/apache2/sites-available/default-ssl.conf。定位到
SSLProtocol行,修改为:SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1这样只保留 TLSv1.2 和 TLSv1.3。
3. 配置证书路径
确保以下指令指向正确的文件绝对路径:
SSLCertificateFile "/etc/ssl/certs/your_domain.crt" SSLCertificateKeyFile "/etc/ssl/private/your_domain.key"如果有中间证书,旧版 Apache 需用
SSLCertificateChainFile,新版通常合并到主证书文件中,具体看证书提供商说明。4. 重启服务
systemctl restart httpd # 或 systemctl restart apache2怎么验证是否生效
不要只看浏览器小锁图标,那不够准确。使用 OpenSSL 命令行强制指定 TLS 1.3 进行连接测试:
openssl s_client -connect yourdomain.com:443 -tls1_3如果输出中包含
Protocol : TLSv1.3且没有报错,说明启用成功。如果显示handshake failure,则说明服务端不支持该协议。常见坑
1. 系统库太老
CentOS 7 等旧系统默认 OpenSSL 版本较低,直接升级 Apache 可能无效,需要手动编译 OpenSSL 或使用第三方源。
2. 文件权限问题
证书私钥文件权限应设置为 600 或 640,属主通常为 root 或 apache,权限过开会导致 Apache 拒绝启动。
3. 配置语法错误
修改配置后务必先运行
httpd -t或apache2ctl configtest检查语法,防止重启失败导致服务中断。参考来源
- Apache HTTP Server Documentation, mod_ssl Configuration, SSLProtocol Directive
- OpenSSL Project, OpenSSL 1.1.1 Release Notes
原文链接:https://www.zjcp.cc/ask/11719.html
