from http://www.jonllen.com/jonllen/work/174.aspx
一、數(shù)字證書的組成
1)證書數(shù)據(jù)結(jié)構(gòu)
數(shù)字證書使用ASN.1編碼,證書文件以二進(jìn)制或Base64格式存放,數(shù)據(jù)格式使用TLV(Tag Length Value)形式,T代表類型標(biāo)識(shí)符,L是長(zhǎng)度值標(biāo)識(shí)符,V代表值編碼。數(shù)字證書中的每一項(xiàng)都有個(gè)對(duì)應(yīng)的類型T。一個(gè)數(shù)字證書就是一個(gè)大的TLV序列,然后V又由多個(gè)TLV組合而成。
SM2證書數(shù)據(jù)和RSA算法證書一樣,包含證書版本、序列號(hào)、頒發(fā)者、使用者主體信息、使用者公鑰、有效期、證書擴(kuò)展項(xiàng)等,只不過SM2證書的公鑰算法是使用ECC算法的Oid標(biāo)識(shí)(1.2.840.10045.2.1),然后公鑰參數(shù)使用SM2國密算法的Oid標(biāo)識(shí)(1.2.156.10197.1.301)。
2)簽名算法
SM2證書配套的簽名算法是基于SM3的SM2簽名算法,算法Oid標(biāo)識(shí)為1.2.156.10197.1.501,另外SM2國密算法還定義基于SHA_1、SHA_256的簽名,以及使用SM3算法的RSA的簽名,只不過簽名算法Oid標(biāo)識(shí)不一樣。
3)簽名數(shù)據(jù)
SM2的簽名數(shù)據(jù)由2個(gè)BigInteger大數(shù)組成,再使用Der編碼存放簽名數(shù)據(jù)。證書的簽名數(shù)據(jù)由根證書私鑰進(jìn)行簽名,使用根證書公鑰驗(yàn)證,頂級(jí)根證書使用自己的證書公鑰驗(yàn)證。
二、數(shù)字證書的對(duì)象標(biāo)識(shí)符
數(shù)字證書的每項(xiàng)都有對(duì)象標(biāo)識(shí)Oid,SM2數(shù)字證書的主要區(qū)別就是公鑰算法、公鑰參數(shù)、簽名算法標(biāo)識(shí)不一樣,其余的都是X509里標(biāo)準(zhǔn)項(xiàng)。數(shù)字證書常見得對(duì)象標(biāo)識(shí)有如下:
對(duì)象標(biāo)識(shí)符 | 名稱 | OID |
---|---|---|
rsaEncryption | RSA算法標(biāo)識(shí) | 1.2.840.113549.1.1.1 |
sha1withRSAEncryption | SHA1的RSA簽名 | 1.2.840.113549.1.1.5 |
ECC | ECC算法標(biāo)識(shí) | 1.2.840.10045.2.1 |
SM2 | SM2算法標(biāo)識(shí) | 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分發(fā)點(diǎn) | 2.5.29.31 |
extKeyUsage | 擴(kuò)展密鑰用法 | 2.5.29.37 |
subjectAltName | 使用者備用名稱 | 2.5.29.17 |
CP | 證書策略 | 2.5.29.32 |
clientAuth | 客戶端認(rèn)證 | 1.3.6.1.5.5.7.3.2 |
三、數(shù)字證書的解析
數(shù)字證書的解析主要是根據(jù)ASN.1語法和對(duì)象標(biāo)識(shí)符來獲取值,然后再是證書的有效期、頒發(fā)機(jī)構(gòu)根證書、CRL吊銷狀態(tài)和使用目的等驗(yàn)證。RSA證書是標(biāo)準(zhǔn)算法大部分平臺(tái)都可以解析,而SM2國密算法證書的解析就不是那么通用的。在Windows的一些較高版本打開SM2證書會(huì)顯示“驗(yàn)證信任關(guān)系時(shí),系統(tǒng)層上出現(xiàn)了一個(gè)錯(cuò)誤”,這是因?yàn)閃indows還不支持SM2算法證書驗(yàn)證,不能識(shí)別SM2簽名的算法標(biāo)識(shí),因此需要自行驗(yàn)證SM2證書的簽名數(shù)據(jù),可基于BouncyCastle開源加密庫來實(shí)現(xiàn)SM2驗(yàn)證簽名,詳細(xì)參見我的國密算法SM2證書制作。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注