必须使用国密专用Nginx版本(如nginx-tongsuo、nginx-with-openHiTLS或GMSSL定制版),配合双证书结构(签名证书与加密证书分离)、GMv1/TLCP协议栈、国密优先套件及双向认证,缺一不可。

要让 Nginx 在信创环境中真正支撑起符合国密标准的高性能网关,不能只改配置、加证书,必须从底层密码库、编译构建、证书结构到协议栈做系统性适配。否则 HTTPS 握手会失败,等保测评通不过,金融级流量也扛不住。
必须使用国密专用 Nginx 构建版本
原生 Nginx 不识别 GMv1(即 TLCP)协议,也不理解 ECC-SM4-CBC-SM3 这类国密套件名。所谓“插件式支持”是误区——Nginx 的 SSL 模块只是调用 OpenSSL API,算法能力完全取决于所链接的密码库。
- 推荐选用已通过商用密码检测的成熟发行版:nginx-tongsuo(官方维护,生产就绪)、nginx-with-openHiTLS(兼容 TLS 1.2/1.3 与 TLCP 双栈)、或基于 GMSSL 编译的定制版
- 自行 patch 官方 Nginx 源码风险极高:TLS 握手状态机、证书解析、密钥交换逻辑深度耦合底层密码库,极易引入握手中断或内存泄漏
- 验证是否生效:
nginx -V 2>&1 | grep -i openssl应显示路径指向/usr/local/tongsuo或/usr/local/gmssl;openssl version -a输出需含 Tongsuo 或 GMSSL 字样,而非 OpenSSL 1.1.1w
双证书结构是硬性合规要求
金融与等保三级以上系统严禁“一证两用”。SM2 证书必须拆分为用途明确的两个独立证书对:
-
签名证书(如
domain_sign.crt+domain_sign.key):用于服务器身份认证、数字签名,Key Usage 必须含digitalSignature;私钥建议由 HSM 托管,不可导出 -
加密证书(如
domain_enc.crt+domain_enc.key):仅用于 SM2 密钥协商(ECDH),Key Usage 必须为keyEncipherment;其公钥需嵌入 ClientHello 扩展供客户端加密预主密钥 - Nginx 配置中
ssl_certificate和ssl_certificate_key只能指向签名证书对;加密证书无法直接填入,需通过ssl_certificate_by_lua_block(配合 nginx-gmssl)或前置 WAF 动态加载
协议与套件配置必须闭环对齐
光写 ssl_ciphers ECC-SM4-CBC-SM3 不够,必须确保整个握手链路按国密规范执行:
- 启用国密专属协议栈:
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;(TLCP 协议在 nginx-tongsuo 中对应GMv1,部分版本需显式开启) - 强制国密套件优先:
ssl_ciphers ECC-SM4-CBC-SM3:ECDHE-SM4-CBC-SM3:RSA-SM4-CBC-SM3;,其中前两者仅国密客户端可协商,后者用于国际客户端降级兼容 - 指定国密椭圆曲线:
ssl_ecdh_curve sm2p256v1;;若使用 Tongsuo,还需在 OpenSSL 配置中启用 legacy provider 支持 RSA 回退 - 双向认证不可省略:启用
ssl_verify_client on;,并配置国密 CA 根证书链(ssl_trusted_certificate),确保客户端证书由 CFCA、上海 CA 等具备资质的机构签发
性能与兼容性需同步保障
信创网关不仅要“合规”,还要“能用”“好用”:
- 高并发支撑:选用支持异步 SSL 握手的版本(如 nginx-tongsuo 1.25+),搭配
ssl_session_cache shared:SSL:50m;和ssl_buffer_size 4k;减少 TLS 握手延迟 - 混合访问兼容:必须部署 SM2 + RSA 双证书方案,避免政务/国企用户因浏览器不支持国密而无法访问;Nginx 需正确识别 ClientHello 中的 ALPN 或扩展字段,自动选择匹配套件
- 客户端配套:服务端启用国密后,必须配套使用支持 TLCP/GMv1 的客户端,如奇安信可信浏览器、红莲花浏览器、密信浏览器;普通 Chrome/Firefox 默认不支持,需额外安装国密插件或切换内核



















