国密 (SM2/SM3/SM4) 配置与验证
背景
国密算法是由国家密码管理局制定的一系列密码算法标准,包括:
| 算法 | 用途 | 对应国际算法 |
|---|---|---|
| SM2 | 非对称加密(签名与密钥交换) | RSA / ECDSA |
| SM3 | 消息摘要(哈希) | SHA-256 |
| SM4 | 对称加密 | AES |
TLCP(Transport Layer Cryptography Protocol,传输层密码协议)是基于国密算法的 SSL/TLS 等价协议,用于在客户端和服务器之间建立国密加密通道。矩尺平台支持 TLCP 协议的国密 SSL 卸载,使您可以使用国密证书对外提供 HTTPS 或 TCP+TLS 类型的加密服务。
使用场景: 政务系统、金融系统、关键信息基础设施等有国产密码合规要求的业务场景。
整体流程
配置国密 HTTPS 虚拟服务与普通 HTTPS 的流程类似,但有几个关键区别:
第一步:准备国密测试浏览器 → 普通浏览器不支持国密协议
第二步:上传国密证书与私钥 → 需要签名证书和加密证书两组(目前版本必须同时上传)
第三步:上传 TLS 证书(可选)→ 兼容非国密浏览器
第四步:创建国密 SSL 策略 → 使用系统内置的"客户端国密SSL服务策略模板"
第五步:创建 HTTPS/TCP+TLS 虚拟服务 → 关联国密 SSL 策略
第六步:验证 → 使用国密浏览器 + Wireshark 抓包双重验证前提条件:您已了解普通 HTTPS 虚拟服务的创建流程(参见 快速创建HTTPS虚拟服务),本章将重点介绍国密特有的差异部分。
第一步:准备国密测试浏览器
由于主流浏览器(Chrome、Firefox、Edge、Safari)目前均不支持国密 TLCP 协议,您需要使用专门的国密浏览器进行测试。推荐以下两种:
| 浏览器 | 平台 | 费用 | 协议协商机制 |
|---|---|---|---|
| 密信浏览器 | Windows | 永久免费 | 首次使用国密 0x0101 协议访问,失败后会降级到 TLS 1.2。此后对该站点将固定使用 TLS 1.2(注意这个特性) |
| 360 企业安全浏览器 | Windows / Linux | 3 个月免费试用 | 每次访问任何站点都会先尝试国密协议,失败后再回退到 TLS 协议,容错性更高 |
- 密信浏览器下载:https://www.mesigndoc.com/zh-cn/browser/index.html
- 360 企业浏览器下载:https://browser.360.net/entStandAloneDownload.html
推荐
测试阶段建议使用 360 企业安全浏览器。因为密信浏览器首次失败后会永久降级,一旦测试过程中国密握手失败,后续再访问该站点就不再尝试国密了,可能会误判测试结果。
第二步:上传国密证书与私钥
关于国密双证书
与普通 TLS 只需要一组证书不同,国密 TLCP 协议要求两组证书:
| 证书类型 | 文件示例 | 作用 |
|---|---|---|
| SS(签名证书) | SS.crt + SS.key | 用于签名和身份认证(SM2 签名算法) |
| SE(加密证书) | SE.crt + SE.key | 用于密钥交换和加密(SM2 加密算法) |
重要
截止 4.0.6 版本,必须两组证书同时上传,且 SS 在前、SE 在后(在 SSL 策略中配置服务器证书时的顺序)。只配一组证书将导致握手失败。
上传操作
在菜单【平台系统 → SSL 证书管理】中,分别上传两组证书:
- 上传 SS 签名证书:点击"新增",证书名称填写
gm-ss-cert,私钥名称填写gm-ss-cert(同名),粘贴签名证书和对应私钥内容 - 上传 SE 加密证书:再次点击"新增",证书名称填写
gm-se-cert,私钥名称填写gm-se-cert(同名),粘贴加密证书和对应私钥内容

证书名称需同名
每对证书与私钥的名称必须保持相同(如 gm-ss-cert 证书配 gm-ss-cert 私钥),平台通过名称关联证书与私钥。
第三步:上传 TLS 证书(可选但推荐)
为了让不支持国密的普通浏览器(Chrome、Edge 等)也能访问您的服务,建议同时上传一套标准 TLS 证书(RSA 或 ECDSA)。
- 如果只有国密证书:普通浏览器访问时页面返回协议错误(无法建立 TLS 握手)
- 如果同时配置国密 + TLS 证书:国密浏览器走国密通道,普通浏览器走 TLS 通道,互不干扰
上传方式与第二步相同,证书名称例如 tls-rsa-cert。
第四步:创建国密 SSL 策略
在菜单【SLB 本地负载 → 策略配置 → SSL 策略】中,切换到"客户端 SSL 策略"页签,点击"新增"。
使用国密策略模板
在新增页面中,选择策略模板为 "客户端国密SSL服务策略模板"。该模板已预置了国密所需的安全套件(如 ECC-SM2-SM4-CBC-SM3 等)和 TLS 1.2/1.3 协议版本。

