数字证书与PKI:国密证书体系、CA建设、证书生命周期管理

国密合规里这块,我个人觉得是技术含量最高、也是最容易踩坑的环节。PKI,说白了就是解决“你怎么证明你是你”的问题。过去我们可能习惯了RSA体系的X.509证书,但国密要求你换成SM2椭圆曲线证书。这不仅仅是换个算法签名那么简单,整个基础设施的逻辑都会变。

我从一个金融项目说起。那会改造国密证书系统,我们以为只要把CA软件的密钥对从RSA换成SM2就行。结果一跑压测,证书签发速度直接掉到原来的四分之一。嗯,SM2虽然密钥短,但是签名计算开销和参数校验逻辑跟RSA完全不同。这事逼着我们重新设计了整个证书签发流水线。所以今天我不只讲理论,把那些实际踩过的坑也说说。

国密PKI体系核心框架 国密CA (SM2) RA (注册机构) KMC (密钥管理中心) 目录服务 (LDAP) 最终实体 (证书/密钥) 密钥存档/备份 CRL/OCSP响应 证书生命周期:注册 → 签发 → 使用/验证 → 更新/暂停 → 注销/归档 关键差异:国密PKI强制使用SM2非对称算法 + SM3哈希算法,替换RSA/SHA系列 CA建设必须包含独立的KMC组件,密钥全生命周期由HSM硬件保护

国密证书体系:SM2证书到底长什么样?

国密证书不是简单把RSA签名改成SM2签名的X.509。它有自己的一套标准,主要参考GMT 0014(数字证书格式)和GMT 0015(SM2密码算法使用规范)。我遇到过不少团队直接拿RSA证书模板改算法OID,结果被商密检测卡住。你想想看,检测时不仅要看签名值算法,还要看证书扩展域的每一个字段。

核心区别(X.509 vs SM2证书):
对比项标准X.509(RSA)国密X.509(SM2)
签名算法OID1.2.840.113549.1.1.5 (sha256WithRSAEncryption)1.2.156.197.1.401 (sm2sign-with-sm3)
公钥算法OID1.2.840.10040.4.1 (RSA)1.2.156.197.1.301 (sm2p256v1)
签名值数字签名 = RSA私钥加密哈希值数字签名 = SM2签名算法生成(r,s)对
哈希算法SHA-256/SHA-384SM3
证书密钥长度2048~4096 bit256 bit
我的建议: 做国密证书开发时,直接用GMT 0014示例的ASN.1结构。不要自己去凑OID。我看到过有人把SM2的ecdsa-plain-signature格式跟SM2的标准DER编码搞混——这是两个东西,前者是裸的(r,s)值,后者是封装成SignatureValue的结构。

证书扩展字段里,国密多了几个关键的条目。比如密钥用途扩展,国密证书必须标记“数字签名”还是“密钥交换”,不能像RSA证书那样一把密钥走天下。还有一个叫SubjectKeyIdentifier国密有自己的计算方式,用的是SM3对公钥做哈希,而不是SHA-1。

// 国密证书扩展字段示例(ASN.1 伪码)
SM2KeyUsage EXTENSION ::= {
  SYNTAX KeyUsage -- 必须指定签名还是加密
  CRITICAL TRUE
}
-- 证书策略扩展,有时需要注明"国密合规"
CertPolicy EXTENSION ::= {
  SYNTAX PolicyInformation
  CRITICAL FALSE
  -- PolicyIdentifier 需注册到商密办,不是随便写的
}
重要警告: 国密证书的证书链验证必须有SM2根CA。不能在RSA CA下面签发SM2证书做交叉认证那一套。商密评测时,如果根CA不是国密合规的,整个链路直接判不合格。

CA建设:不只是装个服务器的事

很多人觉得CA建设嘛,装个EJBCA、装上HSM、配个网络就行了。国密合规下,CA建设要分成几个关键组件:CA服务器、KMC、RA、目录服务、OCSP响应程序。其中KMC(密钥管理中心)国密体系独有,过去做RSA PKI时没有这个角色。

