构建符合信创要求的国密HTTPS网关需全链路国产化适配:选用Tongsuo等信创认证密码库,源码编译Nginx并绑定国密模块,部署SM2双证书(签名+加密),锁定TLCP/GMv1协议与国密套件,严格区分证书用途,确保满足等保三级与信创目录准入要求。

要构建符合信创要求的国密 HTTPS 网关,核心不是“加个SM2证书”,而是完成从密码库、协议栈、证书结构到服务策略的全链路国产化适配。Nginx 本身不原生支持国密,必须通过国密版 OpenSSL(或 GMSSL/Tongsuo/openHiTLS)+ 定制编译 Nginx + 双证书分离部署 + TLCP/GMv1 协议锁定,才能真正满足信创目录准入与等保三级合规要求。
选用信创兼容的国密密码基础栈
信创环境强调软硬件全栈自主可控,OpenSSL 官方版本不满足要求,必须替换为通过工信部信创评估的国密密码库:
- 推荐 Tongsuo(铜锁)3.0+:已列入《信创生态产品名录》,完整支持 SM2/SM3/SM4、TLCP 协议、双证书扩展,且与麒麟、统信、海光、鲲鹏平台深度适配
- 备选 GMSSL 3.1.x 或 openHiTLS 1.3+:需确认其 RPM 包已通过 OS 厂商(如统信UOS、麒麟V10)的软件仓库认证,避免手动编译引入依赖风险
- 验证命令:openssl version 应输出 Tongsuo 3.0.x 或 GMSSL 3.1.x;nginx -V 2>&1 | grep openssl 必须指向你安装的国密库路径,而非系统默认 OpenSSL
编译信创版 Nginx 并启用国密模块
官方 Nginx 源码不识别 ssl_protocols GMv1 或国密套件名,必须源码编译并显式绑定国密库:
- 下载与 Tongsuo 版本匹配的 Nginx 源码(建议 1.25.3+,对 TLS 1.3 和 SM2 握手优化更成熟)
- configure 时关键参数:
--with-http_ssl_module \<br> --with-openssl=/usr/local/tongsuo \<br> --with-cc-opt="-I/usr/local/tongsuo/include" \<br> --with-ld-opt="-L/usr/local/tongsuo/lib -ltongsuo -lcrypto"
- 编译前检查:
grep -r "SM2" /usr/local/tongsuo/include/openssl/确保头文件含国密算法定义;若报ssl.h: No such file,需修正auto/lib/openssl/conf中的 include 路径
部署 SM2 双证书并配置 TLCP 协议栈
信创网关严禁签名与加密功能混用,必须严格区分证书用途,并强制使用国密专属协议:
- 从 CFCA、阿里云国密 CA 或 DNSPod 获取完整证书包,包含:
example.com_sign.crt(签名证书,Key Usage 含 digitalSignature)example.com_sign.key(签名私钥)example.com_enc.crt(加密证书,Key Usage 含 keyEncipherment)example.com_enc.key(加密私钥) - Nginx 配置中并列声明双证书:
ssl_certificate /path/to/example.com_sign.crt;<br> ssl_certificate_key /path/to/example.com_sign.key;<br> ssl_certificate /path/to/example.com_enc.crt;<br> ssl_certificate_key /path/to/example.com_enc.key;
- 协议与套件必须锁定国密优先:
ssl_protocols GMv1 TLSv1.2 TLSv1.3;<br> ssl_ciphers ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:!aNULL:!eNULL;<br> ssl_prefer_server_ciphers on;
注意:GMv1是国密 SSL 协议标识,非 TLS 子集,不可省略
性能调优与信创环境适配要点
高性能不等于堆参数,而是在信创约束下做精准优化:
- 启用 HTTP/2(国密环境下稳定支持),禁用 TLS 1.0/1.1;SM2 密钥交换在 TLS 1.3 下延迟更低,建议设为首选
- worker 进程数匹配国产 CPU 核心数(如海光 C86-3A5000 推荐
worker_processes 8),开启reuseport提升并发吞吐 - 证书路径使用绝对路径,私钥权限设为
600,存放于非 Web 可访问目录(如/etc/nginx/certs/sm2/) - 对接国产浏览器(360 企业版、奇安信可信浏览器)时,需确保证书链完整——将中间证书合并进 sign.crt 文件,否则握手可能失败



















