SM2国密算法证书解析

一、数字证书的组成

1)证书数据结构

数字证书使用ASN.1编码,证书文件以二进制或Base64格式存放,数据格式使用TLV(Tag Length Value)形式,T代表类型标识符,L是长度值标识符,V代表值编码。数字证书中的每一项都有个对应的类型T。一个数字证书就是一个大的TLV序列,然后V又由多个TLV组合而成。

SM2证书数据和RSA算法证书一样,包含证书版本、序列号、颁发者、使用者主体信息、使用者公钥、有效期、证书扩展项等,只不过SM2证书的公钥算法是使用ECC算法的Oid标识(1.2.840.10045.2.1),然后公钥参数使用SM2国密算法的Oid标识(1.2.156.10197.1.301)。

2)签名算法

SM2证书配套的签名算法是基于SM3的SM2签名算法,算法Oid标识为1.2.156.10197.1.501,另外SM2国密算法还定义基于SHA_1、SHA_256的签名,以及使用SM3算法的RSA的签名,只不过签名算法Oid标识不一样。

3)签名数据

SM2的签名数据由2个BigInteger大数组成,再使用Der编码存放签名数据。证书的签名数据由根证书私钥进行签名,使用根证书公钥验证,顶级根证书使用自己的证书公钥验证。

二、数字证书的对象标识符

数字证书的每项都有对象标识Oid,SM2数字证书的主要区别就是公钥算法、公钥参数、签名算法标识不一样,其余的都是X509里标准项。数字证书常见得对象标识有如下:

对象标识符 名称 OID
rsaEncryption RSA算法标识 1.2.840.113549.1.1.1
sha1withRSAEncryption SHA1的RSA签名 1.2.840.113549.1.1.5
ECC ECC算法标识 1.2.840.10045.2.1
SM2 SM2算法标识 1.2.156.10197.1.301
SM3WithSM2 SM3的SM2签名 1.2.156.10197.1.501
sha1withSM2 SHA1的SM2签名 1.2.156.10197.1.502
sha256withSM2 SHA256的SM2签名 1.2.156.10197.1.503
sm3withRSAEncryption SM3的RSA签名 1.2.156.10197.1.504
commonName 主体名 2.5.4.3
emailAddress 邮箱 1.2.840.113549.1.9.1
cRLDistributionPoints CRL分发点 2.5.29.31
extKeyUsage 扩展密钥用法 2.5.29.37
subjectAltName 使用者备用名称 2.5.29.17
CP 证书策略 2.5.29.32
clientAuth 客户端认证 1.3.6.1.5.5.7.3.2

三、数字证书的解析

数字证书的解析主要是根据ASN.1语法和对象标识符来获取值,然后再是证书的有效期、颁发机构根证书、CRL吊销状态和使用目的等验证。RSA证书是标准算法大部分平台都可以解析,而SM2国密算法证书的解析就不是那么通用的。在Windows的一些较高版本打开SM2证书会显示“验证信任关系时,系统层上出现了一个错误”,这是因为Windows还不支持SM2算法证书验证,不能识别SM2签名的算法标识,因此需要自行验证SM2证书的签名数据,可基于BouncyCastle开源加密库来实现SM2验证签名,详细参见我的国密算法SM2证书制作。

你可能感兴趣的:(SM2国密算法证书解析)