跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何配置 ssl_prefer_server_ciphers 确保静态传输的加密强度优先

开启 ssl_prefer_server_ciphers on 是让 Nginx 在 TLS 1.2 握手时按服务端 ssl_ciphers 顺序优先选择强加密套件,但必须显式配置于 server 块、配合剔除弱算法的严格排序套件(如 ECDHE+AES-GCM/ChaCha20)、限定 TLSv1.2+ 协议及指定安全曲线,并通过 openssl 和 SSL Labs 实测验证才真正生效。 开启
ssl_prefer_server_ciphers on
是让 Nginx 在 TLS 1.2 握手时按你设定的顺序选用加密套件,但它本身不提升强度——真正起作用的是你写的
ssl_ciphers
列表是否合理、排序是否靠前、是否剔除了弱算法。 必须显式启用并放在 server 块内 该指令默认是
off
,不写等于没配。不能只依赖全局 http 块设置,必须确保每个启用 HTTPS 的
server
块中都包含:
ssl_prefer_server_ciphers on;
与之配套的
ssl_ciphers
和
ssl_protocols
避免被 include 文件或低优先级配置覆盖(例如某子域名配置里误设为
off
) 加密套件要严格排序,开头即最强 静态站点不需要兼容老旧客户端,应把支持前向保密(PFS)、AEAD 模式、低延迟的组合放在最前面: 推荐开头组合:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
明确排除弱项:
!RC4:!MD5:!SHA1:!DES:!3DES:!EXPORT:!aNULL:!eNULL
不要用模糊表达如
HIGH
或
!aNULL:!MD5
,它们无法过滤掉非 PFS 套件 协议与密钥交换必须协同限制 再强的套件列表,若允许 TLSv1.0 握手,仍可能降级到弱算法: 只启用:
ssl_protocols TLSv1.2 TLSv1.3;
(TLSv1.3 自动忽略该指令,但保留它保障 TLSv1.2 安全) 指定高效安全曲线:
ssl_ecdh_curve secp384r1:prime256v1;
,兼顾性能与基础兼容性 可选增强:
ssl_dhparam /path/to/dhparam.pem;
(2048 位以上,强化 DH 密钥交换) 验证是否真正生效 改完配置后不能只 reload,必须实测确认协商结果: 命令行验证 TLSv1.2 协商:
openssl s_client -connect yourdomain.com:443 -tls1_2 | grep "Cipher is"
,输出应是你
ssl_ciphers
中第一个套件 用 SSL Labs 全面扫描,重点看 “Handshake Simulation” 中各客户端是否都协商到 ECDHE+GCM/ChaCha20,且 “Key Exchange” 显示 PFS 检查 Nginx 错误日志,确认无 SSL 相关警告或 fallback 提示

相关文章