在  Windows  系统下,官方原版的  Nginx  不支持国密  SSL  协议(SM2/SM3/SM4)。必须使用经过国密改造的专用  Nginx  版本(如  GmSSL-Nginx、Tongsuo-Nginx  或各  CA  机构提供的国密适配版)。

以下是基于  GmSSL  国密版  Nginx  在  Windows  环境下的完整部署指南(使用双证书体系:签名证书  +  加密证书)。

第一步:准备工作(获取国密版  Nginx)

1.  下载国密版  Nginx:

      前往  GmSSL  官方或相关  CA  机构(如沃通、数安时代)下载已编译好的  Windows  二进制包。**切勿**使用官网  `nginx.org`  的官方版本,否则无法识别国密套件。

2.  下载国密双证书:

      确保从  CA  获取了  4  个文件(PEM  格式):

        `sign.crt`(签名证书)

        `sign.key`(签名私钥)

        `enc.crt`(加密证书)

        `enc.key`(加密私钥)

注意:如果您的  CA  只提供了  `.pfx`  或  `.p12`  格式,需先使用  `openssl`(国密版)提取为  PEM  格式。

第二步:放置证书文件

将上述  4  个文件复制到  Nginx  安装目录下的  `conf`  文件夹中(例如  `C:\nginx\conf\ssl\`)。

第三步:修改  `conf/nginx.conf`  配置文件

使用管理员权限打开  `nginx.conf`,在  HTTPS  Server  块中配置国密双证书。

关键配置项说明:

  `ssl_certificate`  /  `ssl_certificate_key`:指定签名证书。

  `ssl_enc_certificate`  /  `ssl_enc_certificate_key`:指定加密证书(国密版  Nginx  专有指令)。

  `ssl_ciphers`:必须优先配置国密加密套件。

完整配置示例(HTTP/HTTPS  双协议监听):

nginx

server  {

        listen  80;

        server_name  yourdomain.com;

        return  301  https://$server_name$request_uri;    #  强制跳转HTTPS

}

server  {

        listen  443  ssl;

        server_name  yourdomain.com;

          ---  国密双证书配置(核心)  ---

          签名证书及私钥

        ssl_certificate            C:/nginx/conf/ssl/sign.crt;

        ssl_certificate_key    C:/nginx/conf/ssl/sign.key;

        

          加密证书及私钥(国密专用指令)

        ssl_enc_certificate            C:/nginx/conf/ssl/enc.crt;

        ssl_enc_certificate_key    C:/nginx/conf/ssl/enc.key;

          ---  国密协议与加密套件  ---

        ssl_protocols  TLSv1.1  TLSv1.2  TLSv1.3;    #  建议开启TLS  1.3(国密支持)

        ssl_ciphers  "ECDHE-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-GCM-SM3:ECC-SM2-WITH-SM4-SM3:HIGH:!aNULL:!MD5";

        ssl_prefer_server_ciphers  on;

        ---  通用配置  ---

        root      html;

        index    index.html  index.htm;

}

Windows  路径书写提示:务必使用正斜杠  `/`(如  `C:/nginx/conf/ssl/`)或双反斜杠  `\\`,避免使用单反斜杠  `\`(会被解析为转义字符)。

第四步:防火墙放行与启动  Nginx

1.  以管理员身份运行  CMD(避免绑定  443  端口权限不足)。

2.  进入  Nginx  目录:

      cmd

      cd  C:\nginx

3.  测试配置文件语法:

      cmd

      nginx  -t

      若显示  `test  is  successful`,则继续。

4.  启动  Nginx:

      cmd

      start  nginx

5.  重载配置(后续修改配置后使用):

      cmd

      nginx  -s  reload

第五步:验证部署是否成功

由于  Windows  系统自带的  Chrome/Edge  浏览器默认不支持国密协议,您无法直接使用普通浏览器访问验证。请采用以下方式:

1.  专用国密浏览器:使用  360  安全浏览器(国密专版)、红芯浏览器或密信浏览器访问  `https://yourdomain.com`,查看地址栏是否有国密标识。

2.  命令行测试(推荐):

      使用国密版  OpenSSL(GmSSL)执行以下命令检查握手:

      cmd

      gmssl  s_client  -connect  yourdomain.com:443  -ciphersuites  "SM2-WITH-SM4-SM3"

      若返回证书链及  `Verify  return  code:  0`,即表示部署成功。

常见故障排除(Windows  特有问题)

报错现象        可能原因及解决方案  

`unknown  directive  "ssl_enc_certificate"`          您误用了官方原版  Nginx。请替换为国密编译版(检查  `nginx  -V`  是否包含  `--with-gmssl`  等字段)。  

绑定  443  端口失败(权限错误)          Windows  低版本系统需以管理员身份运行  CMD;或检查是否有其他程序(如  IIS、VMware)占用了  443  端口。  

浏览器提示“不安全”或“无共享加密套件”          检查  `ssl_ciphers`  是否包含国密套件;确认客户端浏览器为国密专用版。  

证书私钥密码问题          若私钥有密码保护,需先使用  `gmssl  rsa  -in  sign.key  -out  sign_nopwd.key`  去除密码,再重新加载。  

  附加建议:开机自启(Windows  服务)

若需开机自启,可以使用  `WinSW`(Windows  Service  Wrapper)将  Nginx  注册为  Windows  系统服务,避免每次手动启动。

注:国密算法通常绑定双证书(一签一加)。若您的业务只需单向认证,上述配置即可;如需双向认证,还需增加  `ssl_client_certificate`  和  `ssl_verify_client`  等参数。