要配置安全合规的国密双证书通道,必须完成底层密码栈替换(如用gmssl/tongsuo替代openssl)、部署sm2签名与加密双证书、并在nginx中分离加载且启用纯国密套件,三者缺一不可。

要配置安全合规的国密双证书通道,核心不是“加个模块”,而是完成底层密码栈替换、双证书结构部署与协议级策略控制三者闭环。缺一不可,否则 TLS 握手必然失败,密评也无法通过。
必须替换 OpenSSL 为国密兼容库
标准 Nginx 依赖 OpenSSL,而原生 OpenSSL 不识别 SM2 曲线、SM3 摘要或 SM4 加密算法。即使配置了 ssl_ciphers ECDHE-SM2-SM4-SM3,OpenSSL 也会静默忽略或直接报错。
- 选用已通过国家密码管理局认证的实现,如 GMSSL(v2.5.4+)或 Tongsuo(铜锁),二者均完整支持 SM2/SM3/SM4 及密钥用途校验
- 编译安装后执行 openssl version -a,输出中必须含 GMSSL 或 Tongsuo 字样;若显示 OpenSSL 1.1.1w 等国际版,说明未生效
- 运行 ldd $(which nginx) | grep ssl,确认链接的是你安装的国密库路径(如 /usr/local/gmssl/lib/libssl.so),而非系统默认的 /lib64/libssl.so.1.1
严格按规范准备两套独立 SM2 证书
国密 TLS(NTLS)强制要求双证书结构:签名证书用于身份认证与数字签名,加密证书专用于密钥封装(Key Encipherment),二者私钥不可复用、用途不可互换。
- domain_sign.crt/.key:Key Usage 必须含 digitalSignature,用于 TLS 握手中的 Server Key Exchange 和证书签名验证
- domain_encrypt.crt/.key:Key Usage 必须含 keyEncipherment,用于 SM2 密钥协商阶段的密钥封装(SM2EnvelopedKey)
- 证书须由具备《电子认证服务许可证》的国密 CA 签发(如 CFCA、上海CA、海域云合作 CA),根证书需预置在国产 OS(统信UOS、麒麟)及国密浏览器信任库中
Nginx 配置中分离证书加载与套件控制
nginx 的 ssl_certificate 和 ssl_certificate_key 仅能指向签名证书对;加密证书不能填入此处,否则客户端会因 Key Usage 不匹配而断连。
- 签名证书配置示例:
ssl_certificate /path/to/domain_sign.crt;
ssl_certificate_key /path/to/domain_sign.key; - 加密证书需通过动态方式加载:
– 使用 ssl_certificate_by_lua_block(需集成 nginx-gmssl 模块)
– 或交由前置 WAF/国密网关处理(如深信服、F5 国密版) - 启用纯国密套件并禁用降级风险:
ssl_ciphers ECDHE-SM2-SM4-SM3:SM2-SM4-SM3;
ssl_prefer_server_ciphers on;
务必移除所有含 RSA/AES/SHA256 的套件,防止中间人强制降级
金融级合规验证要点
合规验收不接受“部分国密”——签名、密钥交换、数据加密三个环节必须全程走国密链路,且满足密评三级要求。
- 私钥必须生成并存储于 HSM 或国密机内,严禁明文导出;若使用软件密钥,需确保权限为 600 且属主为 nginx 运行用户
- 开启 OCSP Stapling 并对接国密 CA 的 OCSP 响应器,避免证书吊销状态校验失败
- 建议接入 CLM(证书生命周期管理)系统(如海域云 CLM),自动同步 CRL/OCSP、预警过期、阻断异常签发










