这是一个很实用的配置场景。通过在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),或者有更具体的用法需求,可以再问我。