博客專欄

        EEPW首頁 > 博客 > X509證書結構解析

        X509證書結構解析

        發布人:電子禪石 時間:2023-07-28 來源:工程師 發布文章

        X509證書是采用DER編碼的ASN1結構數據:


        Certificate::=SEQUENCE{


        tbsCertificate TBSCertificate,


        signatureAlgorithm AlgorithmIdentifier,


        signatureValue BIT STRING


        }


        整體X509證書是SEQUENCE類型,包括三個元素。其中,tbsCertificate是證書數據本身, TBSCertificate類型,是整個X509證書數據的主體。所謂”TBS”就是“To be signed”的縮寫,tbsCertificate的意思就是“要被簽名的證書內容”。因為在前面的文章講過,每張證書都是被上一級證書對應的私鑰簽過名的(頂級證書是自簽名);signatureAlgorithm就是所使用的的簽名算法標識;signatureValue就是簽名結果。


        建議使用一些ASN1解析工具,打開一個證書cer文件,對照實例學習。我這里用的是Asn1Editor,打開證書文件效果如下:



        下面介紹一下各個元素。第一個是tbsCertificate,TBSCertificate類型,其結構定義如下。


        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,其各個元素說明如下:


        version

        證書的版本號,Version類型,其定義如下:

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


        version的默認值是V1,但實際上現在使用的證書基本是V2或V3版本。由于Tag標記為[0] EXPLICIT,所以版本號如果沒有被省略,編碼時會在它外面加一個新的標識。如下圖,可見此證書的版本是V3:




        serialNumber

        證書的序列號,CertificateSerialNumber類型,即INTEGER類型。

        CertificateSerialNumber ::= INTEGER


        signature

        雖然名字叫”signature”,它實際上是證書進行簽名時的算法標識,AlgorithmIdentifier類型,定義如下:

        AlgorithmIdentifier ::= SEQUENCE {


        algorithm OBJECT IDENTIFIER,


        parameters ANY DEFINED BY algorithm OPTIONAL


        }


        下圖可以看出,此證書的簽名算法標識是‘’1.2.156.10197.1.501”,也就是使用SM2和SM3的簽名算法。



        issuer

        證書頒發者信息,Name類型,相關類型定義如下:

        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


        本文中的證書頒發者包含三個信息:所在國別(countryName),頒發機構名稱(organizationName)和通用名稱(commonName)。




        validity

        證書有效期,Validity類型

        Validity ::= SEQUENCE {


        notBefore Time, – 證書有效期起始時間


        notAfter Time – 證書有效期終止時間


        }


        Time ::= CHOICE {


        utcTime UTCTime,


        generalTime GeneralizedTime }


        從上圖可以看出,本文證書有效期起始和終止時間是UTCTime類型,長度5年。


        subject

        證書持有人(主體)信息。本文證書包含國別,所在省(stateOrProviceName),地址(localityName),機構名稱和通用名稱等持有人信息。

        subjectPublicKeyInfo

        證書公鑰信息,SubjectPublicKeyInfo類型,定義如下:

        SubjectPublicKeyInfo ::= SEQUENCE {


        algorithm AlgorithmIdentifier, – 公鑰算法


        subjectPublicKey BIT STRING – 公鑰值


        }


        本證書algorithm的算法標識是ecPublicJKey,說明使用ECC算法,第二個OBJECT IDENTIFIER是參數,具體說明是采用基于ECC算法的SM2算法。




        issuerUniqueID

        證書頒發者ID,UniqueIdentifier類型,可選。本證書里不包括。

        UniqueIdentifier ::= BIT STRING


        subjectUniqueID

        證書持有人ID,UniqueIdentifier類型,可選。本證書里不包括。

        extensions

        證書擴展字段,Extensions類型,可選。

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


        Extension ::= SEQUENCE {


        extnID OBJECT IDENTIFIER,


        critical BOOLEAN DEFAULT FALSE,


        extnValue OCTET STRING }


        本文證書包含的擴展字段如下圖,具體不再一一說明。



        第二個元素signatureAlgorithm值也是‘’1.2.156.10197.1.501”,說明同樣是SM2簽名。


        第三個元素signatureValue是BIT STRING類型。值為對tbsCertificate的SM2簽名,而按照國密標準本身SM2簽名也是ASN1結構,所以從下圖可以看出簽名的r-s結構。



        證書的X509結構就介紹完畢,歡迎各位指正。

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

        版權聲明:本文為CSDN博主「weixin_45303938」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

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


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: X509

        技術專區

        關閉
        主站蜘蛛池模板: 苍山县| 临安市| 和林格尔县| 伊金霍洛旗| 和顺县| 临高县| 庄浪县| 广宗县| 平湖市| 重庆市| 灵丘县| 永吉县| 平陆县| 五寨县| 江城| 廊坊市| 乌拉特前旗| 溧阳市| 高淳县| 吉木乃县| 大埔区| 白玉县| 郑州市| 兴隆县| 晋宁县| 济源市| 澎湖县| 汶上县| 新和县| 萍乡市| 威宁| 新民市| 鄂州市| 门源| 伊金霍洛旗| 普宁市| 镇远县| 布尔津县| 根河市| 阳泉市| 奉贤区|