国密 PKI 证书自动化管理协议:CMP/EST/SCEP/ACME 在双证书环境下的实施

协议详解 · 2026-06-28

概述

证书自动化管理是现代 PKI 运维的核心能力。在传统 RSA/ECDSA 环境中,ACME、EST、CMP、SCEP 等协议已被广泛采用。然而,在国密 PKI 环境中,双证书分离机制(签名证书与加密证书分离)、SM2 算法兼容性国密 TLS 通道要求等因素使得自动化实施面临独特挑战。

本文系统分析四大自动化协议在国密环境中的适配方案,为构建国密 PKI 自动化运维体系提供实施指南。

国密 PKI 自动化的特殊挑战

2.1 双证书分离机制

国密 PKI 的核心特征是签名证书与加密证书必须分离使用(GM/T 0034-2014 强制要求)。这一要求源于:

  • 密钥用途隔离:签名密钥不可否认,加密密钥可被司法解密
  • 密钥生命周期差异:签名证书通常有效期较长,加密证书可较短
  • 密钥管理策略不同:签名密钥需要更高安全等级
这导致自动化系统必须同时管理两张证书,且需确保:
  • 两张证书的 Subject DN 一致
  • 两张证书的有效期协调
  • 签名证书的私钥不可导出,加密证书的私钥可备份

2.2 SM2 证书兼容性

SM2 证书与 RSA/ECDSA 证书在以下方面存在差异:

维度RSA/ECDSA 证书SM2 证书
公钥算法 OIDrsaEncryption (1.2.840.113549.1.1.1)sm2p256v1 (1.2.156.10197.1.301)
签名算法 OIDsha256WithRSAEncryptionsm2sign_with_sm3 (1.2.156.10197.1.401)
公钥编码BIT STRINGBIT STRING ( uncompressed 04xy )
密钥用途扩展keyUsagekeyUsage (仅 digitalSignature 或 keyEncipherment)
曲线参数命名曲线 OIDsm2p256v1 OID

2.3 国密 TLS 通道要求

国密 TLS(GM/T 0024-2014)使用双证书体系:

  • 服务器需配置签名证书 + 加密证书
  • 使用国密密码套件 TLS_SM4_GCM_SM3 (0xE0, 0x13)
  • 客户端需支持国密证书验证

CMP 协议在国密环境中的实施

3.1 协议概述

CMP(Certificate Management Protocol,RFC 4108)是功能最完整的证书管理协议,支持:

  • 证书申请(ir/cr)
  • 证书更新(kur)
  • 证书吊销(rr)
  • 密钥对更新(crr)
  • 交叉证书请求(ccr)

3.2 国密适配要点

#### 3.2.1 消息保护机制

CMP 的消息保护通常使用:

  • 基于签名:使用已有证书签名 CMP 消息
  • 基于共享密钥:使用预共享密钥(MAC 保护)
在国密环境中,基于签名的保护需使用 SM2 签名证书。关键配置:

PYTHON
# CMP 消息保护 - 国密签名方式
# 使用 SM2 签名证书保护 CMP 请求
# 签名算法:sm2sign_with_sm3 (1.2.156.10197.1.401)
# 哈希算法:SM3 (1.2.156.10197.1.201)

#### 3.2.2 双证书申请策略

CMP 的 ir(初始化请求)消息在国密环境中需要特殊处理:

CODE
CertReqMsg ::= SEQUENCE {
  certReq       CertRequest,
  popoProof     ProofOfPossession OPTIONAL,
  regInfo       SEQUENCE SIZE(1..MAX) OF Attribute OPTIONAL
}

-- 国密双证书场景:一次请求包含两个 CertRequest
-- CertRequest 1: 签名证书 (digitalSignature)
-- CertRequest 2: 加密证书 (keyEncipherment)

#### 3.2.3 CA 响应处理

CA 返回的 ip(初始化响应)消息中:

  • caPubs 字段需包含 CA 的双证书(签名证书 + 加密证书)
  • response 字段包含两张证书的签发结果

3.3 CMP 实施架构

EST 协议在国密环境中的实施

4.1 协议概述

EST(Enrollment over Secure Transport,RFC 6694)是基于 TLS 的证书管理协议,设计目标是替代 SCEP。核心特性:

  • 使用 HTTPS 传输(TLS 保护)
  • 支持证书申请和更新
  • 支持 CSR 属性获取
  • 支持 CA 证书获取

4.2 国密适配要点

#### 4.2.1 国密 TLS 通道建立

EST 依赖 TLS 提供传输安全。在国密环境中:

CODE
# EST 服务端配置(国密 TLS)
# ⚠️ 环境要求:需要 Tongsuo/BabaSSL 等支持国密密码套件的 OpenSSL 分支
# Tongsuo 下载地址:https://github.com/Tongsuo-Project/Tongsuo
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "TLS_SM4_GCM_SM3:EECDH+SM4:EDH+SM4";
ssl_certificate     /path/to/sm2_signing_cert.pem;
ssl_certificate_key /path/to/sm2_signing_key.pem;
ssl_trusted_certificate /path/to/sm2_encryption_cert.pem;

#### 4.2.2 国密 CSR 生成

EST 的 /simpleenroll 端点接收 PKCS#10 CSR。在国密环境中,SM2 CSR 生成需要特定的国密库支持:

