在 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` 等参数。