
在 Nginx 中配置高性能椭圆曲线加密,核心是合理设置 ssl_ecdh_curve 指令,它决定 TLS 握手阶段 ECDHE 密钥交换所使用的椭圆曲线。选对曲线能显著提升握手性能、安全性和兼容性。
优先使用 X25519(推荐)
X25519 是目前综合表现最优的曲线:计算快、抗侧信道攻击强、密钥短(32 字节),且被现代客户端广泛支持(Chrome 50+、Firefox 48+、OpenSSL 1.1.0+)。Nginx 1.11.0+ 原生支持该曲线。
配置写法:ssl_ecdh_curve X25519:prime256v1; 把 X25519 放在最前,确保优先选用;后接 prime256v1(即 secp256r1)作为兼容兜底 避免单独只写 prime256v1 或 secp384r1,它们性能不如 X25519,且部分旧设备可能不支持更高阶曲线
慎用 secp384r1 和 secp521r1
这两条 NIST 曲线安全性足够,但计算开销明显高于 X25519,尤其在高并发场景下会增加 CPU 负担。secp521r1 在多数实际部署中并无必要,反而降低握手成功率。
除非明确需满足特定合规要求(如某些金融或政府系统强制要求 NIST 曲线),否则不建议启用 若必须保留,应置于 X25519 和 prime256v1 之后,例如:ssl_ecdh_curve X25519:prime256v1:secp384r1; 注意:OpenSSL 1.0.2 默认不支持 X25519,升级 OpenSSL 和 Nginx 是启用它的前提
验证配置是否生效
配置完成后,不能仅依赖语法检查(nginx -t),需确认运行时真实协商结果。
用 openssl s_client -connect yourdomain.com:443 -tls1_2 连接,查看输出中 Server Temp Key 行,例如显示 X25519, 253 bits 即表示成功 借助在线工具如 SSL Labs Test,检查 “Key Exchange” 一栏是否显示首选曲线为 X25519 确保 Nginx 编译时链接的是 OpenSSL 1.1.0+(或 LibreSSL/BoringSSL),旧版本会静默忽略 X25519
配合其他 TLS 优化项效果更佳
ssl_ecdh_curve 是 TLS 性能调优的一环,需与其它参数协同:
开启 OCSP Stapling:ssl_stapling on; + ssl_stapling_verify on;,减少客户端证书状态查询延迟 复用会话:ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m;,降低重复握手开销 禁用不安全协议和算法:ssl_protocols TLSv1.2 TLSv1.3;,ssl_ciphers 中剔除 CBC、RC4、SHA1 等

评论(0)