Nginx配置RSA+ECC双证书可让同一域名自动适配新旧客户端:TLS握手时依客户端能力协商选证,需Nginx≥1.11.0、OpenSSL≥1.0.2,两套证书Subject/SAN完全一致、私钥无密码,server块内连续声明(推荐RSA在前、ECC在后),并启用TLSv1.2+及含ECDHE-ECDSA/RSA的密码套件。

Linux 下 Nginx 配置 RSA 和 ECC 双证书,是为了让同一个域名同时支持传统 RSA 客户端(如旧版 IE、部分嵌入式设备)和现代 ECC 客户端(如 Chrome/Firefox/Android 7+),提升兼容性与握手性能。关键不是“两个证书一起用”,而是让 Nginx 在 TLS 握手时根据客户端能力自动选发合适证书——这需要 Nginx ≥1.11.0、OpenSSL ≥1.0.2(推荐 1.1.1+),且配置顺序和证书一致性必须严格满足要求。
确认基础环境是否就绪
执行以下命令检查:
-
nginx -V | grep -i ssl:确认输出含
--with-http_ssl_module - nginx -V | grep -i openssl:查看编译链接的 OpenSSL 版本,应 ≥1.0.2
- openssl version:运行时 OpenSSL 版本需与上一步一致,否则可能协商失败
- 若版本过低,需升级系统 OpenSSL 或重新编译 Nginx 链接新版 OpenSSL
准备两套完全匹配的证书与私钥
两套证书必须满足三个硬性条件:算法独立、Subject/SAN 完全一致、私钥无密码。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- RSA 套件:
server-rsa.crt(含完整证书链) +server-rsa.key(2048 或 3072 位,无密码) - ECC 套件:
server-ecc.crt(同样含链,且 CN 和 SAN 字段与 RSA 证书一字不差) +server-ecc.key(推荐 secp256r1 曲线,无密码) - 验证一致性:
openssl x509 -in server-rsa.crt -text -noout | grep -E "(Subject:|DNS:)"与 ECC 证书比对结果必须完全相同 - 私钥去密码(如有):
openssl rsa -in server-rsa.key -out server-rsa.key
Nginx server 块内正确声明双证书
在 HTTPS server 配置中,按顺序写入两组证书指令,ECC 建议放在 RSA 后面(利于多数现代客户端优先选 ECC):
ssl_certificate /etc/nginx/ssl/server-rsa.crt; ssl_certificate_key /etc/nginx/ssl/server-rsa.key; ssl_certificate /etc/nginx/ssl/server-ecc.crt; ssl_certificate_key /etc/nginx/ssl/server-ecc.key;
- 四行必须紧邻,中间不能插入其他 ssl_* 指令(如 ssl_protocols 放在它们之前或之后均可)
- 确保路径为绝对路径,Nginx 用户(如 www-data 或 nginx)有读取权限,私钥权限为
600 - 启用 TLSv1.2 和 TLSv1.3:
ssl_protocols TLSv1.2 TLSv1.3; - 推荐 cipher suite(兼顾安全与兼容):
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
验证与调试要点
配置完成后 reload 并实测:
-
语法检查:
nginx -t确保无报错 -
启动服务:
systemctl reload nginx或nginx -s reload -
快速验证:用 curl 检查响应头是否含
strict-transport-security,再用浏览器访问,点击锁图标看证书详情——不同浏览器可能显示不同证书(Chrome 通常选 ECC,旧 IE 显示 RSA) -
精准验证:用 OpenSSL 手动指定签名算法测试:
openssl s_client -connect example.com:443 -sigalgs ecdsa_secp256r1_sha256→ 应返回 ECC 证书openssl s_client -connect example.com:443 -sigalgs rsa_pss_rsae_sha256→ 应返回 RSA 证书

















