Nginx 在 CentOS 上的 SSL 协议选择建议
推荐协议与理由
- 优先启用 TLSv1.3;同时保留 TLSv1.2,禁用 SSLv2/SSLv3/TLSv1.0/TLSv1.1。TLSv1.3 握手更短、性能更好,并引入更安全的密钥交换与 AEAD 套件;TLSv1.2 仍具备良好的兼容性与安全性,是当前广泛支持的安全基线。若需覆盖极少数旧客户端,可在评估后再决定是否临时保留 TLSv1.1,但默认不建议开启。
不同 CentOS 版本与 OpenSSL 支持
- CentOS 7 默认仓库的 OpenSSL 版本较低(通常为 1.0.2 系列),该系列不支持 TLSv1.3。如需 TLSv1.3,建议:升级系统 OpenSSL 并重新编译 Nginx 以链接新库,或采用支持 TLSv1.3 的 Nginx 官方/第三方仓库版本;验证时可用命令:
openssl s_client -connect example.com:443 -tls1_3 检查是否协商到 TLSv1.3。
- **CentOS 8/Stream、CentOS 9(或兼容的 RHEL 8/9)**通常自带较新的 OpenSSL(如 1.1.1 或更新),可直接在 Nginx 中启用 TLSv1.3。若
nginx -V 显示构建时链接了 OpenSSL 1.1.1+,即可在配置中启用 TLSv1.3。
推荐的 Nginx 协议与套件配置
- 协议与套件(兼顾安全与性能):
- 协议:仅开启 TLSv1.2 TLSv1.3。
- 套件:优先 ECDHE 密钥交换与 AES-GCM/CHACHA20 认证加密,椭圆曲线优先 X25519。示例套件字符串:
ECDHE+AESGCM:ECDHE+CHACHA20:!aNULL:!MD5:!DES:!3DES。
- 协议细节:启用 TLSv1.3 时,
ssl_prefer_server_ciphers 对套件优先级的影响被弱化,可保持默认或按需设置;TLSv1.2 建议开启 ssl_prefer_server_ciphers on; 以优先使用服务器端更安全的套件。
上线前的验证与注意事项
- 基线校验:使用
nginx -t 检查语法,使用 openssl s_client -connect your.domain:443 -tls1_2/-tls1_3 验证协商版本;浏览器开发者工具的安全面板也可查看连接协议与证书链。
- 证书与链:确保使用包含中间证书的 fullchain 文件,私钥权限设为 600,避免因链不完整或权限不当导致握手失败或校验告警。
- 观测与优化:开启 OCSP Stapling、合理配置 会话复用(
ssl_session_cache、ssl_session_timeout),并启用 HTTP/2 降低 RTT;如已具备条件,可评估 HTTP/3(QUIC) 以获得更低连接建立延迟。