Nginx 与国密 TLS
Nginx 原生不支持国密 TLS 套件,它的 TLS 能力来自编译时链接的加密库。要让它支持 SM2/SM3/SM4,需要换成具备国密能力的 TLS 库(例如蚂蚁集团开源的 Tongsuo 铜锁)并配套模块与配置,或者在前端部署国密网关设备完成加解密卸载。改造前先确认客户端能力与业务是否需要全站国密,避免改造完成却无人能连。
基本信息
| 适用平台 | Linux 上的 Nginx / OpenResty 或国密网关设备 |
|---|---|
| 常见方案 | Tongsuo 编译 Nginx、国密网关卸载、独立国密入口 |
| 证书要求 | 签名证书与加密证书的双证书体系 |
| 验证方式 | openssl s_client 或国密版客户端观察协商结果 |
| 注意事项 | 指令名与套件名随实现不同,以发行版与厂商文档为准 |
典型使用场景
- 密评整改:让对外服务的传输链路使用国密套件
- 行业要求:金融、政务类系统被要求使用国密算法
- 内网入口改造:先在高敏感链路试点,再考虑全站推广
- 网关卸载:业务不便改造时用前置设备统一处理
- 联调验证:用命令行确认协商结果确实是国密套件
落地路线
落地路线
路线 1:使用集成国密能力的 TLS 库(如 Tongsuo)编译 Nginx 或网关
路线 2:前置国密网关 / 负载均衡设备,由设备完成国密卸载
路线 3:暂不覆盖全站时,将高敏感链路接入独立国密入口
路线 4:内部调用链路先启用国密,对外保留兼容通道并受控
共同要求:双证书齐备、有效期监控、回退策略受控并留日志验证命令示例
验证命令示例
# 观察协商协议与套件(启用国密后输出含 SM 字样)
openssl s_client -connect demo.example.com:443 \
-servername demo.example.com </dev/null 2>/dev/null | grep -iE "cipher|protocol"
# 国密版实现通常还提供专用客户端或编译时开启的国密套件
# 具体参数随实现不同,务必以所用发行版与厂商手册为准方案对比
| 方案 | 适合场景 | 代价 |
|---|---|---|
| 自编译国密 TLS 库 | 可控性强,适合自有运维团队 | 升级与补丁需自行跟进 |
| 国密网关卸载 | 业务系统改造代价大时 | 引入额外设备与延迟 |
| 独立国密入口 | 只覆盖高敏感链路 | 多入口带来配置与证书管理复杂度 |
改造前先确认客户端能力:如果前端、App 与第三方对接方都不支持国密套件,需要设计明确且受控的降级策略,并记录在案。