国密SM2证书全生命周期管理实战:从签发到吊销的完整工程方案

国密算法 · 2026-08-18 · 38 阅读

前言

国密改造进入深水区后,很多企业发现:证书管理比算法选型更复杂。Nginx配好国密密码套件只是第一步,后续还有密钥生成、CSR制作、CA签发、证书分发、吊销更新、到期续期等一系列工程问题。

标准如GM/T 0034-2014《基于SM2密码算法的证书认证系统密码及其相关安全技术规范》给出了框架要求,但落地时需要解决的具体问题包括:

  • SM2密钥对如何生成?椭圆曲线参数怎么选?
  • CSR(证书签名请求)的格式和内容有什么要求?
  • CA如何签发符合GM/T 0015-2023规范的SM2证书?
  • 证书吊销时,CRL和OCSP如何同步更新?
  • 证书快到期了,自动化续期的流程怎么设计?
本文基于实测环境(Python 3.10 + gmssl 3.2.2 + cryptography 46.x),给出一套可运行的完整方案。

一、SM2密钥对生成

1.1 使用gmssl生成密钥对

GM/T 0003.1-2012定义了SM2椭圆曲线参数,使用gmssl库可以快速生成密钥对:

运行结果:

CODE
私钥: 5E9A8F7C3D2B1A...(64位十六进制)
公钥: 0432C4AE2C1F998463...(130位,含04前缀)

1.2 使用cryptography库生成密钥对

对于需要与其他库互操作的项目,可以使用cryptography库:

⚠️ 重要提示:上述代码使用SECP256R1(P-256)曲线,这是国际标准曲线,不是国密SM2曲线。SM2曲线参数由GM/T 0003.1-2012定义,使用不同的素数和曲线方程。生产环境必须使用支持SM2的库(如gmssl、Tongsuo)。

1.3 密钥存储安全要求

GM/T 0034-2014第5.3节要求CA系统对私钥进行安全保护:

密钥类型存储方式安全要求
根CA私钥HSM离线存储物理隔离,多人控制
中间CA私钥HSM在线存储访问审计,密钥分割
终端实体私钥本地安全存储加密存储,权限控制
实际部署中,建议使用:
  • 根CA/中间CA:江南计算JLSM系列、三未信安SJK1926等HSM设备
  • 终端实体:操作系统密钥链(macOS Keychain、Linux Secret Service)或加密文件

二、CSR生成与提交

2.1 SM2 CSR结构

CSR(Certificate Signing Request)包含申请者信息和公钥,使用PKCS#10格式。GM/T 0010-2023规定了SM2证书的CSR格式要求:

2.2 CSR字段要求

根据GM/T 0010-2023,SM2 CSR必须包含以下字段:

字段必填说明
subject是申请者信息,包含CN、O、C等
public_key是SM2公钥,使用SM2曲线参数
signature_algorithm是SM2WithSM3(OID: 1.2.156.10197.1.501)
attributes否可选,如challengePassword
常见错误:
  • 使用SHA-256代替SM3哈希:不符合国密要求,无法通过密评
  • 使用SECP256R1代替SM2曲线:密钥不兼容,无法与国密系统交互

三、CA签发SM2证书

3.1 签发流程

GM/T 0034-2014第6章规定了CA签发流程:

CODE
1. 验证CSR签名(使用CSR中的公钥)
2. 验证申请者身份(线下或线上审核)
3. 生成证书序列号(唯一、单调递增)
4. 设置证书有效期(不超过1年)
5. 使用CA私钥签名证书
6. 输出符合GM/T 0015-2023的X.509证书

3.2 Python签发实现

3.3 证书扩展字段要求

GM/T 0015-2023规定了SM2证书必须包含的扩展:

扩展是否必需OID
BasicConstraints是2.5.29.19
SubjectKeyIdentifier是2.5.29.14
AuthorityKeyIdentifier是2.5.29.35
KeyUsage是2.5.29.15
SubjectAltName推荐2.5.29.17
CertificatePolicies推荐2.5.29.32
国密特有扩展:
  • SM2签名算法OID:1.2.156.10197.1.501(在AlgorithmIdentifier中)
  • SM2曲线参数OID:1.2.156.10197.1.301(在SubjectPublicKeyInfo中)

四、证书吊销机制

4.1 CRL(证书吊销列表)

GM/T 0037-2014《证书认证系统检测规范》要求CA系统支持CRL吊销机制:

4.2 OCSP(在线证书状态协议)

OCSP提供实时证书状态查询,比CRL更高效:

4.3 吊销原因码

GM/T 0037-2014定义了以下吊销原因:

原因码说明
unspecified未指定原因
key_compromise密钥泄露
ca_compromiseCA密钥泄露
affiliation_changed所属关系变更
superseded证书更新替代
cessation_of_operation业务停止
certificate_hold证书暂停

五、自动化续期流程

5.1 续期策略

GM/T 0034-2014建议证书有效期不超过1年,续期策略如下:

有效期续期触发时间处理方式
≤30天到期前30天自动续期
30-90天到期前60天提醒管理员
>90天到期前90天计划续期

5.2 Python自动化脚本

5.3 与ACME协议集成

对于自动化程度较高的场景,可以集成ACME协议:

六、工程实践建议

6.1 密钥安全管理

  • 密钥分割:根CA密钥采用M-of-N分割,需要多个管理员同时操作
  • 访问审计:所有密钥操作记录日志,定期审计
  • 密钥轮换:CA密钥定期轮换,终端实体密钥按需轮换
  • 灾备恢复:密钥备份存储在异地,支持灾难恢复

6.2 证书模板设计

根据业务需求设计证书模板:

模板类型用途有效期关键扩展
TLS服务器Nginx/Apache国密改造1年SubjectAltName(DNS/IP)
TLS客户端mTLS双向认证1年ClientAuth
代码签名软件发布签名2年CodeSigning
文档签名PDF/Office签名1年DocumentSigning

6.3 合规检查清单

密评现场检查时,证书管理系统需要提供:

  • [ ] 密钥生成日志(包含时间、操作人、算法)
  • [ ] 证书签发记录(包含序列号、有效期、主题)
  • [ ] 证书吊销记录(包含吊销时间、原因)
  • [ ] CRL发布记录(包含发布时间、版本号)
  • [ ] OCSP响应日志(包含查询时间、证书序列号)
  • [ ] 密钥备份恢复测试记录

总结

国密SM2证书全生命周期管理涉及密钥生成、CSR签发、证书吊销、自动化续期等多个环节。本文提供的Python脚本和工程实践建议,可以帮助企业快速构建符合GM/T 0034-2014规范的证书管理系统。

核心要点:

  • 使用支持SM2的库(gmssl、Tongsuo)生成密钥和签名
  • 确保证书格式符合GM/T 0015-2023规范
  • 建立完善的吊销机制(CRL + OCSP)
  • 实现自动化续期,避免证书过期影响业务
下一步:
  • 结合实际业务系统,定制证书模板
  • 集成到现有的ITSM/运维平台
  • 定期进行密钥轮换和证书审计

参考标准:

  • GM/T 0003.1-2012《SM2椭圆曲线公钥密码算法 第1部分:总则》
  • GM/T 0009-2023《SM2密码算法使用规范》
  • GM/T 0010-2023《SM2密码算法加密签名消息语法规范》
  • GM/T 0015-2023《数字证书格式》
  • GM/T 0034-2014《基于SM2密码算法的证书认证系统密码及其相关安全技术规范》
  • GM/T 0037-2014《证书认证系统检测规范》