打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
X509证书结构解析

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,打开证书文件效果如下:

下面介绍一下各个元素。第一个是tbsCertificateTBSCertificate类型的结构定义如下。

TBSCertificate::=SEQUENCE{

   version          [0]   EXPLICIT Version DEFAULT v1,

   serialNumber           CertificateSerialNumber,

   signature              AlgorithmIdentifier,

   issuer                 Name,

   validity               Validity,

   subject                Name,

   subjectPublicKeyInfo    SubjectPublicKeyInfo,

   issuerUniqueID    [1]   IMPLICIT UniqueIdentifierOPTIONAL,

   subjectUniqueID   [2]   IMPLICIT UniqueIdentifier OPTIONAL,

   extensions        [3]   EXPLICITExtensions OPTIONAL

}

TBSCertificate同样是SEQUENCE,其各个元素说明如下:

l version

证书的版本号,Version类型,其定义如下:

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

version的默认值是V1,但实际上现在使用的证书基本是V2V3版本。由于Tag标记为[0]   EXPLICIT,所以版本号如果没有被省略,编码时会在它外面加一个新的标识。如下图,可见此证书的版本是V3

l serialNumber

证书的序列号,CertificateSerialNumber类型,即INTEGER类型。

CertificateSerialNumber ::= INTEGER

l signature

虽然名字叫”signature”,它实际上是证书进行签名时的算法标识,AlgorithmIdentifier类型,定义如下:

AlgorithmIdentifier ::= SEQUENCE {

algorithm OBJECT IDENTIFIER,

parameters ANY DEFINED BY algorithm OPTIONAL

 }

下图可以看出,此证书的签名算法标识是‘’1.2.156.10197.1.501”,也就是使用SM2SM3的签名算法。

l 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)。

l validity

证书有效期,Validity类型

Validity ::= SEQUENCE {

       notBefore      Time,  -- 证书有效期起始时间

       notAfter       Time  -- 证书有效期终止时间

       }

Time ::= CHOICE {

     utcTime       UTCTime,

       generalTime    GeneralizedTime }

         从上图可以看出,本文证书有效期起始和终止时间是UTCTime类型,长度5年。

l subject

证书持有人(主体)信息。本文证书包含国别,所在省(stateOrProviceName),地址(localityName),机构名称和通用名称等持有人信息。

l subjectPublicKeyInfo

证书公钥信息,SubjectPublicKeyInfo类型,定义如下:

SubjectPublicKeyInfo ::= SEQUENCE {

       algorithm           AlgorithmIdentifier, -- 公钥算法

       subjectPublicKey     BITSTRING            -- 公钥值

       }

         本证书algorithm的算法标识是ecPublicJKey,说明使用ECC算法,第二个OBJECT IDENTIFIER是参数,具体说明是采用基于ECC算法的SM2算法。

l issuerUniqueID

证书颁发者IDUniqueIdentifier类型,可选。本证书里不包括。

UniqueIdentifier ::= BIT STRING

l subjectUniqueID

证书持有人IDUniqueIdentifier类型,可选。本证书里不包括。

l 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签名。

第三个元素signatureValueBIT STRING类型。值为对tbsCertificateSM2签名,而按照国密标准本身SM2签名也是ASN1结构,所以从下图可以看出签名的r-s结构。

证书的X509结构就介绍完毕,欢迎各位指正。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何查看证书的16进制DER编码,及证书的各个域DER格式
数字签名与数字证书技术简介(三)
数字签名与数字证书技术简介
X.509证书的编码及解析:程序解析以及winhex模板解析
X.509 数字证书结构和实例
asn.1介绍(来自网上)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服