博客專(zhuān)欄

EEPW首頁(yè) > 博客 > X509證書(shū)結(jié)構(gòu)解析

X509證書(shū)結(jié)構(gòu)解析

發(fā)布人:電子禪石 時(shí)間:2023-07-28 來(lái)源:工程師 發(fā)布文章

X509證書(shū)是采用DER編碼的ASN1結(jié)構(gòu)數(shù)據(jù):


Certificate::=SEQUENCE{


tbsCertificate TBSCertificate,


signatureAlgorithm AlgorithmIdentifier,


signatureValue BIT STRING


}


整體X509證書(shū)是SEQUENCE類(lèi)型,包括三個(gè)元素。其中,tbsCertificate是證書(shū)數(shù)據(jù)本身, TBSCertificate類(lèi)型,是整個(gè)X509證書(shū)數(shù)據(jù)的主體。所謂”TBS”就是“To be signed”的縮寫(xiě),tbsCertificate的意思就是“要被簽名的證書(shū)內(nèi)容”。因?yàn)樵谇懊娴奈恼轮v過(guò),每張證書(shū)都是被上一級(jí)證書(shū)對(duì)應(yīng)的私鑰簽過(guò)名的(頂級(jí)證書(shū)是自簽名);signatureAlgorithm就是所使用的的簽名算法標(biāo)識(shí);signatureValue就是簽名結(jié)果。


建議使用一些ASN1解析工具,打開(kāi)一個(gè)證書(shū)cer文件,對(duì)照實(shí)例學(xué)習(xí)。我這里用的是Asn1Editor,打開(kāi)證書(shū)文件效果如下:



下面介紹一下各個(gè)元素。第一個(gè)是tbsCertificate,TBSCertificate類(lèi)型,其結(jié)構(gòu)定義如下。


TBSCertificate::=SEQUENCE{


version [0] EXPLICIT Version DEFAULT v1,


serialNumber CertificateSerialNumber,


signature AlgorithmIdentifier,


issuer Name,


validity Validity,


subject Name,


subjectPublicKeyInfo SubjectPublicKeyInfo,


issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,


subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,


extensions [3] EXPLICIT Extensions OPTIONAL


}


TBSCertificate同樣是SEQUENCE,其各個(gè)元素說(shuō)明如下:


version

證書(shū)的版本號(hào),Version類(lèi)型,其定義如下:

Version ::= INTEGER { v1(0), v2(1), v3(2) }


version的默認(rèn)值是V1,但實(shí)際上現(xiàn)在使用的證書(shū)基本是V2或V3版本。由于Tag標(biāo)記為[0] EXPLICIT,所以版本號(hào)如果沒(méi)有被省略,編碼時(shí)會(huì)在它外面加一個(gè)新的標(biāo)識(shí)。如下圖,可見(jiàn)此證書(shū)的版本是V3:




serialNumber

證書(shū)的序列號(hào),CertificateSerialNumber類(lèi)型,即INTEGER類(lèi)型。

CertificateSerialNumber ::= INTEGER


signature

雖然名字叫”signature”,它實(shí)際上是證書(shū)進(jìn)行簽名時(shí)的算法標(biāo)識(shí),AlgorithmIdentifier類(lèi)型,定義如下:

AlgorithmIdentifier ::= SEQUENCE {


algorithm OBJECT IDENTIFIER,


parameters ANY DEFINED BY algorithm OPTIONAL


}


下圖可以看出,此證書(shū)的簽名算法標(biāo)識(shí)是‘’1.2.156.10197.1.501”,也就是使用SM2和SM3的簽名算法。



issuer

證書(shū)頒發(fā)者信息,Name類(lèi)型,相關(guān)類(lèi)型定義如下:

Name ::= CHOICE {


RDNSequence }


RDNSequence ::= SEQUENCE OF RelativeDistinguishedName


RelativeDistinguishedName ::=SET OF AttributeTypeAndValue


AttributeTypeAndValue ::= SEQUENCE {


type AttributeType,


value AttributeValue }


AttributeType ::= OBJECT IDENTIFIER


AttributeValue ::= ANY DEFINED BY AttributeType


本文中的證書(shū)頒發(fā)者包含三個(gè)信息:所在國(guó)別(countryName),頒發(fā)機(jī)構(gòu)名稱(chēng)(organizationName)和通用名稱(chēng)(commonName)。




validity

證書(shū)有效期,Validity類(lèi)型

Validity ::= SEQUENCE {


notBefore Time, – 證書(shū)有效期起始時(shí)間


notAfter Time – 證書(shū)有效期終止時(shí)間


}


Time ::= CHOICE {


utcTime UTCTime,


generalTime GeneralizedTime }


從上圖可以看出,本文證書(shū)有效期起始和終止時(shí)間是UTCTime類(lèi)型,長(zhǎng)度5年。


subject

證書(shū)持有人(主體)信息。本文證書(shū)包含國(guó)別,所在?。╯tateOrProviceName),地址(localityName),機(jī)構(gòu)名稱(chēng)和通用名稱(chēng)等持有人信息。

subjectPublicKeyInfo

證書(shū)公鑰信息,SubjectPublicKeyInfo類(lèi)型,定義如下:

SubjectPublicKeyInfo ::= SEQUENCE {


algorithm AlgorithmIdentifier, – 公鑰算法


subjectPublicKey BIT STRING – 公鑰值


}


本證書(shū)algorithm的算法標(biāo)識(shí)是ecPublicJKey,說(shuō)明使用ECC算法,第二個(gè)OBJECT IDENTIFIER是參數(shù),具體說(shuō)明是采用基于ECC算法的SM2算法。




issuerUniqueID

證書(shū)頒發(fā)者ID,UniqueIdentifier類(lèi)型,可選。本證書(shū)里不包括。

UniqueIdentifier ::= BIT STRING


subjectUniqueID

證書(shū)持有人ID,UniqueIdentifier類(lèi)型,可選。本證書(shū)里不包括。

extensions

證書(shū)擴(kuò)展字段,Extensions類(lèi)型,可選。

Extensions ::= SEQUENCE SIZE (1…MAX) OF Extension


Extension ::= SEQUENCE {


extnID OBJECT IDENTIFIER,


critical BOOLEAN DEFAULT FALSE,


extnValue OCTET STRING }


本文證書(shū)包含的擴(kuò)展字段如下圖,具體不再一一說(shuō)明。



第二個(gè)元素signatureAlgorithm值也是‘’1.2.156.10197.1.501”,說(shuō)明同樣是SM2簽名。


第三個(gè)元素signatureValue是BIT STRING類(lèi)型。值為對(duì)tbsCertificate的SM2簽名,而按照國(guó)密標(biāo)準(zhǔn)本身SM2簽名也是ASN1結(jié)構(gòu),所以從下圖可以看出簽名的r-s結(jié)構(gòu)。



證書(shū)的X509結(jié)構(gòu)就介紹完畢,歡迎各位指正。

————————————————

版權(quán)聲明:本文為CSDN博主「weixin_45303938」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_45303938/article/details/109138064


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: X509

技術(shù)專(zhuān)區(qū)

關(guān)閉