国密双栈方案对比:Angie、Tengine、现网 nginx
记录时间:2026-11-05
对比对象:现网 nginx(106.109 实测)、Tengine 3.2.0-rc5(测试机四条 TLS 路径已验证,360 浏览器未验收)、Angie 1.12.4(测试机四条 TLS 路径与 360 浏览器均通过)
一、结论
自建改造路线里,Angie 综合最优:国密与会话保持都是内置能力,维护由 nginx 核心团队负责,GA 发布正常。Tengine 能实现同样效果,四条 TLS 路径已在测试机验证,但卡在 RC 版本和单点维护上,适合作为兜底。现网 nginx 无法提供国密,只能当回滚基线。
如果等保或密评要求密钥存放于密码机,三者都不满足,需要另评估前置国密网关。
二、三方基本情况
| 项 | 现网 nginx | Tengine | Angie |
|---|---|---|---|
| 版本 | gzeport/1.28.1(自定义构建) |
Tengine/3.2.0-rc5(nginx 1.31.5 基座) |
Angie/1.12.4(nginx 1.31.2 基座) |
| TLS 库 | OpenSSL 1.1.1w(静态编译) | Tongsuo 8.5.0(OpenSSL 3.5.4 基线) | Tongsuo 8.5.0(OpenSSL 3.5.4 基线) |
| 编译工具链 | gcc 4.8.5(CentOS 7) | gcc 7.3.0(Kylin V10) | gcc 7.3.0(Kylin V10) |
| 国密能力 | 无 | 有(enable_ntls + ssl_sign_certificate/ssl_enc_certificate) |
有(ssl_ntls on + 双参数 ssl_certificate) |
| 国密模块来源 | 无 | 需 --add-module=modules/ngx_tongsuo_ntls |
内置(编译加 --with-ntls) |
| 会话保持 | 第三方 nginx-sticky-module-1.2.6,裸 sticky; |
旧模块 session_sticky,需 --add-module |
内置 sticky cookie route; |
| 维护方 | 内部自定义构建 | 阿里社区,提交集中于单一维护者 | nginx 核心团队(VBart 等) |
| 最近 GA | 1.28.1(内部构建,时间待确认) | 3.1.0(2023-10),3.2.0 仍为 RC | 1.12.4(2026-10-16) |
| 测试机验证 | 未做国密验证 | 四条 TLS 路径通过;360 浏览器未验收(测试证书编码问题) | 四条 TLS 路径与 360 浏览器均通过 |
三、切换过程与门槛
| 步骤 | 现网 nginx | Tengine | Angie |
|---|---|---|---|
| 源码与依赖 | 不涉及 | Tongsuo + Tengine 源码;需 Text::Template | Tongsuo + Angie 源码;需 Text::Template |
| 编译参数 | 不涉及 | 两个 --add-module,--api=1.1.1 可选 |
一个 --with-ntls,--sbin-path 保持原名 |
| 配置改动(每个 server) | 无 | 加 enable_ntls on + 4 条证书指令 |
加 ssl_ntls on + 2 条双参数证书指令 |
| 会话保持改动 | 无 | 7 处 sticky; → session_sticky; |
7 处 sticky; → sticky cookie route; |
| 二进制名 | sbin/nginx |
默认 tengine,需软链或改脚本 |
可用 --sbin-path=sbin/nginx 保持原名 |
| 回滚 | 不需要 | 换回原 sbin/nginx 二进制 |
换回 sbin/nginx.old |
| 门槛评级 | 无(但无国密) | 中高(RC 版本 + 两模块 + 改名) | 中(内置能力 + 语法迁移) |
结论:两套改造的配置改动量接近,差别在编译依赖和版本成熟度。Angie 少一个模块依赖,二进制路径可以保持原名;Tengine 多一层旧模块挂载,且用的是 RC。
四、漏洞与更新频率
| 项 | 现网 nginx | Tengine | Angie |
|---|---|---|---|
| Web 服务器更新 | 1.28 稳定分支,主线已到 1.31.x,稳定分支补丁状态需向维护方确认 | 3.2.0 连续 RC(2026-08 至 09),无 GA;3.1.0 GA 停留在 2023-10 | 1.12.2 至 1.12.4 集中在 2026-09 至 10,GA 节奏正常 |
| TLS 库更新 | OpenSSL 1.1.1w(2023-09 最后版本,1.1.1 分支已 EOL) | Tongsuo 8.5.0(2026-09-30) | Tongsuo 8.5.0(2026-09-30) |
| 安全补丁来源 | 依赖内部构建方 | 依赖社区单一维护者跟进 nginx CVE | nginx 核心团队 + Tongsuo 社区 |
| 已知配置风险 | enable-weak-ssl-ciphers 开启,弱套件可用 |
同左,建议一并关闭 | 同左,建议一并关闭 |
| 更新评估 | 最差:TLS 库已停止维护,Web 服务器补丁依赖内部 | 中:开发活跃但无 GA,补丁回流看维护者 | 最好:GA 频繁,团队维护 |
Tengine 的 RC 不等于质量差,测试机四条 TLS 路径全部通过。但生产上出安全公告时,补丁只在 RC 分支,要么跟进 RC,要么等 GA,两条路都不好走。
Tongsuo 的节奏也要算进去:8.4.0 发布于 2023-12,8.5.0 到 2026-09 才发布,版本间隔偏长。选它就要接受国密库本身的更新节奏由社区决定。
五、影响程度
| 维度 | 现网 nginx | Tengine | Angie |
|---|---|---|---|
| 二进制 | 不变 | 整机替换(nginx 家族内) | 整机替换(nginx 家族内) |
| 配置文件 | 不变 | 每个对外 server 加 4 行 TLS,7 处 sticky 改名 | 每个对外 server 加 3 行 TLS,7 处 sticky 改语法 |
| 会话保持语义 | 不变 | 默认 cookie 名同为 route,实现不同,切换时一次性重新粘滞 |
同左,cookie 值格式为 sid,一次性重新粘滞 |
| 日志格式 | 不变 | 现有 aka_logs 不受影响 |
同左 |
| 回滚成本 | 无 | 换回旧二进制 + 旧配置,分钟级 | 同左 |
| 影响面评级 | 无 | 中(TLS 栈 + 会话保持 + 二进制) | 中(同上,模块依赖更少) |
两套方案的影响都集中在 TLS 栈和会话保持。日志、路由、upstream 结构不动,回滚都是换二进制加旧配置,分钟级可恢复。
六、匹配度
| 需求 | 现网 nginx | Tengine | Angie |
|---|---|---|---|
| SM2/RSA 同端口双栈 | 不支持 | 支持(四条 TLS 路径已验证) | 支持(四条 TLS 路径已验证) |
| 国密浏览器 TLCP 双证书 | 不支持 | 支持(签名 + 加密证书;360 浏览器未验收) | 支持(签名 + 加密证书,360 浏览器已通过) |
| 7 个 upstream 会话保持 | 支持(第三方模块) | 支持(旧模块,需改名) | 支持(内置,需改语法) |
| 130 个 server 块配置兼容 | 基准 | 兼容(nginx 语法) | 兼容(官方声明直接替代) |
| 现有日志格式 | 基准 | 兼容 | 兼容 |
| stream 层会话保持 | 未使用 | 内置可用(STREAM_UPSTREAM_STICKY=YES) |
内置可用(同左) |
| 等保配合度 | 低(无国密 + 弱套件) | 中(国密可用,版本非 GA) | 中高(国密可用,版本 GA) |
两个改造方案都基于 Tongsuo,对国密证书的要求相同:必须是 id-ecPublicKey + SM2 标准编码。Tongsuo 自带 openssl 生成的证书(公钥算法 OID 直接写成 SM2)会被 360 国密浏览器拒绝,表现为握手到 ServerKeyExchange 后回 alert 50。这一点不影响选型,但采购证书时要写进需求:签名与加密两张、标准编码、SAN 含域名。
七、综合评分
按本次验证结果打分,权重可按项目实际调整:
| 维度 | 权重 | 现网 nginx | Tengine | Angie |
|---|---|---|---|---|
| 国密能力 | 25 | 0 | 22 | 24 |
| 可维护性与漏洞更新 | 25 | 10 | 10 | 22 |
| 切换门槛 | 20 | 20(不切换) | 12 | 13 |
| 变更影响面 | 15 | 15(不变更) | 10 | 11 |
| 配置与功能匹配度 | 15 | 5 | 12 | 13 |
| 合计 | 100 | 50 | 66 | 83 |
现网 nginx 的”切换门槛”和”影响面”得分高,是因为它什么都不用改,但它不满足国密这个前提,所以总分低。如果只看”能满足国密的双栈方案”,实际是在 Tengine 66 分和 Angie 83 分之间选。
八、建议
- 首选 Angie 1.12.4:内置能力、维护正常、配置写法更简洁。测试机已完成四条 TLS 路径与 360 浏览器验收,迁移到生产的增量工作主要是 sticky 语法和运行用户。
- Tengine 作为兜底:如果 Angie 在某些边缘配置上出现兼容问题,Tengine 的验证记录和命令可以直接复用,切换成本低。
- 现网 nginx 保留为回滚基线:改造不动它的配置目录,出问题时切回原二进制即可。
- 前置条件先确认:等保是否强制密钥进密码机;厂家 SM2 证书是否含签名与加密两张及完整链;生产架构与源码获取方式;变更窗口。
- 迁移注意三点:
sticky;到sticky cookie route;的语法变化会带来一次性会话重粘滞;运行用户从 root 切 gzapps 要同步改配置和目录属主;弱加密套件建议关闭,但要在灰度期观察老客户端。
九、参考资料
- Angie 1.12.4 发布
- Tengine 3.2.0-rc5 发布
- Tongsuo 8.5.0 发布
- Angie ssl 模块(ssl_ntls)
- Angie upstream 模块(sticky)
- 本机验证记录:
麒麟V10部署Angie与铜锁国密双栈验证.md、麒麟V10部署Tengine与铜锁国密双栈验证.md