数字证书的结构

数字证书的编码

  X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN1语法进行编码。

  ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成:

  1)数据块数据类型标识(一个字节)

这个标识字节的结构如下:

  1.1)Bit8-bit7用来标示 TAG 类型,共有四种,分别是universal(00)、application(01)、context-specific(10)和private(11)。

  1.2)Bit6表示是否为结构类型(1位结构类型);0则表明编码类型是简单类型。

  1.3)Bit5-bit1是类型的TAG值。根据bit8-bit7的不同值有不同的含义

2)数据块长度(1-128个字节)

  长度字段,有两种编码格式。

  若长度值小于等于127,则用一个字节表示,bit8 = 0, bit7-bit1 存放长度值;

  若长度值大于127,则用多个字节表示,可以有2到127个字节。第一个字节的第8位为1,其它低7位给出后面该域使用的字节的数量,从该域第二个字节开始给出数据的长度,高位优先。

  还有一种特殊情况,这个字节为0x80,表示数据块长度不定,由数据块结束标识结束数据块。

  3)数据块的值

  存放数据块的值,具体编码随数据块类型不同而不同。

  4)数据块结束标识(可选)

  结束标示字段,两个字节(0x0000),只有在长度值为不定时才会出现。

数字证书的结构

  1)X.509证书基本部分

  1.1)版本号.

    标识证书的版本(版本1、版本2或是版本3)。

  1.2)序列号

    标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符。

  1.3)签名

    用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密。

  1.4)颁发者

    证书颁发者的可识别名(DN)。

  1.5)有效期

    证书有效期的时间段。本字段由”Not Before”和”Not After”两项组成,它们分别由UTC时间或一般的时间表示(在RFC2459中有详细的时间表示规则)。

  1.6)主体

    证书拥有者的可识别名,这个字段必须是非空的,除非你在证书扩展中有别名。

  1.7)主体公钥信息

    主体的公钥(以及算法标识符)。

  1.8)颁发者唯一标识符

    标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。

  1.9)主体唯一标识符

    证书拥有者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。

  2)X.509证书扩展部分

  可选的标准和专用的扩展(仅在版本2和版本3中使用),扩展部分的元素都有这样的结构:

  Extension ::= SEQUENCE {

  extnID OBJECT IDENTIFIER,

  critical BOOLEAN DEFAULT FALSE,

  extnValue OCTET STRING }

  extnID:表示一个扩展元素的OID

  critical:表示这个扩展元素是否极重要

  extnValue:表示这个扩展元素的值,字符串类型。

  2)扩展部分包括:

  2.1)发行者密钥标识符

    证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥。

  2.2)密钥使用

    一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:证书签名、数据加密等。如果某一证书将 KeyUsage 扩展标记为“极重要”,而且设置为“keyCertSign”,则在 SSL 通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于 SSL。

  2.3)CRL分布点

    指明CRL的分布地点。

  2.4) 私钥的使用期

    指明证书中与公钥相联系的私钥的使用期限,它也有Not Before和Not After组成。若此项不存在时,公私钥的使用期是一样的。

  2.5) 证书策略

    由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关。

  2.6) 策略映射

    表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在。

  2.7)主体别名

    指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的。

  2.8) 颁发者别名

    指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段。

  2.9)主体目录属性

    指出证书拥有者的一系列属性。可以使用这一项来传递访问控制信息。

数字证书详细描述

Certificate ::= SEQUENCE {

tbsCertificate TBSCertificate, -- 证书主体

signatureAlgorithm AlgorithmIdentifier, -- 证书签名算法标识

signatureValue BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.

}

TBSCertificate ::= SEQUENCE {

version [0] EXPLICIT Version DEFAULT v1, -- 证书版本号

serialNumber CertificateSerialNumber, -- 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书

signature AlgorithmIdentifier, --证书签名算法标识

issuer Name, --证书发行者名称

validity Validity, --证书有效期

subject Name, --证书主体名称

subjectPublicKeyInfo SubjectPublicKeyInfo,--证书公钥

issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,

-- 证书发行者ID(可选),只在证书版本2、3中才有

subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,

-- 证书主体ID(可选),只在证书版本2、3中才有

extensions [3] EXPLICIT Extensions OPTIONAL

-- 证书扩展段(可选),只在证书版本3中才有

}


你可能感兴趣的:(网络)