SM2国密算法证书解析

2022-09-02 14:17:17

                                              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
rsaEncryptionRSA算法标识1.2.840.113549.1.1.1
sha1withRSAEncryptionSHA1的RSA签名1.2.840.113549.1.1.5
ECCECC算法标识1.2.840.10045.2.1
SM2SM2算法标识1.2.156.10197.1.301
SM3WithSM2SM3的SM2签名1.2.156.10197.1.501
sha1withSM2SHA1的SM2签名1.2.156.10197.1.502
sha256withSM2SHA256的SM2签名1.2.156.10197.1.503
sm3withRSAEncryptionSM3的RSA签名1.2.156.10197.1.504
commonName主体名2.5.4.3
emailAddress邮箱1.2.840.113549.1.9.1
cRLDistributionPointsCRL分发点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证书制作

  • 作者:Coder-LiyG
  • 原文链接:https://blog.csdn.net/u014066037/article/details/90207472
    更新时间:2022-09-02 14:17:17