国密SSL/TLS双证书自适应方案详解

协议详解 · 2026-07-05

概述

国密SSL/TLS双证书自适应方案是一种在企业级HTTPS部署中广泛采用的混合架构,旨在同时满足国密合规要求国际浏览器兼容性。该方案通过在同一服务器上配置两套不同的数字证书(国际证书用于RSA/ECC算法,国密证书用于SM2算法),根据客户端的能力自动协商并切换至合适的密码套件。

随着《网络安全法》修订版(2026年1月1日实施)和《关键信息基础设施安全保护条例》的深入推进,政务、金融、能源等关键行业对国密算法的应用要求日益严格。然而,Chrome、Safari、Firefox等国际主流浏览器默认不支持国密SSL/TLS协议(TLS_GM),导致单一国密证书无法满足所有用户的访问需求。双证书自适应方案由此成为平衡合规与兼容性的主流选择。

方案设计背景

1. 合规与兼容的双重压力

国密改造面临的核心矛盾是:

维度国密证书(SM2)国际证书(RSA/ECC)
合规性✅ 满足密评要求❌ 不满足国密要求
浏览器支持需国密浏览器插件✅ 全平台原生支持
移动端支持受限(需安装国密App)✅ iOS/Android原生支持
性能SM2签名/验签略快于RSA 2048RSA 2048性能成熟
证书颁发国密CA(如CFCA、BJCA)国际CA(如DigiCert、Let's Encrypt)

2. 双证书方案的演进

双证书方案经历了三个发展阶段:

第一阶段:端口分离(早期方案)

  • 国密HTTPS使用443端口(国际)+ 8443端口(国密)
  • 缺点:用户需手动输入不同端口,体验差
第二阶段:双证书同端口(当前主流)
  • 443端口同时配置国际证书和国密证书
  • 通过TLS握手阶段的ClientHello扩展协商决定使用哪套证书
  • 优点:用户无感知,URL不变
第三阶段:自适应智能切换(发展趋势)
  • 结合CDN/边缘网关的智能路由
  • 根据客户端指纹、UA字符串、IP地域等信息预判
  • 提前下发对应证书,减少握手往返

双证书自适应工作原理

1. TLS握手协商流程

2. 关键协商机制

#### 2.1 密码套件协商

TLS 1.2环境下,客户端通过CipherSuites扩展列出支持的密码套件。国密TLS扩展定义了以下密码套件标识符:

密码套件密钥交换认证对称加密MAC/哈希
TLS_SM4_GCM_SM3SM2SM2SM4-GCMSM3
TLS_SM4_CCM_SM3SM2SM2SM4-CCMSM3
TLS_SM4_CBC_SM3SM2SM2SM4-CBCSM3-HMAC
国际TLS密码套件:

密码套件密钥交换认证对称加密MAC/哈希
TLS_AES_256_GCM_SHA384ECDHEECDSA/RSAAES-256-GCMSHA-384
TLS_CHACHA20_POLY1305_SHA256ECDHEECDSA/RSAChaCha20-Poly1305SHA-256
#### 2.2 签名算法协商

客户端在signature_algorithms扩展中声明支持的签名算法。国密浏览器会在该扩展中包含:

  • sm2sig-sm3(SM2签名 + SM3哈希)
  • ecdsa_secp256r1_sha256(兼容国际)
  • rsa_pss_rsae_sha256(兼容国际)
国际浏览器不包含sm2sig-sm3,仅包含国际签名算法。

#### 2.3 扩展协商

国密TLS在标准TLS扩展基础上增加了两个关键扩展:

  • TLS_GM扩展(IANA注册为0xFF01):标识客户端支持国密TLS协议
  • sm2_certs_type扩展:声明客户端可接受的国密证书类型(服务器证书、签名证书、加密证书)

3. 服务端智能协商逻辑

Nginx等Web服务器通过以下逻辑判断使用哪套证书:

CODE
IF 客户端ClientHello包含 TLS_GM扩展 (0xFF01)
  AND 签名算法列表包含 sm2sig-sm3
THEN 使用国密SM2证书 + 国密密码套件
ELSE IF 客户端支持ECDHE + AES-GCM
THEN 使用国际RSA/ECC证书 + AES-GCM密码套件
ELSE 降级使用RSA 2048 + CBC密码套件(兼容旧客户端)

部署架构

1. Nginx双证书配置

环境要求:Nginx需编译国密模块(Tongsuo/GmSSL/BabaSSL),标准OpenSSL不支持国密密码套件。

2. 负载均衡器方案

#### HAProxy双证书配置

#### 七层代理方案(CDN/边缘网关)

对于大型互联网企业,通常在CDN或边缘网关层实现双证书自适应:

CDN边缘节点的协商逻辑:

  • 根据ClientHello中的扩展判断客户端类型
  • 对国密浏览器(360安全浏览器、奇安信可信浏览器、零信浏览器、红莲花浏览器等)返回国密证书
  • 对国际浏览器(Chrome、Firefox、Safari、Edge)返回国际证书
  • 对未知客户端,默认返回国际证书以保证最大兼容性

3. 双证书体系

国密SM2证书通常采用双证书体系(签名证书 + 加密证书),这是GM/T 0015-2023《信息技术 应用密码技术 证书格式规范》的要求:

证书类型用途密钥用途
签名证书TLS握手中的ServerKeyExchange签名DigitalSignature
加密证书密钥交换中的SM2加密KeyEncipherment
双证书的好处:
  • 密钥分离:签名密钥和加密密钥独立管理,密钥泄露不影响加密证书的保密性,符合 GM/T 0015-2023 的密钥分离。

4. 证书管理体系

国密双证书体系需要配套的管理流程:

  • 签名证书管理:签名证书用于身份认证和数字签名,需定期轮换(建议每年一次)
  • 加密证书管理:加密证书用于密钥封装,密钥泄露不影响历史通信的保密性
  • CA 证书链:国密 CA 证书需遵循 GM/T 0034-2014《Web 服务器证书技术规范》建立完整的信任链
  • CRL/OCSP:双证书体系下需分别维护签名证书和加密证书的吊销列表

客户端适配

国密浏览器支持情况

浏览器国密支持备注
360 安全浏览器✅ 原生支持国内用户量最大的国密浏览器
奇安信可信浏览器✅ 原生支持政务场景常用
零信浏览器✅ 原生支持基于 Chromium 的国密浏览器
红莲花浏览器✅ 原生支持军工领域专用
百度浏览器✅ 插件支持需安装国密插件
Chrome❌ 不支持需使用国密浏览器
Firefox❌ 不支持需使用国密浏览器
Safari❌ 不支持需使用国密浏览器
Edge❌ 不支持需使用国密浏览器

移动端适配

移动端国密支持相对滞后,主要方案包括:

  • 国密 App:在 App 内嵌国密 TLS 库(如 Tongsuo),实现国密 HTTPS
  • WebView 注入:通过自定义 WebView 注入国密 SSL 上下文
  • H5 降级:对非国密客户端降级为国际 TLS,后端统一处理

性能考量

握手性能对比

场景RSA-2048 握手SM2 握手性能差异
首次握手~50ms~30msSM2 更快
会话恢复~5ms~5ms基本相同
全握手(ECDHE)~80ms~60msSM2+ECDHE 更快
SM2 在相同安全强度下密钥长度更短(256 位 vs RSA 2048 位),因此在握手性能上优于 RSA。

计算资源消耗

操作CPU 占用内存占用
SM2 签名~2%~1MB
SM2 验签~1%~512KB
SM2 加密~3%~1MB
SM2 解密~2%~512KB
SM4-GCM 加密~0.5%(硬件加速)~256KB

常见问题

Q1: 双证书方案能否只用一套证书?

可以,但不符合 GM/T 0015-2023 的最佳实践。单证书方案在签名密钥泄露时会同时暴露加密密钥的风险,双证书通过密钥分离降低了整体风险。

Q2: 国密 TLS 是否支持前向保密(PFS)?

支持。国密 TLS 使用 SM2+SM4 结合 ECDHE 密钥协商时,可实现前向保密。但需注意:标准国密密码套件 TLS_SM4_GCM_SM3 使用的是静态 SM2 密钥交换,不支持 PFS。如需 PFS,需使用支持 ECDHE 的国密密码套件扩展。

Q3: 如何平滑迁移到国密?

  • 第一阶段:部署双证书方案,国密浏览器走国密通道,国际浏览器走国际通道
  • 第二阶段:逐步替换后端应用的国际密码库为国密实现
  • 第三阶段:推动客户端升级,扩大国密浏览器覆盖范围
  • 第四阶段:在合规要求的场景中强制使用国密算法

总结

国密 SSL/TLS 双证书自适应方案是当前平衡合规与兼容性的最优解。通过 TLS 握手阶段的智能协商,同一服务器可以同时服务于国密浏览器和国际浏览器,无需改变客户端 URL。

随着《网络安全法》合规要求的深化和国密浏览器的普及,双证书方案的过渡期价值将逐渐降低,但在可预见的未来,它仍将是政企系统国密改造的主流选择。

参考来源