⚠️ 重要说明:目前 cryptography 库(截至 v48.x)不支持 SM2 曲线,因此无法直接生成 SM2 CSR。实际国密部署中应使用以下方案:
>
- 方案一(推荐):使用 gmssl 库生成 SM2 密钥对,再通过 cryptography 库构建 CSR - 方案二:使用 Tongsuo OpenSSL 的 req 命令直接生成 SM2 CSR
>
以下展示 CSR 的结构概念(伪代码,不可直接运行):
📌 生产环境建议:国密 CSR 生成应使用经过认证的密码模块或工具,确保私钥安全生成和存储。
#### 4.2.3 双证书签发流程

EST 在国密环境中的双证书签发流程:

4.3 EST 与 CMP 对比

维度ESTCMP
传输安全TLS (HTTPS)消息级保护 (签名/MAC)
复杂度
功能范围申请+更新全生命周期
国密适配难度中等 (需国密 TLS)较高 (需双证书模板)
部署场景物联网、企业内网金融、政务

SCEP 协议在国密环境中的实施

5.1 协议概述

SCEP(Simple Certificate Enrollment Protocol)是历史最悠久的证书管理协议,基于 HTTP GET/POST 操作。虽然已被 EST 逐步替代,但在大量现有设备中仍被广泛支持。

5.2 国密适配挑战

SCEP 在国密环境中的主要挑战:

  • 算法标识符映射:SCEP 使用 PKCS#7 EnvelopedData,国密环境需使用 SM2 密钥封装
  • 证书确认(Challenge):SCEP 的 Challenge Password 机制与国密双证书模板的协调
  • 轮询机制:SCEP 的证书签发轮询在国密 CA 中可能延迟较长

5.3 国密 SCEP 实施建议

CODE
# SCEP 国密适配配置示例
# 注意:SCEP 协议本身不支持国密算法,需通过以下方式适配

# 方案 1: 混合证书策略
# - 使用 RSA 证书保护 SCEP 传输
# - 签发 SM2 证书作为终端实体证书

# 方案 2: 国密 TLS 隧道
# - SCEP 通信通过国密 TLS 代理
# - 内部 CA 使用 SM2 证书签发

ACME 协议在国密环境中的实施

6.1 协议概述

ACME(Automatic Certificate Management Environment,RFC 8555)是 Let's Encrypt 使用的协议,支持 HTTP-01、DNS-01、TLS-ALPN-01 三种验证方式。

6.2 国密适配现状

截至 2026 年 6 月,ACME 在国密环境中的适配仍处于早期探索阶段

  • Boulder CA(Let's Encrypt 开源实现)不支持 SM2 证书签发
  • Pebble(测试用 ACME CA)不支持国密算法
  • 国密 CA 厂商(如 CFCA、上海 CA)提供专有 API,但非标准 ACME

6.3 国密 ACME 适配方案

#### 6.3.1 混合证书策略

CODE
# 方案:ACME 签发 RSA 证书 + 国密代理转换
# 
# 1. ACME 签发 RSA 证书(用于 ACME 验证)
# 2. 国密代理将 RSA 证书转换为 SM2 证书
# 3. 应用同时部署两张证书(双证书方案)

#### 6.3.2 国密 ACME 扩展设计

IETF 尚未发布国密 ACME 标准。社区探索方向:

CODE
# 国密 ACME 扩展需求
# 1. 挑战类型扩展:gm-tls-01(国密 TLS 验证)
# 2. 证书类型:SM2 证书 + SM2 中间 CA
# 3. 验证算法:SM2 签名验证替代 RSA/ECDSA
# 4. 双证书签发:一次申请返回两张证书

国密 PKI 自动化架构设计

7.1 推荐架构:分层 PKI + 多协议支持

7.2 双证书自动化签发流程

实施建议与最佳实践

8.1 协议选择指南

场景推荐协议理由
企业内网设备EST基于 TLS,安全性高,部署简单
金融高安全场景CMP功能最完整,支持双向认证
物联网设备EST 或 SCEP兼容现有设备,SCEP 支持广泛
云原生环境ACME(混合)生态丰富,但需混合证书策略
跨组织 PKICMP支持交叉证书,适合复杂信任域

8.2 国密双证书自动化关键检查清单

  • [ ] CA 系统支持双证书模板(签名证书 + 加密证书)
  • [ ] 自动化系统支持同时提交两个 CSR
  • [ ] 签名证书私钥标记为不可导出
  • [ ] 加密证书私钥支持安全备份到 KMC
  • [ ] 证书更新时同步更新两张证书
  • [ ] 证书吊销时同时吊销两张证书
  • [ ] 国密 TLS 通道使用双证书配置
  • [ ] 证书链验证支持 SM2 签名算法

8.3 常见实施问题

问题 1:SM2 证书链验证失败

原因:客户端不支持 SM2 签名算法或未配置国密信任库。

解决:

  • 确保客户端安装国密根证书
  • 配置证书链包含完整的 SM2 中间 CA
  • 验证 keyUsage 扩展与证书类型匹配
问题 2:双证书更新不同步

原因:自动化系统仅更新了一张证书。

解决:

  • 实现证书关联机制(通过 Subject DN 关联)
  • 更新流程包含两张证书的状态检查
  • 设置告警监控证书过期时间差异
问题 3:国密 TLS 握手失败

原因:服务器仅配置了签名证书,未配置加密证书。

解决:

  • Nginx 配置中同时指定签名证书和加密证书
  • 验证 ssl_certificate 包含完整的证书链
  • 确保密码套件配置包含国密套件

参考来源

相关实践