Skip to content

国密 (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 / Linux3 个月免费试用每次访问任何站点都会先尝试国密协议,失败后再回退到 TLS 协议,容错性更高

推荐

测试阶段建议使用 360 企业安全浏览器。因为密信浏览器首次失败后会永久降级,一旦测试过程中国密握手失败,后续再访问该站点就不再尝试国密了,可能会误判测试结果。

第二步:上传国密证书与私钥

关于国密双证书

与普通 TLS 只需要一组证书不同,国密 TLCP 协议要求两组证书

证书类型文件示例作用
SS(签名证书)SS.crt + SS.key用于签名和身份认证(SM2 签名算法)
SE(加密证书)SE.crt + SE.key用于密钥交换和加密(SM2 加密算法)

重要

截止 4.0.6 版本,必须两组证书同时上传,且 SS 在前、SE 在后(在 SSL 策略中配置服务器证书时的顺序)。只配一组证书将导致握手失败。

上传操作

在菜单【平台系统 → SSL 证书管理】中,分别上传两组证书:

  1. 上传 SS 签名证书:点击"新增",证书名称填写 gm-ss-cert,私钥名称填写 gm-ss-cert(同名),粘贴签名证书和对应私钥内容
  2. 上传 SE 加密证书:再次点击"新增",证书名称填写 gm-se-cert,私钥名称填写 gm-se-cert(同名),粘贴加密证书和对应私钥内容

SSL证书配置

证书名称需同名

每对证书与私钥的名称必须保持相同(如 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 协议版本。

客户端SSL策略配置

配置服务器证书

关键操作:在"服务器证书"部分,按顺序添加证书:

  1. 首先添加 SS 签名证书:选择 gm-ss-cert
  2. 再添加 SE 加密证书:选择 gm-se-cert
  3. (可选)添加 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 抓包是验证国密是否真正生效的最可靠方式:

  1. 在客户端或服务端启动 Wireshark,抓取访问 https://<IP>:<端口> 的流量
  2. 过滤 ip.addr == <虚拟服务IP> and tcp.port == <端口>
  3. 找到 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 为国际算法套件

验证四:gmssl 命令行工具

如果您有 gmssl 命令行工具(国密版本的 OpenSSL),可以直接模拟国密客户端握手:

bash
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虚拟服务