我参与过一个省市的政务云国密改造,KMC的建设占了整个PKI工时的一半。为什么?因为国密要求用户加密密钥必须由KMC生成,不能由用户终端生成。这样KMC就要跟CA、RA做实时交互,同时密钥在KMC内部要经过HSM的加密封装才能出库。

KMC的密钥管理要求

功能组件职责说明技术要点
密钥生成使用SM2算法生成密钥对,必须在HSM内完成HSM需通过GMT 0028测试
密钥分发加密保护后分发到用户终端或证书载体使用SM4 + SM2混合加密
密钥备份KMC必须保存加密密钥对的副本(用于恢复)备份密钥由多份密钥分量(门限)保护
密钥归档证书过期或注销后,密钥保留期不低于5年归档密钥需密封存储,不可在线访问
我曾经见过一个项目,KMC的备份方案只备份了密钥密文,但没备份密钥加密密钥。结果HSM故障后,所有备份的加密密钥全解不开了。这意味着整个系统重建。记住:备份链必须完整。KMC的密钥加密密钥(KEK)也得通过门限方式备份,不能依赖单点。

证书生命周期管理(七阶段)

国密证书生命周期跟常规X.509差不多,但每个阶段的校验规则更严。我下面列出完整的七阶段,附带一些坑。

  1. 注册: 用户信息录入RA,提交CSR。注意CSR的签名必须使用SM2私钥。我见过有人用RSA私钥签CSR然后提交给国密CA,CA直接拒绝处理。
  2. 令牌生成/初始化: 如果是基于硬件的USBKey,KMC需要把密钥注入到令牌中。这里涉及密钥封装、PIN码设置,每一步都要记录审计日志。
  3. 签发: CA验证RA提交的信息和CSR签名,生成证书。国密CA在签发时,必须使用CA自己的SM2私钥对证书做签名。签名算法OID必须设置为sm2sign-with-sm3。
  4. 颁发与分发: 证书发给用户,通常跟加密密钥分开传送。证书走LDAP或邮件,密钥走独立的安全通道。
  5. 使用: 用户使用证书做签名或加密。国密签名验证需要使用SM2验签API,不能走OpenSSL默认的ECDSA验证(参数曲线不同)。
  6. 更新: 证书到期前30天,系统应自动触发更新。更新时,密钥对可以沿用(签名密钥对可以续期,加密密钥对建议重新生成)。
  7. 注销与归档: 用户私有原因、密钥泄露或者离职导致证书注销。注销后证书进入CRL,CRL通过OCSP下发。国密CRL格式跟RFC 5280有细微差异,ExpiredCertsOnCRL扩展的编码必须按GMT 0014来。
证书状态验证的关键: 每个业务系统需要验证证书有效性(Chain of Trust + 签名验证 + 有效期 + CRL/OCSP状态)。国密下,OCSP签名证书也必须是国密证书,否则OCSP响应视为不可靠。

做国密CA建设的几条硬杠杠

  • 物理安全: CA服务器必须放在符合等保三级以上的机房。KMC和CA如果物理分开,它们之间的通讯必须做国密VPN或SM4加密传输。
  • 硬件密码模块(HSM): 所有私钥操作必须在HSM内完成,HSM必须持有商密证书(型号需在商密办目录内)。
  • 日志审计: 证书吊销/签发/密钥生成等操作必须有不可篡改的日志。我建议审计日志用国密做数字签名,防止事后抵赖。
  • 备份恢复演练: 每季度至少做一次KMC备份恢复演练。我之前就遇到过备份数据的时间戳跟密钥版本对不上,恢复一半发现密钥早过期了。
一个实用的技巧: 证书生命周期里,建议把RESTful API的接口跟现有身份管理系统对接。比如用企业AD或LDAP映射用户,RA从AD拉取用户信息生成证书请求。这样人工操作少,出错的概率低很多。

总的来说,国密PKI建设不只是技术选型,更是一个体系化的工程。证书体系、CA架构、KMC、生命周期管理,每块都要对齐国密标准,验收时多留个心眼。你如果不确定某个字段OID对不对,直接去翻GMT 0014的附录,别凭记忆写,坑就在那里等着你。