在Nginx上配置国密多域名证书,核心是使用支持国密算法(如SM2)的Nginx版本,并利用TLS的SNI(Server  Name  Indication)扩展来实现不同域名对应不同证书。

一、  核心配置方法

部署的核心流程如下:

1.  环境准备:获取国密版Nginx

标准的Nginx+OpenSSL不支持国密算法,你需要一个“国密版”Nginx。

      选择国密密码库:推荐使用`Tongsuo`(铜锁)或`GmSSL`来替换默认的OpenSSL。

      编译安装:下载Nginx源码和国密密码库源码,在编译Nginx时通过`--with-openssl`参数指定国密库路径。编译时需确保系统已安装`gcc`、`pcre-devel`等依赖。

2.  获取国密多域名证书

你需要从支持国密算法的CA机构(如CFCA、沃通等)申请证书。

      证书类型:选择多域名证书,它能在一张证书中绑定多个域名。

      双证书体系:国密TLS强制要求双证书结构:一个用于签名,一个用于加密,两者不可混用。

              签名证书:`domain_sign.crt`,用途为`digitalSignature`。

              加密证书:`domain_encrypt.crt`,用途为`keyEncipherment`。

3.  Nginx配置:使用SNI区分域名

在Nginx配置文件中,利用`server_name`指令区分不同域名,并为每个域名配置独立的证书。

nginx

  第一个域名:example.com

server  {

        listen  443  ssl;

        server_name  example.com;  #  指定域名

          国密双证书配置

        ssl_certificate          /path/to/example.com_sign.crt;          #  签名证书

        ssl_certificate_key  /path/to/example.com_sign.key;          #  签名私钥

        ssl_certificate          /path/to/example.com_encrypt.crt;    #  加密证书  (需通过特定方式加载)

        ssl_certificate_key  /path/to/example.com_encrypt.key;    #  加密私钥  (需通过特定方式加载)

          强制使用国密套件

        ssl_ciphers  ECDHE-SM2-SM4-SM3:SM2-SM4-SM3;

        ssl_prefer_server_ciphers  on;

          ...  其他配置

}

第二个域名:another.com

server  {

        listen  443  ssl;

        server_name  another.com;  #  指定另一个域名

          为该域名配置另一套国密证书

        ssl_certificate          /path/to/another.com_sign.crt;

        ssl_certificate_key  /path/to/another.com_sign.key;

          ...  加密证书配置等

}

关于加密证书的加载:Nginx标准的`ssl_certificate`指令无法直接加载加密证书。需要借助`ssl_certificate_by_lua_block`等第三方模块,或通过前置的国密网关来处理。

二、关键注意事项

      浏览器兼容性:国密证书不被主流国际浏览器(如Chrome、Firefox)默认信任。需使用**国密浏览器**(如360安全浏览器企业版)访问。

      私钥安全:务必设置严格的权限,如`chmod  600`,并确保所有者是Nginx的运行用户。

      端口与防火墙:确保服务器防火墙和安全组已开放`443`端口。

      证书与域名匹配:部署的证书必须与对应`server_name`的域名完全匹配。

      HTTP重定向:建议添加`server`块,将`80`端口的HTTP请求301重定向到HTTPS。

      证书链完整性:确保配置的证书文件包含了完整的证书链。

三、常见问题与优化

      证书过期影响:在SNI多证书配置下,单个域名证书过期不会影响其他域名的HTTPS服务,风险隔离。

      泛域名证书的风险:虽然方便,但一个私钥泄露会危及所有子域,安全风险高。生产环境建议为关键域名使用独立证书。

      自动化管理:为简化管理,可考虑使用`map`块动态加载证书,或接入专业的证书生命周期管理(CLM)系统。

四、  总结

配置国密多域名证书,关键在于选对软件栈(国密版Nginx)、用对证书(SM2双证书)和写对配置(利用SNI区分域名)。整个过程需特别注意浏览器兼容性、私钥安全和证书链完整性等问题。