国密(SM2)与国际(RSA)双证书模式的核心在于 “双轨制” 部署与 “智能适配” 。它通过在服务器上同时配置两套证书,并依据客户端(浏览器)的支持能力自动选择最优的加密通道,从而在满足国家合规要求的同时,确保全球用户的访问体验。
一、核心概念与驱动:为何需要“双轨制”?
双证书模式:指在单一服务器上同时部署符合国家标准的国密SM2证书和全球通用的RSA/ECC国际算法证书。
智能适配:服务器能自动识别并协商加密算法。国密浏览器访问时,优先建立SM2加密通道;而国际浏览器则无缝切换到RSA通道。
这一模式主要受到两大驱动力的影响:
合规驱动:我国《密码法》等法规明确要求关键信息基础设施、金融、政务等领域完成密码技术的国产化改造。
兼容驱动:Chrome、Safari等主流浏览器本身不支持国密算法。双证书模式是同时满足合规和全球访问的现实解决方案。
二、系统架构与流程
一个典型的双证书系统包含以下几个关键组件:
服务端:Web服务器(如Nginx/Apache)需集成国密支持组件(如铜锁Tongsuo密码库)。
客户端:用户的浏览器。国内生态如奇安信、360等可原生支持国密;国际浏览器则依赖RSA证书进行安全通信。
证书:需要同时申请并配置国密SM2证书和国际RSA/ECC证书。
其智能适配的核心流程如下:
1. 发起连接:客户端(浏览器)向服务器发起HTTPS连接请求。
2. 算法协商:服务器通过SSL/TLS握手协议与客户端协商,自动检测其对算法的支持情况。
3. 分发证书:基于协商结果,服务器智能地分发对应的证书链。
国密通道:若客户端支持国密,使用SM2/SM3/SM4算法,并优先建立国密SSL/TLS协议(GMSSL)通道。
国际通道:若客户端不支持国密,则自动回退至RSA/ECC算法和标准TLS协议。
4. 建立加密链路:使用协商确定的算法,在客户端与服务器之间建立安全的加密通信链路。
三、部署方案:三种路径
部署双证书方案主要有三种路径,适用性有所不同:
Web服务器集成(推荐用于新项目):直接在Nginx或Apache等Web服务器上集成国密支持组件。
SSL网关/反向代理(推荐用于现有系统):在原Web服务器前部署独立的SSL网关,业务系统几乎无需改造。
负载均衡器集成:在云平台的负载均衡(LB)或CDN服务上直接配置双证书,集成度最高,但灵活性相对受限。
四、智能适配原理:SNI 与算法协商
智能适配主要依赖TLS/SSL协议中的 服务器名称指示(SNI) 扩展和 加密套件(Cipher Suite) 协商机制实现。当国密浏览器发起连接时,其Client Hello消息中会携带国密专用的加密套件(如`ECC-SM4-CBC-SM3`),服务器收到后会优先选择国密证书;若收到的Client Hello中只包含国际通用套件,则自动切换为RSA证书。
五、主流国密浏览器生态
以下浏览器是国密生态的核心支持者:
浏览器名称 开发厂商 国密支持
360安全浏览器 奇虎360 原生支持SM2/RSA双算法自适应
奇安信可信浏览器 奇安信 原生支持国密算法及双证书切换
红莲花安全浏览器 海泰方圆 原生支持国密SSL双向链接
零信浏览器 零信技术 全面支持国密双证书和单证书
密信浏览器 密信科技 同时支持国密算法和国际算法
赢达信速龙安全浏览器 赢达信 支持国密HTTPS加密
国际浏览器如Chrome、Firefox等,通过该方案也可以实现RSA兼容访问。
六、证书管理:申请与自动化
申请:可向沃通(WoTrus)、天威诚信(iTrusChina)、CFCA等合规的CA机构同时申请SM2和RSA双证书。
自动化:建议使用国密ACME协议或零信国密HTTPS加密自动化网关等网关类产品,实现证书的自动化申请、部署和续期,避免人工管理。
七、部署实战与配置详解
这里以最常用的 Nginx 和 Tengine 为例进行说明。
关键工具:Tongsuo(铜锁)密码库
无论是Nginx还是Tengine,核心都离不开一个支持国密算法的底层密码库。其中,由蚂蚁集团开源的 **铜锁(Tongsuo) 是一个被广泛采用的解决方案。它提供了国密算法的完整实现,并已与Nginx、Tengine等主流Web服务器完成适配。
方案一:Nginx + Tongsuo
这是最通用和灵活的手动集成方案,步骤如下:
1. 环境准备:准备一台Linux服务器,确保其可以编译安装软件。
2. 编译安装 Tongsuo:从GitHub获取Tongsuo源码,编译并安装到系统。
3. 编译安装 Nginx:下载Nginx源码,在编译时通过 `--with-openssl` 参数指定使用已安装的Tongsuo源码目录,使Nginx获得国密能力。
4. 配置文件 (nginx.conf):在`server`块中,关键的配置如下:
nginx
server {
listen 443 ssl;
server_name your-domain.com;
# 关键:启用国密NTLS支持
enable_ntls on;
# 配置国际RSA证书(兼容国际浏览器)
ssl_certificate /path/to/rsa_cert.pem;
ssl_certificate_key /path/to/rsa_key.pem;
# 配置国密双证书(签名证书 + 加密证书)
ssl_sign_certificate /path/to/sm2_sign_cert.pem;
ssl_sign_certificate_key /path/to/sm2_sign_key.pem;
ssl_enc_certificate /path/to/sm2_enc_cert.pem;
ssl_enc_certificate_key /path/to/sm2_enc_key.pem;
# 配置加密套件,将国密套件放在前面
ssl_ciphers ECC-SM4-CBC-SM3:ECDHE-SM4-CBC-SM3:RSA-SM4-CBC-SM3:...;
# 其他常规SSL配置...
}
方案二:Tengine + Tongsuo
如果使用阿里云的Tengine,部署会更简单,因为Tengine已经集成了对Tongsuo的支持。主要步骤为:
1. 安装Tongsuo:同样需要先安装Tongsuo密码库。
2. 安装Tengine:直接安装或从源码编译Tengine,其构建脚本能自动检测并使用Tongsuo。
3. 配置文件:配置方法与Nginx方案完全相同,如上所示。
注意事项
证书文件格式:确保所有私钥文件为未加密的PEM格式。
根证书信任:确保国密浏览器已预置了签发您国密证书的CA根证书。
性能考量:SM2算法计算速度更快,但引入双证书会增加握手时的计算开销。
降级回退:务必测试并确保在国密证书异常时,系统能正常降级到RSA算法,保障业务连续性。国密(SM2)与国际(RSA)双证书模式的核心在于 “双轨制” 部署与 “智能适配” 。它通过在服务器上同时配置两套证书,并依据客户端(浏览器)的支持能力自动选择最优的加密通道,从而在满足国家合规要求的同时,确保全球用户的访问体验。
八、核心概念与驱动:为何需要“双轨制”?
双证书模式:指在单一服务器上同时部署符合国家标准的国密SM2证书和全球通用的RSA/ECC国际算法证书。
智能适配:服务器能自动识别并协商加密算法。国密浏览器访问时,优先建立SM2加密通道;而国际浏览器则无缝切换到RSA通道。
这一模式主要受到两大驱动力的影响:
合规驱动:我国《密码法》等法规明确要求关键信息基础设施、金融、政务等领域完成密码技术的国产化改造。
兼容驱动:Chrome、Safari等主流浏览器本身不支持国密算法。双证书模式是同时满足合规和全球访问的现实解决方案。
九、系统架构与流程
一个典型的双证书系统包含以下几个关键组件:
服务端:Web服务器(如Nginx/Apache)需集成国密支持组件(如铜锁Tongsuo密码库)。
客户端:用户的浏览器。国内生态如奇安信、360等可原生支持国密;国际浏览器则依赖RSA证书进行安全通信。
证书:需要同时申请并配置国密SM2证书和国际RSA/ECC证书。
其智能适配的核心流程如下:
1. 发起连接:客户端(浏览器)向服务器发起HTTPS连接请求。
2. 算法协商:服务器通过SSL/TLS握手协议与客户端协商,自动检测其对算法的支持情况。
3. 分发证书:基于协商结果,服务器智能地分发对应的证书链。
国密通道:若客户端支持国密,使用SM2/SM3/SM4算法,并优先建立国密SSL/TLS协议(GMSSL)通道。
国际通道:若客户端不支持国密,则自动回退至RSA/ECC算法和标准TLS协议。
4. 建立加密链路:使用协商确定的算法,在客户端与服务器之间建立安全的加密通信链路。
十、部署方案:三种路径
部署双证书方案主要有三种路径,适用性有所不同:
Web服务器集成(推荐用于新项目):直接在Nginx或Apache等Web服务器上集成国密支持组件。
SSL网关/反向代理(推荐用于现有系统):在原Web服务器前部署独立的SSL网关,业务系统几乎无需改造。
负载均衡器集成:在云平台的负载均衡(LB)或CDN服务上直接配置双证书,集成度最高,但灵活性相对受限。
十一、智能适配原理:SNI 与算法协商
智能适配主要依赖TLS/SSL协议中的 **服务器名称指示(SNI) 扩展和 加密套件(Cipher Suite) 协商机制实现。当国密浏览器发起连接时,其Client Hello消息中会携带国密专用的加密套件(如`ECC-SM4-CBC-SM3`),服务器收到后会优先选择国密证书;若收到的Client Hello中只包含国际通用套件,则自动切换为RSA证书。
十二、主流国密浏览器生态
以下浏览器是国密生态的核心支持者:
浏览器名称 开发厂商 国密支持
360安全浏览器 奇虎360 原生支持SM2/RSA双算法自适应
奇安信可信浏览器 奇安信 原生支持国密算法及双证书切换
红莲花安全浏览器 海泰方圆 原生支持国密SSL双向链接
零信浏览器 零信技术 全面支持国密双证书和单证书
密信浏览器 密信科技 同时支持国密算法和国际算法
赢达信速龙安全浏览器 赢达信 支持国密HTTPS加密
国际浏览器如Chrome、Firefox等,通过该方案也可以实现RSA兼容访问。
十三、证书管理:申请与自动化
申请:可向沃通(WoTrus)、天威诚信(iTrusChina)、CFCA等合规的CA机构同时申请SM2和RSA双证书。
自动化:建议使用国密ACME协议或**零信国密HTTPS加密自动化网关**等网关类产品,实现证书的自动化申请、部署和续期,避免人工管理。
十四、部署实战与配置详解
这里以最常用的 Nginx 和 Tengine 为例进行说明。
关键工具:Tongsuo(铜锁)密码库
无论是Nginx还是Tengine,核心都离不开一个支持国密算法的底层密码库。其中,由蚂蚁集团开源的 铜锁(Tongsuo) 是一个被广泛采用的解决方案。它提供了国密算法的完整实现,并已与Nginx、Tengine等主流Web服务器完成适配。
方案一:Nginx + Tongsuo
这是最通用和灵活的手动集成方案,步骤如下:
1. 环境准备:准备一台Linux服务器,确保其可以编译安装软件。
2. 编译安装 Tongsuo:从GitHub获取Tongsuo源码,编译并安装到系统。
3. 编译安装 Nginx:下载Nginx源码,在编译时通过 `--with-openssl` 参数指定使用已安装的Tongsuo源码目录,使Nginx获得国密能力。
4. 配置文件 (nginx.conf):在`server`块中,关键的配置如下:
nginx
server {
listen 443 ssl;
server_name your-domain.com;
# 关键:启用国密NTLS支持
enable_ntls on;
# 配置国际RSA证书(兼容国际浏览器)
ssl_certificate /path/to/rsa_cert.pem;
ssl_certificate_key /path/to/rsa_key.pem;
# 配置国密双证书(签名证书 + 加密证书)
ssl_sign_certificate /path/to/sm2_sign_cert.pem;
ssl_sign_certificate_key /path/to/sm2_sign_key.pem;
ssl_enc_certificate /path/to/sm2_enc_cert.pem;
ssl_enc_certificate_key /path/to/sm2_enc_key.pem;
# 配置加密套件,将国密套件放在前面
ssl_ciphers ECC-SM4-CBC-SM3:ECDHE-SM4-CBC-SM3:RSA-SM4-CBC-SM3:...;
# 其他常规SSL配置...
}
方案二:Tengine + Tongsuo
如果使用阿里云的Tengine,部署会更简单,因为Tengine已经集成了对Tongsuo的支持。主要步骤为:
1. 安装Tongsuo:同样需要先安装Tongsuo密码库。
2. 安装Tengine:直接安装或从源码编译Tengine,其构建脚本能自动检测并使用Tongsuo。
3. 配置文件:配置方法与Nginx方案完全相同,如上所示。
注意事项
证书文件格式:确保所有私钥文件为未加密的PEM格式。
根证书信任:确保国密浏览器已预置了签发您国密证书的CA根证书。
性能考量:SM2算法计算速度更快,但引入双证书会增加握手时的计算开销。
降级回退:务必测试并确保在国密证书异常时,系统能正常降级到RSA算法,保障业务连续性。