配置服务器证书
关键操作:在"服务器证书"部分,按顺序添加证书:
- 首先添加 SS 签名证书:选择
gm-ss-cert - 再添加 SE 加密证书:选择
gm-se-cert - (可选)添加 TLS 证书:如果执行了第三步,选择
tls-rsa-cert
证书顺序很重要:SS 在前,SE 在后。其他配置项(安全套件、Session 缓存等)使用模板默认值即可,不必修改。
第五步:创建虚拟服务
HTTPS 类型虚拟服务
创建流程与普通 HTTPS 虚拟服务一致(参见 快速创建HTTPS虚拟服务),关键配置:
| 配置项 | 设置 |
|---|---|
| 协议 | HTTPS |
| 监听地址和端口 | 例如 10.1.9.117:443 |
| SSL 客户端策略 | 选择第四步创建的国密 SSL 策略 |
| 默认分发规则 → 处理方式 | HTTP 代理(推荐,解密后明文转发后端)或 静态资源(用于快速验证) |
TCP+TLS 类型虚拟服务
如果您的业务不是 HTTP 协议(如数据库、自定义 TCP 协议),可以使用 TCP+TLS 类型,同样支持国密:
| 配置项 | 设置 |
|---|---|
| 协议 | TCP+TLS |
| 监听地址和端口 | 例如 10.1.9.117:8443 |
| SSL 客户端策略 | 选择第四步创建的国密 SSL 策略 |
| 默认分发规则 → 处理方式 | TCP 代理 |
| 服务器池 | 选择后端服务器池 |
国密 SSL 策略在 TCP+TLS 和 HTTPS 下是通用的,不依赖上层协议。
为便于快速验证,建议先在默认分发规则中配置一个静态资源,通过浏览器直接访问静态页面来确认国密握手成功。
配置完成后,点击"确认"并执行变更使配置生效。
第六步:验证
验证一:国密浏览器访问
使用密信浏览器或 360 企业安全浏览器访问 https://<虚拟服务IP>:<端口>/:
360 企业浏览器: 点击地址栏左侧的锁图标,在安全连接信息中可以看到**"国密"**字样,表示使用了国密 TLCP 协议。
密信浏览器: 点击地址栏左侧的锁图标 → 查看证书详情,确认证书信息为上传的国密 SS 证书,表示国密握手成功。
验证二:普通浏览器访问(区分是否配了 TLS 证书)
- 如果同时配置了国密 + TLS 证书:使用 Chrome 访问,页面正常显示,但点击锁图标查看证书详情,显示的应是 TLS 证书 B(非国密证书),说明普通浏览器走了 TLS 通道。
- 如果只配置了国密证书:使用 Chrome 访问,页面应返回协议错误(
ERR_SSL_PROTOCOL_ERROR或类似错误),因为 Chrome 不支持 TLCP 协议。
验证三:Wireshark 抓包(最可靠)
Wireshark 抓包是验证国密是否真正生效的最可靠方式:
- 在客户端或服务端启动 Wireshark,抓取访问
https://<IP>:<端口>的流量 - 过滤
ip.addr == <虚拟服务IP> and tcp.port == <端口> - 找到 Server Hello 报文,检查 TLS/SSL 握手信息:
- 国密成功:Server Hello 中的协议版本显示为 TLCP(或 Cipher Suite 为
ECC-SM2-SM4-CBC-SM3等国密套件) - 国密失败(降级为普通 TLS):Server Hello 中显示 TLS 1.2 或 TLS 1.3,Cipher Suite 为国际算法套件
- 国密成功:Server Hello 中的协议版本显示为 TLCP(或 Cipher Suite 为
验证四:gmssl 命令行工具
如果您有 gmssl 命令行工具(国密版本的 OpenSSL),可以直接模拟国密客户端握手:
gmssl s_client -connect <虚拟服务IP>:<端口> -cipher ECC-SM2-SM4-CBC-SM3握手成功则表明国密配置正确。
常见问题
Q:为什么配置了国密证书后 Chrome 打不开页面?
A:这是正常现象。Chrome 不支持国密 TLCP 协议。如果只配了国密证书,Chrome 无法完成握手。解决方案是同时配置一套标准 TLS 证书(第三步),这样 Chrome 走 TLS 通道,国密浏览器走 TLCP 通道。
Q:密信浏览器第一次能打开国密页面,第二次打开变成 TLS 了?
A:这是密信浏览器的特性(见第一步的提示)。它首次失败后会永久降级。建议改用 360 企业浏览器进行测试。
Q:国密证书和 TLS 证书可以共用同一个虚拟服务吗?
A:可以,而且推荐这样做。在 SSL 策略中同时配置国密证书(SS + SE)和 TLS 证书后,平台会自动根据客户端支持的协议协商:客户端发送 TLCP 握手 → 走国密通道;客户端发送 TLS 握手 → 走 TLS 通道。
Q:TCP+TLS 类型的虚拟服务如何验证国密?
A:TCP+TLS 不能用浏览器直接访问。您需要使用 gmssl s_client 或 Wireshark 抓包来验证。方法同第六步的验证三、四。
更多 SSL 策略配置参数的含义请参考 SSL 策略用户手册 和 快速创建HTTPS虚拟服务。
