数字证书X.509格式详解

本文根据标准文档,对x509证书的详细格式进行介绍。

1 介绍

证书的标准规范,其中使用最广泛的是由ITU(International TelecommumcationUnion,国际电信联盟)和ISO(IntemationalOrganizationforStandardization, 国际标准化组织)两个组织制定的X.509规范。

X.509是一种非常通用的证书格式。所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN.1语法进行编码。

在一份证书中,必须证明公钥及其所有者的姓名是一致的。对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式),具体可以参考标准原文:

RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile (rfc-editor.org) 或者 RFC5280 中文翻译 中文RFC RFC文档 RFC翻译 RFC中文版 (rfc2cn.com)

1.1 证书结构

一个具体的 X.509 v3 数字证书结构如下 :

-- 由标准原文解读而来 --

Certificate  ::=  SEQUENCE  {
   
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

一个证书必须包含以上三个字段,下面分别介绍它们的含义。

1.1.1 tbsCertificate (To Be Signed Certificate) 证书

证书中待签名的部分,包含了证书的核心内容, 该字段包含主题和颁发者的名称、与主题相关联的公钥、有效期和其他相关信息。原文第 4.1.2 节详细描述了这些字段;TBSC 证书通常包括扩展,如标准原文第 4.2 节所述。TBSC 证书内容格式如下:

TBSCertificate  ::=  SEQUENCE  {
   
        version         [0]  EXPLICIT Version DEFAULT v1,    // (1)版本号
        serialNumber         CertificateSerialNumber,        // (2)序列号
        signature            AlgorithmIdentifier,            // (3)用于签署证书的算法信息
        issuer               Name,                           // (4)颁发者名称
        validity             Validity,                       // (5)有效期
        subject              Name,                           // (6)被签名者名称
        subjectPublicKeyInfo SubjectPublicKeyInfo,           // (7)被签名者公钥信息
        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 // (8)颁发者唯一ID-可选
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 // (9)被签者唯一ID-可选
        extensions      [3]  EXPLICIT Extensions OPTIONAL        -- If present, version MUST be v3       // (10)扩展信息-可选
        }

    -- 以下对成员结构定义解释 --

    (1) version 版本号
    Version  ::=  INTEGER  {
     v1(0), v2(1), v3(2)  }

    (2) serialNumber 序列号
    CertificateSerialNumber  ::=  INTEGER

    (3) signature 用于签署证书的算法信息 -- 定义了用于签署证书的签名算法,包括算法的标识符及其任何相关的参数,。
    AlgorithmIdentifier  ::=  SEQUENCE  {
   
        algorithm               OBJECT IDENTIFIER,                   -- 公钥签名算法类型
        parameters              ANY DEFINED BY algorithm OPTIONAL  } -- 可选字段,根据签名算法类型,填充算法的信息

    (4) issuer name 颁发者信息
        -- 颁发者字段标识已签署和颁发证书的实体。颁发者字段必须包含非空的可分辨名称 Distinguished Name(DN)。它通常由一系列属性组成,用以唯一地标识证书的发行者。DN中的属性由以下ASN.1结构定义:
    Name ::= CHOICE {
    rdnSequence  RDNSequence }  -- only one possibility for now
    -RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

    --RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue -- 定义说明了`RelativeDistinguishedName`是一个由一个或多个
                                                                               -- `AttributeTypeAndValue`对组成的集合,每个对代表了名称中的
                                                                               -- 一个属性及其对应的值

    ---AttributeTypeAndValue ::= SEQUENCE {
   
        type     AttributeType,   
        value    AttributeValue } 

    ----AttributeType   ::= OBJECT IDENTIFIER               -- 指明属性类型,如国家(C)、组织(O)、通用名(CN)等。
    ----AttributeValue  ::= ANY -- DEFINED BY AttributeType -- 属性的具体值,比如国家代码、组织名称、个人姓名等。

    -----DirectoryString ::= CHOICE {
    -- 定义 AttributeValue 的编码方式
         teletexString           TeletexString (SIZE (1..MAX)),
         printableString         PrintableString (SIZE (1..MAX)),
         universalString         UniversalString (SIZE (1..MAX)),
         utf8String              UTF8String (SIZE (1..MAX)),
         bmpString               BMPString (SIZE (1..MAX)) }
    name值举例,内容通常包括以下这些信息:
    1. **Common Name (CN)**: 发行者的常见名称,比如CA的名称。
    2. **Organization (O)**: 发行者的组织名称。
    3. **Organizational Unit (OU)**: 发行者所在组织的部门或单元名称。
    4. **Country (C)**: 发行者所在的国家代码(两位字母ISO 3166国家代码)。
    5. **Locality (L)**: 发行者所在的城市或区域名称。
    6. **State or Province (ST or P)**: 发行者所在的州、省或行政区名称。
    7. **Email**: 在某些情况下,可能会包含发行者的电子邮件地址。
    subject:
      relativeDistinguishedName:
       sequence:
        attributeTypeAndValue:
         type: "2.5.4.3"  // OID for Common Name (CN)
         value: utf8String: "John Doe"

    (5) validity 有效期
    Validity ::= SEQUENCE {
   
        notBefore      Time,  -- 到期时间
        notAfter       Time } -- 起始时间
    -Time ::= CHOICE {
           -- 定义了可用的时间格式
        utcTime        UTCTime,
        generalTime    GeneralizedTime }

    (6) subject name 使用者信息 -- 一般和issuer name规定一致

    (7) subjectPublicKeyInfo 公钥信息
    SubjectPublicKeyInfo  ::=  SEQUENCE  {
   
        algorithm            AlgorithmIdentifier, -- 算法类型,可包含算法额外参数
        subjectPublicKey     BIT STRING  }        -- 使用者的公钥内容

    (8) issuerUniqueID 颁发者唯一ID -- 可选的
    UniqueIdentifier  ::=  BIT STRING

    (9) subjectUniqueID 使用者唯一ID -- 可选的

    (10) extensions 扩展选项 -- 可选的
    Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
    Extension  ::=  SEQUENCE  {
   
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING
                    -- contains the DER encoding of an ASN.1 value
                    -- corresponding to the extension type identified
                    -- by extnID  }

1.1.2 signatureAlgorithm 签名算法

signatureAlgorithm 字段包含 CA 用于签署此证书的加密算法的标识符。[RFC 3279]、[RFC 4055]和[RFC 4491]列出了支持的签名算法,但也可能支持其他签名算法。该字段必须包含与序列 tbsCertificate(第 4.1.2.3 节)中签名字段相同的算法标识符。签名算法内容格式如下:

AlgorithmIdentifier  ::=  SEQUENCE  {
   
algorithm               OBJECT IDENTIFIER,                   -- 签名算法类型
parameters              ANY DEFINED BY algorithm OPTIONAL  } -- 算法额外信息,可选
1.1.3 signatureValue 签名内容

根据 signatureAlgorithm 签名算法部分指定的

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值