要让nginx真正支持前向安全,必须三重控制:只保留ecdhe/dhe套件、禁用静态rsa等非pfs套件、限定ssl_protocols为tlsv1.2+;需配置ssl_ciphers明确列出ecdhe开头组合,关闭ssl_prefer_server_ciphers,并验证openssl≥1.1.1、nginx≥1.20。

要让 Nginx 真正支持前向安全(Forward Secrecy),关键不是“开启某个开关”,而是通过三重控制:只允许临时密钥交换算法、禁用所有静态密钥套件、配合现代协议与参数。配置错误哪怕只加一个 RSA 套件,整条链路的前向安全性就失效。
只保留 ECDHE 或 DHE 开头的加密套件
前向安全依赖每次握手生成一次性临时密钥,因此必须剔除所有以 RSA、ADH、AES256-SHA 等静态密钥交换方式开头的套件。推荐使用以下明确限定的列表:
ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-RSA-AES128-GCM-SHA256ECDHE-ECDSA-CHACHA20-POLY1305ECDHE-RSA-CHACHA20-POLY1305ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES256-GCM-SHA384
在 server 块中写为:
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';同时关闭服务端套件优先权:ssl_prefer_server_ciphers off;,让客户端自主选择最强的 ECDHE 套件。
强制 TLSv1.2 及以上,禁用降级风险
TLSv1.3 原生强制前向安全,不支持任何非 PFS 套件;TLSv1.2 则需严格约束,防止协商被降级到弱协议或弱参数:
- 必须写成:ssl_protocols TLSv1.2 TLSv1.3;
- 严禁包含
TLSv1.1或更低版本 - 确认未启用 SSL 压缩(默认已弃用,但可额外检查无
ssl_session_compression on)
补充强 DH 参数(仅当保留 DHE 时)
如果因兼容旧客户端需保留 DHE 套件(如 DHE-RSA-AES256-GCM-SHA384),必须提供强 DH 参数文件:
- 生成命令:
openssl dhparam -out /etc/nginx/dhparam.pem 2048(推荐 2048 位,兼顾安全与性能) - 配置项:ssl_dhparam /etc/nginx/dhparam.pem;
若仅用 ECDHE(更推荐),此步可省略,因椭圆曲线无需额外参数文件。
验证是否真正生效
配置保存后重载 Nginx(nginx -s reload),再实测确认:
- 用命令测试协商结果:
openssl s_client -connect yourdomain.com:443 -tls1_2 | grep Cipher,输出应为Cipher : ECDHE-RSA-AES256-GCM-SHA384类型 - 访问 SSL Labs 测试页,检查 “Key Exchange” 栏全部标注为 “(PFS)”
- 确认 OpenSSL ≥ 1.1.1(或 ≥ 3.0)、Nginx ≥ 1.20,否则底层不支持完整 PFS 能力











