GM/T 0024-2023 SSL VPN 技术规范:国密远程访问安全架构与算法要求
概述
SSL VPN(Secure Sockets Layer Virtual Private Network)是基于传输层安全协议构建的虚拟专用网技术,通过密码学手段在公共网络上建立加密隧道,为远程用户或分支机构提供安全的网络接入能力。
GM/T 0024-2023《SSL VPN 技术规范》于 2023-12-04 发布、2024-06-01 实施,是国密 SSL VPN 领域的核心技术标准。该标准与配套产品规范 GM/T 0025-2023《SSL VPN 网关产品规范》共同构成了国密 SSL VPN 的完整标准体系。
标准的核心设计原则是在 TLS 1.3 协议框架内完整嵌入国密算法族,确保远程访问通道的保密性、完整性、身份鉴别和抗重放保护满足等保 2.0 和密评要求。
标准体系结构
配套标准关系
| 标准编号 | 标准名称 | 定位 |
|---|---|---|
| GM/T 0024-2023 | SSL VPN 技术规范 | 协议层技术要求,定义密码算法、握手流程、消息格式 |
| GM/T 0025-2023 | SSL VPN 网关产品规范 | 产品层功能要求,定义网关功能、性能、安全等级 |
| GM/T 0054-2018 | 信息系统密码应用基本要求 | 合规评估依据,定义 SSL VPN 系统的密码应用等级要求 |
| GM/T 0028-2014 | 密码模块安全技术要求 | 密码模块安全等级评估依据 |
与 IPSec VPN 的对比
GM/T 0024(SSL VPN)与 GM/T 0022(IPSec VPN)是国密 VPN 的两大技术路线,适用场景不同:
| 对比维度 | GM/T 0024 SSL VPN | GM/T 0022 IPSec VPN |
|---|---|---|
| 工作层次 | 传输层/应用层 | 网络层 |
| 协议基础 | TLS 1.3 扩展 | IKEv2 + AH/ESP |
| 适用场景 | 远程个人访问、移动办公 | 站点到站点、整网连通 |
| 客户端要求 | 轻量级(浏览器/App) | 需配置 VPN 客户端 |
| 穿透 NAT | 天然支持 | 需 NAT-T 扩展 |
| 典型部署 | 政务外网远程接入、企业 VPN | 分支互联、数据中心互通 |
协议架构
整体框架
SSL VPN 的协议架构以 TLS 1.3 为核心,通过扩展字段注入国密算法标识:
┌─────────────────────────────────────────────┐
│ SSL VPN 协议栈 │
├─────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ 应用层协议适配 │ │
│ │ (HTTP/HTTPS、SSH、数据库、文件传输) │ │
│ └─────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ TLS 1.3 国密扩展层 │ │
│ │ │ │
│ │ · 密码套件协商(SM2/SM3/SM4) │ │
│ │ · 扩展字段定义(SM2 证书、国密 OID) │ │
│ │ · 密钥交换算法(SM2-KE、SM2 签名) │ │
│ │ · 伪随机函数(SM3-HMAC) │ │
│ └─────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ 底层传输层 │ │
│ │ (TCP/DTLS) │ │
│ └─────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────┘国密 OID 注册
GM/T 0024-2023 定义了以下关键 OID,用于在 TLS 扩展中标识国密算法:
| OID | 含义 | 用途 |
|---|---|---|
| 1.2.156.10197.1.301 | SM2 曲线参数 | 椭圆曲线标识 |
| 1.2.156.10197.1.501 | SM2WithSM3 签名算法 | 签名算法标识 |
| 1.2.156.10197.1.401 | SM2 密钥交换算法 | KEM 标识 |
| 1.2.156.10197.4.1 | SM4 分组密码 | 对称加密标识 |
| 1.2.156.10197.3.1 | SM3 杂凑算法 | 哈希标识 |
注意:上述 OID 定义于 GM/T 0002-2012《SM2 椭圆曲线公钥密码算法》和 GB/T 32905-2016,GM/T 0024-2023 引用这些 OID 而非重新定义。
密码套件要求
强制密码套件
GM/T 0024-2023 定义了以下国密 TLS 密码套件(采用 IANA 编号风格表示):
| 套件标识 | 密钥交换 | 认证 | 对称加密 | MAC | 说明 |
|---|---|---|---|---|---|
| TLS_SM4_GCM_SM3 | SM2-KE | SM2 签名 | SM4-GCM | SM3 | 推荐套件,AEAD 模式 |
| TLS_SM4_CBC_SM3 | SM2-KE | SM2 签名 | SM4-CBC | HMAC-SM3 | 兼容套件,Encrypt-then-MAC |
| TLS_SM4_CTR_SM3 | SM2-KE | SM2 签名 | SM4-CTR | HMAC-SM3 | 流模式,适合高性能场景 |
密码套件协商流程
TLS 1.3 的密码套件协商发生在 ClientHello 和 ServerHello 消息中:
Client Server
│ │
│─── ClientHello ────────────────►│
│ · supported_groups: sm2_curve │
│ · key_share: SM2 public key │
│ · signature_algorithms: │
│ sm2_sm3 │
│ · supported_formats: │
│ x509, raw │
│ │
│◄──── ServerHello ──────────────│
│ · cipher_suite: TLS_SM4_GCM_SM3
│ · key_share: SM2 public key │
│ · server_extensions... │
│ │
│─── EncryptedExtensions ────────►│
│─── Certificate ────────────────►│
│ · SM2 服务器证书 │
│ · 可选:SM2 客户端证书 │
│─── CertificateVerify ──────────►│
│ · SM2WithSM3 签名 │
│─── Finished ───────────────────►│
│ │
│◄──── Finished ─────────────────│
│ │
│ [后续应用数据传输] │双证书支持
GM/T 0024-2023 明确要求支持双证书机制,即服务器同时持有:
- 签名证书:用于身份认证和签名验证
- 密钥交换证书:用于密钥协商
认证机制
服务器认证
服务器认证采用 SM2 数字签名证书,认证流程如下:
- 客户端发送 ClientHello,包含支持的签名算法列表
- 服务器返回 ServerHello,选择 SM2WithSM3
- 服务器发送 Certificate 消息,包含 SM2 服务器证书
- 服务器发送 CertificateVerify 消息,使用 SM2WithSM3 对握手-hash 进行签名
- 客户端验证证书链,确认服务器身份
客户端认证
客户端认证采用可选的双向认证模式,支持以下认证方式:
| 认证方式 | 实现机制 | 适用场景 |
|---|---|---|
| SM2 证书认证 | X.509 v3 证书 + SM2WithSM3 签名 | 高安全等级场景 |
| SM2 智能密码钥匙 | PKCS#11 接口调用 | 政务、金融场景 |
| SM2 预共享密钥 | PSK 扩展字段 | 内部系统互访 |
| SM2 身份标识 | 标识密码认证 | 大规模终端接入 |
双向认证的完整握手
Client Server
│ │
│─── ClientHello ────────────────►│
│ · client_auth: required │
│─── ServerHello ────────────────►│
│ · server_auth: required │
│─── CertificateRequest ─────────►│
│ · types: sm2_sign │
│ · trust_anchors: [...] │
│─── Certificate + Verify ───────►│
│ │
│─── Certificate + Verify ───────►│
│ · 客户端 SM2 证书 + 签名 │
│─── Finished ───────────────────►│
│ │
│◄──── Finished ─────────────────│
│ │
│ [双向认证成功] │密钥管理
密钥派生
GM/T 0024-2023 规定 TLS 1.3 的密钥派生函数(HKDF)使用 SM3 作为伪随机函数:
HKDF-SM3(salt, IKM) = HMAC-SM3(salt, IKM) || HMAC-SM3(salt, prev || IKM || 0x01)其中:
salt:握手过程中协商的随机值IKM:输入密钥材料(来自密钥交换)prev:前一次 HKDF 的输出(首次为空)
会话密钥体系
SSL VPN 会话建立后,生成以下密钥:
| 密钥类型 | 用途 | 长度 | 算法 |
|---|---|---|---|
| client_handshake_traffic_secret | 客户端握手加密 | 32 字节 | SM3-HMAC |
| server_handshake_traffic_secret | 服务端握手加密 | 32 字节 | SM3-HMAC |
| client_application_traffic_secret | 客户端应用数据加密 | 32 字节 | SM3-HMAC |
| server_application_traffic_secret | 服务端应用数据加密 | 32 字节 | SM3-HMAC |
| client_exporter_master_secret | 密钥导出 | 32 字节 | SM3-HMAC |
前向保密
GM/T 0024-2023 要求 SSL VPN 必须支持前向保密(Forward Secrecy),通过 SM2 密钥交换实现:
- 每次握手生成新的 SM2 临时密钥对
- 会话密钥仅在当前会话有效
- 服务器长期私钥泄露不影响历史会话安全性
与 TLS 1.3 的关系
RFC 8998 定位
RFC 8998《US-Crypto Algorithms and Protocols for TLS 1.3》定义了 SM2/SM3/SM4 密码套件用于 TLS 1.3 的 IETF 标准,GM/T 0024-2023 在此基础上增加了中国特色的扩展要求。
差异点
| 维度 | RFC 8998 | GM/T 0024-2023 |
|---|---|---|
| 认证方式 | SM2 证书 | SM2 证书 + 智能密码钥匙 + 预共享密钥 |
| 密钥管理 | 标准 TLS 1.3 | 增加密钥轮换策略要求 |
| 合规评估 | 无 | 对接等保 2.0、密评要求 |
| 产品认证 | 无 | 需通过 GM/T 0025 产品规范认证 |
| 审计日志 | 无 | 要求握手失败、证书失效等审计事件 |
实施建议
部署架构
推荐 SSL VPN 的部署架构如下:
┌─────────────────────────────────────────────┐
│ 互联网 │
└──────────────────┬──────────────────────────┘
│
┌──────────────────▼──────────────────────────┐
│ SSL VPN 网关(国密) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ TLS 终止 │ │ 身份认证 │ │ 访问控制 │ │
│ │ (SM2/SM3)│ │ (SM2) │ │ (RBAC) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 隧道封装 │ │ 审计日志 │ │
│ │ (SM4-GCM)│ │ (SM3) │ │
│ └──────────┘ └──────────┘ │
└──────────────────┬──────────────────────────┘
│
┌──────────────────▼──────────────────────────┐
│ 内网资源 │
│ (数据库、应用服务器、文件存储) │
└─────────────────────────────────────────────┘双证书部署要点
- 签名证书:向 CA 申请 SM2 签名证书,有效期建议不超过 2 年
- 密钥交换证书:可本地自生成,或向 CA 申请 SM2 密钥交换证书
- 证书链验证:确保签名证书链可追溯至根 CA
- 密钥隔离:签名密钥和密钥交换密钥应在不同 HSM 或安全模块中存储
性能优化建议
| 优化项 | 建议 | 预期效果 |
|---|---|---|
| SM4-GCM 硬件加速 | 使用支持 AES-NI 的 SM4 指令集 | 吞吐量提升 3-5 倍 |
| 会话复用 | 启用 Session Ticket 或 Session ID | 减少握手开销 60%+ |
| 双证书预分发 | 提前缓存证书到内存 | 减少证书传输延迟 |
| 加密隧道复用 | 单隧道多应用连接 | 降低 TLS 握手频率 |
合规检查清单
企业在部署 GM/T 0024-2023 SSL VPN 时,应逐项检查以下内容:
密码算法合规性
- [ ] 密钥交换使用 SM2 算法(非 ECDH/P-256)
- [ ] 签名认证使用 SM2WithSM3(非 RSA/SHA-256)
- [ ] 数据加密使用 SM4-GCM 或 SM4-CBC+HMAC-SM3
- [ ] 哈希使用 SM3(非 SHA-256/SHA-384)
- [ ] 密钥长度满足 SM2 256 位要求
证书管理合规性
- [ ] 使用符合 GM/T 0015-2023 的 X.509 v3 证书
- [ ] 证书包含国密 OID(1.2.156.10197.1.x 系列)
- [ ] 证书有效期不超过 2 年
- [ ] 支持双证书机制(签名/密钥交换分离)
- [ ] 建立证书吊销状态查询机制(OCSP/CRL)
密钥管理合规性
- [ ] 密钥生成符合 GM/T 0005 随机性检测要求
- [ ] 密钥存储使用密码模块(符合 GM/T 0028)
- [ ] 密钥更新周期不超过 1 年
- [ ] 支持密钥销毁机制
审计日志合规性
- [ ] 记录登录成功/失败事件
- [ ] 记录证书验证失败事件
- [ ] 记录会话建立/断开时间
- [ ] 日志保存期限不少于 6 个月
- [ ] 日志完整性受 SM3 哈希保护
常见实现陷阱
陷阱 1:SM2 证书 KeyUsage 扩展缺失
部分 CA 签发的 SM2 证书未正确设置 keyUsage 扩展,导致客户端证书验证失败。
排查方法:
openssl x509 -in server.crt -text -noout | grep -A 5 "Key Usage"要求:签名证书必须包含 digitalSignature,密钥交换证书必须包含 keyAgreement。
陷阱 2:密码套件顺序错误
部分 TLS 库默认将国际算法套件排在国密套件之前,导致握手协商失败。
排查方法:检查 TLS 库配置中密码套件列表顺序。
要求:国密套件应优先于国际套件,或在仅支持国密的网络环境中禁用国际套件。
陷阱 3:SM3 哈希与 SHA-256 混淆
在 HMAC-SM3 计算中误用 SM3 初始值而非 SHA-256 初始值。
排查方法:核对 SM3 初始哈希值:
H0 = 73801E6F
H1 = 14119D32
H2 = B83C4097
H3 = 05A99F9D
H4 = 5141BE57
H5 = 071E64B7
H6 = 785401AF
H7 = 10326371陷阱 4:双证书密钥混用
签名证书和密钥交换证书误用同一对密钥,导致前向保密失效。
排查方法:验证签名密钥和密钥交换密钥是否为不同的 SM2 密钥对。
要求:签名密钥和密钥交换密钥必须在不同安全模块中生成和存储。
相关实践文章
- GM/T 0129-2023 SSH 密码协议实战:同系列国密协议标准,涵盖 SSH 场景
- GM/T 0015-2023 X.509 证书格式合规:证书格式要求
- 国密双证书自动化 47 天:双证书管理与轮换实践
- TLS 1.3 密码套件分析:TLS 1.3 协议框架对照
总结
GM/T 0024-2023 为国密 SSL VPN 提供了完整的技术规范,从密码算法选择到密钥管理流程均有明确规定。企业在实施时应重点关注:
- 算法合规:必须使用 SM2/SM3/SM4 国密算法族,不得混用国际算法
- 证书管理:建立双证书机制,实现密钥轮换和前向保密
- 安全评估:对接 GM/T 0054 和 GM/T 0028,确保符合密评要求
- 审计追溯:完善握手日志和会话审计,满足合规留存要求