这是一个很实用的配置场景。通过在Nginx中同时配置签名证书(如RSA)和加密证书(如ECC/ECDSA),可以有效兼顾“广泛的兼容性”与“现代高性能加密”。Nginx从 1.11.0 版本开始,通过在同个`server`块里重复使用`ssl_certificate`和`ssl_certificate_key`指令来支持这个功能。
一、双证书配置步骤
核心思想,就是在你的Nginx的HTTPS配置块中,同时配置两组证书和私钥。你可以自由组合,不必局限于ECC+RSA,也可以配置其他的证书类型对。
nginx
server {
listen 443 ssl;
server_name your-domain.com;
# ========== 配置第一套证书(例如:RSA) ==========
# 通常用于保证广泛的客户端兼容性
ssl_certificate /path/to/your-rsa-certificate.pem; # 证书文件
ssl_certificate_key /path/to/your-rsa-private-key.key; # 私钥文件
# ========== 配置第二套证书(例如:ECC/ECDSA) ==========
# 通常用于提供更高的性能和安全性
ssl_certificate /path/to/your-ecc-certificate.pem; # 证书文件
ssl_certificate_key /path/to/your-ecc-private-key.key; # 私钥文件
# 其余的SSL通用配置,如协议和加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...';
# ... 其它server配置
}
二、关于证书格式与内容
证书格式:Nginx通常接受PEM格式的证书文件。
完整证书链:强烈建议将服务器证书、所有中间证书合并到一个文件中,作为`ssl_certificate`指向的文件。Nginx官方文档和社区经验都建议这么做,可以简化配置,并有助于OCSP Stapling等高级功能的正常工作。合并文件的顺序通常是:服务器证书 → 中间证书1 → ... → 中间证书N(根证书可选)。
三、高级场景:多域名配置
如果你的Nginx需要为不同域名配置不同的双证书,可以利用SNI(Server Name Indication)功能,在单独的`server`块中进行配置。每个域名独立配置自己的双证书,互不干扰。
原理和配置方法就是这样。如果你的证书来自特定颁发机构(如Let's Encrypt),或者有更具体的用法需求,可以再问我。