首页logo
  •  

jonllen

金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。

个人档案

jonllen
心情闪存 | 给他留言
妮称:jonllen
来自:中国. 湖南. 湘潭
简述:金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。
博客日历

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证书制作

标签:工作
  • posted@ 2014-04-01 19:57
  • update@ 2014-04-03 22:09:00
  • 阅读(17818)
  • 评论(10)

相关文章

评论
1楼 tt 2014-06-18 23:16:34
博主,1.2.156.10197.1.502,有这个吗?请问在哪看到的,有具体介绍吗?
回复:我是参考《信息安全技术 公钥基础设施 电子认证机构标识编码规范》意见稿的OID定义,还没实际应用过。(2014-06-19 10:00:19)
2楼 程序员 2014-12-04 11:14:51
我看了你的关于sm2的文章,感觉你好牛啊,我现在也在研究这个。目的是把sm2应用到双向ssl中。可以把SM2CryptoServiceProvider的代码让我参考下吗,谢谢。邮箱504243252@qq.com
3楼 程序员 2014-12-04 11:15:42
我看了你的关于sm2的文章,感觉你好牛啊,我现在也在研究这个。目的是把sm2应用到双向ssl中。可以把SM2CryptoServiceProvider的代码让我参考下吗,谢谢。邮箱504243252@qq.com
4楼 SM2算法 2015-02-13 17:25:04
我最近在研究java 实现SM2算法,希望借鉴你的C#源码,你能发一份给我吗?z0551@126.com
5楼 王誉晓 2015-05-24 10:45:30
博主,膜拜您已经很久了,能加个qq号吗,有很多问题想请教您啊,qq:1261634218
6楼 王誉晓 2015-05-24 10:45:32
博主,膜拜您已经很久了,能加个qq号吗,有很多问题想请教您啊,qq:1261634218
7楼 icu 2016-05-27 18:48:38
非常感谢,最近弄的U盾的证书无法使用,现在终于知道了原因
8楼 DoubleCA 2018-05-11 13:54:35
评论内容需要审核才能显示。
9楼 DoubleCA 2018-05-11 13:56:55
评论内容需要审核才能显示。
10楼 SM2算法 2018-05-11 14:03:16
评论内容需要审核才能显示。
发表评论
*必填
回复通知我
*必填

博文推荐