数字证书与PKI:国密证书体系、CA建设、证书生命周期管理
国密合规里这块,我个人觉得是技术含量最高、也是最容易踩坑的环节。PKI,说白了就是解决“你怎么证明你是你”的问题。过去我们可能习惯了RSA体系的X.509证书,但国密要求你换成SM2椭圆曲线证书。这不仅仅是换个算法签名那么简单,整个基础设施的逻辑都会变。
我从一个金融项目说起。那会改造国密证书系统,我们以为只要把CA软件的密钥对从RSA换成SM2就行。结果一跑压测,证书签发速度直接掉到原来的四分之一。嗯,SM2虽然密钥短,但是签名计算开销和参数校验逻辑跟RSA完全不同。这事逼着我们重新设计了整个证书签发流水线。所以今天我不只讲理论,把那些实际踩过的坑也说说。
国密证书体系:SM2证书到底长什么样?
国密证书不是简单把RSA签名改成SM2签名的X.509。它有自己的一套标准,主要参考GMT 0014(数字证书格式)和GMT 0015(SM2密码算法使用规范)。我遇到过不少团队直接拿RSA证书模板改算法OID,结果被商密检测卡住。你想想看,检测时不仅要看签名值算法,还要看证书扩展域的每一个字段。
| 对比项 | 标准X.509(RSA) | 国密X.509(SM2) |
| 签名算法OID | 1.2.840.113549.1.1.5 (sha256WithRSAEncryption) | 1.2.156.197.1.401 (sm2sign-with-sm3) |
| 公钥算法OID | 1.2.840.10040.4.1 (RSA) | 1.2.156.197.1.301 (sm2p256v1) |
| 签名值 | 数字签名 = RSA私钥加密哈希值 | 数字签名 = SM2签名算法生成(r,s)对 |
| 哈希算法 | SHA-256/SHA-384 | SM3 |
| 证书密钥长度 | 2048~4096 bit | 256 bit |
证书扩展字段里,国密多了几个关键的条目。比如密钥用途扩展,国密证书必须标记“数字签名”还是“密钥交换”,不能像RSA证书那样一把密钥走天下。还有一个叫SubjectKeyIdentifier国密有自己的计算方式,用的是SM3对公钥做哈希,而不是SHA-1。
// 国密证书扩展字段示例(ASN.1 伪码)
SM2KeyUsage EXTENSION ::= {
SYNTAX KeyUsage -- 必须指定签名还是加密
CRITICAL TRUE
}
-- 证书策略扩展,有时需要注明"国密合规"
CertPolicy EXTENSION ::= {
SYNTAX PolicyInformation
CRITICAL FALSE
-- PolicyIdentifier 需注册到商密办,不是随便写的
}
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年 | 归档密钥需密封存储,不可在线访问 |
证书生命周期管理(七阶段)
国密证书生命周期跟常规X.509差不多,但每个阶段的校验规则更严。我下面列出完整的七阶段,附带一些坑。
- 注册: 用户信息录入RA,提交CSR。注意CSR的签名必须使用SM2私钥。我见过有人用RSA私钥签CSR然后提交给国密CA,CA直接拒绝处理。
- 令牌生成/初始化: 如果是基于硬件的USBKey,KMC需要把密钥注入到令牌中。这里涉及密钥封装、PIN码设置,每一步都要记录审计日志。
- 签发: CA验证RA提交的信息和CSR签名,生成证书。国密CA在签发时,必须使用CA自己的SM2私钥对证书做签名。签名算法OID必须设置为sm2sign-with-sm3。
- 颁发与分发: 证书发给用户,通常跟加密密钥分开传送。证书走LDAP或邮件,密钥走独立的安全通道。
- 使用: 用户使用证书做签名或加密。国密签名验证需要使用SM2验签API,不能走OpenSSL默认的ECDSA验证(参数曲线不同)。
- 更新: 证书到期前30天,系统应自动触发更新。更新时,密钥对可以沿用(签名密钥对可以续期,加密密钥对建议重新生成)。
- 注销与归档: 用户私有原因、密钥泄露或者离职导致证书注销。注销后证书进入CRL,CRL通过OCSP下发。国密CRL格式跟RFC 5280有细微差异,ExpiredCertsOnCRL扩展的编码必须按GMT 0014来。
做国密CA建设的几条硬杠杠
- 物理安全: CA服务器必须放在符合等保三级以上的机房。KMC和CA如果物理分开,它们之间的通讯必须做国密VPN或SM4加密传输。
- 硬件密码模块(HSM): 所有私钥操作必须在HSM内完成,HSM必须持有商密证书(型号需在商密办目录内)。
- 日志审计: 证书吊销/签发/密钥生成等操作必须有不可篡改的日志。我建议审计日志用国密做数字签名,防止事后抵赖。
- 备份恢复演练: 每季度至少做一次KMC备份恢复演练。我之前就遇到过备份数据的时间戳跟密钥版本对不上,恢复一半发现密钥早过期了。
总的来说,国密PKI建设不只是技术选型,更是一个体系化的工程。证书体系、CA架构、KMC、生命周期管理,每块都要对齐国密标准,验收时多留个心眼。你如果不确定某个字段OID对不对,直接去翻GMT 0014的附录,别凭记忆写,坑就在那里等着你。