在国密SSL(GMSSL)环境中,Nginx的配置与标准HTTPS有显著区别,核心在于双证书体系(签名证书  +  加密证书)。以下是标准国密Nginx(基于GmSSL或Tongsuo补丁)中这两类证书的路径指定方法和关键注意事项。

1.  核心配置指令

在国密Nginx的`server`块中,使用以下4个独立指令分别指定路径:

配置项        指令名称        作用  

签名证书(公钥)      `ssl_certificate`      指定签名证书文件(含公钥)路径  

签名私钥          `ssl_certificate_key`      指定签名证书对应的私钥路径  

加密证书    (公钥)      `ssl_enc_certificate`      指定加密证书文件(含公钥)路径(国密特有)  

加密私钥          `ssl_enc_certificate_key`      指定加密证书对应的私钥路径(国密特有)  

2.  标准配置示例

nginx

server  {

        listen  443  ssl;

        server_name  your-domain.com;

          签名证书与私钥(用于身份认证)

        ssl_certificate  /etc/nginx/ssl/sign_cert.pem;

        ssl_certificate_key  /etc/nginx/ssl/sign_key.pem;

          加密证书与私钥(用于密钥协商,国密双证书体系必须配置)

        ssl_enc_certificate  /etc/nginx/ssl/enc_cert.pem;

        ssl_enc_certificate_key  /etc/nginx/ssl/enc_key.pem;

          其余常规SSL配置(需指定国密套件)

        ssl_protocols  TLSv1.1  TLSv1.2;

        ssl_ciphers  ECDHE-SM2-WITH-SMS4-GCM-SM3:ECDHE-SM2-WITH-SMS4-CBC-SM3;

          ...

}

3.  路径指定时的关键注意事项(极易踩坑)

绝对路径优先:强烈建议使用绝对路径(如  `/etc/nginx/ssl/...`),避免因Nginx启动时的工作目录(如  `/etc/nginx/`)与相对路径混淆导致  `No  such  file  or  directory`  错误。

文件格式必须为  PEM:证书和私钥文件必须为  `.pem`  或  `.crt`/`.key`  的  Base64(PEM)格式,不支持DER二进制格式。

权限控制(`ssl_certificate_key`  与  `ssl_enc_certificate_key`):

      私钥文件权限必须严格限制,建议设为  `600`  或  `640`。

      确保Nginx工作进程(如  `www-data`  或  `nginx`  用户)对私钥文件及其父目录拥有读取(r)权限。若父目录权限为  `700`  且属主非nginx用户,会导致  `Permission  denied`。

证书链合并处理:

      对于签名证书:若CA机构提供了中间证书,需要将服务器签名证书与中间证书按顺序合并到一个文件中,再指定给  `ssl_certificate`(例如:`cat  sign_server.pem  ca.pem  >  full_sign.pem`)。

    -  对于加密证书:通常只需指定服务器加密证书本身,除非CA明确给出了加密证书的中间链,否则不要将签名证书的中间链混入加密证书文件中。

不要搞反文件位置:这是新手最常犯的错误——请务必核对文件名,确保  `sign`(签名)和  `enc`(加密)的证书/私钥没有交叉错配。错配会导致Nginx启动报错  `SSL_CTX_use_PrivateKey_file`  失败。

4.  验证配置是否生效

执行以下命令检测配置文件语法并测试实际加载:

bash

  检查语法

nginx  -t

若提示  "test  is  successful",重载生效

nginx  -s  reload

若启动失败,请立即查看错误日志定位问题:

bash

tail  -f  /var/log/nginx/error.log

  常见报错:权限拒绝(permission  denied)、找不到文件(No  such  file)、私钥不匹配(key  values  mismatch)

5.  特别补充:商业版差异

如果你使用的是商业国密Nginx版本(如阿里云Tengine、沃通Wosign、数通等),配置指令可能略有不同,常见变体为:

  `gmssl_certificate`  /  `gmssl_certificate_key`

  `ssl_sign_certificate`  /  `ssl_enc_certificate`

若上述标准指令  `ssl_enc_certificate`  无效,请查阅该商业版本的手册,或运行  `nginx  -V`  查看编译参数中是否包含  `--with-gmssl`  等标志,确认底层库类型。

如果还需要了解国密双证书的生成流程(如使用  `gmssl`  命令行工具生成签名和加密密钥对),或者如何配置国密专用的  `ssl_ciphers`  套件,可以随时告诉我,我再为你展开。