X509数字证书结构与实例.docx
- 文档编号:24397023
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:23
- 大小:23.68KB
X509数字证书结构与实例.docx
《X509数字证书结构与实例.docx》由会员分享,可在线阅读,更多相关《X509数字证书结构与实例.docx(23页珍藏版)》请在冰豆网上搜索。
X509数字证书结构与实例
X.509数字证书结构和实例
一、 X.509数字证书的编码
X.509证书的结构是用ASN1(AbstractSyntaxNotationOne)进行描述数据结构,并使用ASN1语法进行编码。
ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成:
1、数据块数据类型标识(一个字节)
数据类型包括简单类型和结构类型。
简单类型是不能再分解类型,如整型(INTERGER)、比特串(BITSTRING)、字节串(OCTETSTRING)、对象标示符(OBJECTIDENTIFIER)、日期型(UTCTime)等。
结构类型是由简单类型和结构类型组合而成的,如顺序类型(SEQUENCE,SEQUENCEOF)、选择类型(CHOICE)、集合类型(SET)等。
● 顺序类型的数据块值由按给定顺序成员成员数据块值按照顺序组成,;
● 选择类型的数据块值由多个成员数据数据块类型中选择一个的数据块值;
● 集合数据块类型由成员数据块类型的一个或多个值构成。
这个标识字节的结构如下:
1.1. Bit8-bit7
用来标示TAG类型,共有四种,分别是universal(00)、application(01)、context-specific(10)和private(11)。
这两位为universal(00)时,bit5-bit1的值表示不同的universal的值:
标记(TAG) 对应类型
[UNIVERSAL1]BOOLEAN[有两个值:
false或true]
[UNIVERSAL2]INTEGER[整型值]
[UNIVERSAL3]BITSTRING[0位或多位]
[UNIVERSAL4]OCTETSTRING[0字节或多字节]
[UNIVERSAL5]NULL
[UNIVERSAL6]OBJECTIDENTIFIER[相应于一个对象的独特标识数字]
[UNIVERSAL7]OBJECTDESCRIPTOR [一个对象的简称]
[UNIVERSAL8]EXTERNAL,INSTANCEOF[ASN.1没有定义的数据类型]
[UNIVERSAL9]REAL[实数值]
[UNIVERSAL10]ENUMERATED[数值列表,这些数据每个都有独特的标识符,作为ASN.1定义数据类型的一部分]
[UNIVERSAL12]UTF8String
[UNIVERSAL13]RELATIVE-OID
[UNIVERSAL16]SEQUENCE,SEQUENCEOF[有序数列,SEQUENCE里面的每个数值都可以是不同类型的,而SEQUENCEOF里是0个或多个类型相同的数据]
[UNIVERSAL17]SET,SETOF[无序数列,SET里面的每个数值都可以是不同类型的,而SETOF里是0个或多个类型相同的数据]
[UNIVERSAL18]NumericString[0-9以及空格]
[UNIVERSAL19]PrintableString[A-Z、a-z、0-9、空格以及符号'()+,-./:
=?
]
[UNIVERSAL20]TeletexString,T61String
[UNIVERSAL21]VideotexString
[UNIVERSAL22]IA5String
[UNIVERSAL23]UTCTime[统一全球时间格式]
[UNIVERSAL24]GeneralizedTime
[UNIVERSAL25]GraphicString
[UNIVERSAL26]VisibleString,ISO646String
[UNIVERSAL27]GeneralString
[UNIVERSAL28]UniversalString
[UNIVERSAL29]CHARACTERSTRING
[UNIVERSAL30]BMPString
[UNIVERSAL31]...reservedforfutureuse
这两位为context-specific(10)时,bit5-bit1的值表示特殊内容:
[0]–-表示证书的版本
[1]–-issuerUniqueID,表示证书发行者的唯一id
[2]–-subjectUniqueID,表示证书主体的唯一id
[3]–-表示证书的扩展字段
1.2. bit6
表示是否为结构类型(1位结构类型);0则表明编码类型是简单类型。
1.3. bit5-bit1
是类型的TAG值。
根据bit8-bit7的不同值有不同的含义,具体含义见上面的描述。
如SEQUENCE类型数据块,其TAG类型位UNIVERSAL(00),属于结构类型
(1),TAG值为16(10000)所以其类型标示字段值为(00110000),即为0x30。
再如,证书扩展字段类型的数据块,TAG类型为(10),属结构类型
(1),TAG的值为3(00011),所以其类型标示字段值为(),即为0xA3。
2、数据块长度(1-128个字节)
长度字段,有两种编码格式。
若长度值小于等于127,则用一个字节表示,bit8=0,bit7-bit1存放长度值;
若长度值大于127,则用多个字节表示,可以有2到127个字节。
第一个字节的第8位为1,其它低7位给出后面该域使用的字节的数量,从该域第二个字节开始给出数据的长度,高位优先。
还有一种特殊情况,这个字节为0x80,表示数据块长度不定,由数据块结束标识结束数据块。
3、数据块的值
存放数据块的值,具体编码随数据块类型不同而不同。
4、数据块结束标识(可选)
结束标示字段,两个字节(0x0000),只有在长度值为不定时才会出现。
二、 X.509证书的结构
1、X.509证书基本部分
1.1. 版本号.
标识证书的版本(版本1、版本2或是版本3)。
1.2. 序列号
标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符。
1.3. 签名
用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。
例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密。
1.4. 颁发者
证书颁发者的可识别名(DN)。
1.5. 有效期
证书有效期的时间段。
本字段由”NotBefore”和”NotAfter”两项组成,它们分别由UTC时间或一般的时间表示(在RFC2459中有详细的时间表示规则)。
1.6. 主体
证书拥有者的可识别名,这个字段必须是非空的,除非你在证书扩展中有别名。
1.7. 主体公钥信息
主体的公钥(以及算法标识符)。
1.8. 颁发者唯一标识符
标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。
1.9. 主体唯一标识符
证书拥有者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。
2、X.509证书扩展部分
可选的标准和专用的扩展(仅在版本2和版本3中使用),扩展部分的元素都有这样的结构:
Extension :
:
= SEQUENCE {
extnID OBJECTIDENTIFIER,
critical BOOLEANDEFAULTFALSE,
extnValue OCTETSTRING }
extnID:
表示一个扩展元素的OID
critical:
表示这个扩展元素是否极重要
extnValue:
表示这个扩展元素的值,字符串类型。
扩展部分包括:
2.1. 发行者密钥标识符
证书所含密钥的唯一标识符,用来区分同一证书拥有者的多对密钥。
2.2. 密钥使用
一个比特串,指明(限定)证书的公钥可以完成的功能或服务,如:
证书签名、数据加密等。
如果某一证书将KeyUsage扩展标记为“极重要”,而且设置为“keyCertSign”,则在SSL通信期间该证书出现时将被拒绝,因为该证书扩展表示相关私钥应只用于签写证书,而不应该用于SSL。
2.3. CRL分布点
指明CRL的分布地点。
2.4. 私钥的使用期
指明证书中与公钥相联系的私钥的使用期限,它也有NotBefore和NotAfter组成。
若此项不存在时,公私钥的使用期是一样的。
2.5. 证书策略
由对象标识符和限定符组成,这些对象标识符说明证书的颁发和使用策略有关。
2.6. 策略映射
表明两个CA域之间的一个或多个策略对象标识符的等价关系,仅在CA证书里存在。
2.7. 主体别名
指出证书拥有者的别名,如电子邮件地址、IP地址等,别名是和DN绑定在一起的。
2.8. 颁发者别名
指出证书颁发者的别名,如电子邮件地址、IP地址等,但颁发者的DN必须出现在证书的颁发者字段。
2.9. 主体目录属性
指出证书拥有者的一系列属性。
可以使用这一项来传递访问控制信息。
三、 X.509证书详细描述
Certificate :
:
= SEQUENCE {
tbsCertificate TBSCertificate,--证书主体
signatureAlgorithm AlgorithmIdentifier,--证书签名算法标识
signatureValue BITSTRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.
}
TBSCertificate :
:
= SEQUENCE {
version [0] EXPLICITVersionDEFAULTv1,--证书版本号
serialNumber CertificateSerialNumber,--证书序列号,对同一CA所颁发的证书,序列号唯一标识证书
signature AlgorithmIdentifier,--证书签名算法标识
issuer Name, --证书发行者名称
validity Validity, --证书有效期
subject Name, --证书主体名称
subjectPublicKeyInfoSubjectPublicKeyInfo,--证书公钥
issuerUniqueID [1] IMPLICITUniqueIdentifierOPTIONAL,
--证书发行者ID(可选),只在证书版本2、3中才有
subjectUniqueID[2] IMPLICITUniqueIdentifierOPTIONAL,
--证书主体ID(可选),只在证书版本2、3中才有
extensions [3] EXPLICITExtensionsOPTIONAL
--证书扩展段(可选),只在证书版本3中才有
}
Version :
:
= INTEGER { v1(0),v2
(1),v3
(2) }
CertificateSerialNumber :
:
= INTEGER
AlgorithmIdentifier :
:
= SEQUENCE {
algorithm OBJECTIDENTIFIER,
parameters ANYDEFINEDBYalgorithmOPTIONAL }
parameters:
Dss-Parms :
:
= SEQUENCE { --parameters,DSA(DSS)算法时的parameters,
RSA算法没有此参数
p INTEGER,
q INTEGER,
g INTEGER }
signatureValue:
Dss-Sig-Value :
:
= SEQUENCE { --sha1DSA签名算法时,签名值
r INTEGER,
s INTEGER }
Name:
:
=CHOICE{
RDNSequence}
RDNSequence:
:
=SEQUENCEOFRelativeDistinguishedName
RelativeDistinguishedName:
:
=
SETOFAttributeTypeAndValue
AttributeTypeAndValue:
:
=SEQUENCE{
type AttributeType,
value AttributeValue}
AttributeType:
:
=OBJECTIDENTIFIER
AttributeValue:
:
=ANYDEFINEDBYAttributeType
Validity:
:
=SEQUENCE{
notBefore Time, --证书有效期起始时间
notAfter Time --证书有效期终止时间
}
Time:
:
=CHOICE{
utcTime UTCTime,
generalTime GeneralizedTime}
UniqueIdentifier :
:
= BITSTRING
SubjectPublicKeyInfo :
:
= SEQUENCE {
algorithm AlgorithmIdentifier, --公钥算法
subjectPublicKey BITSTRING --公钥值
}
subjectPublicKey:
RSAPublicKey:
:
=SEQUENCE{ --RSA算法时的公钥值
modulus INTEGER,--n
publicExponent INTEGER --e--}
Extensions :
:
= SEQUENCESIZE(1..MAX)OFExtension
Extension :
:
= SEQUENCE {
extnID OBJECTIDENTIFIER,
critical BOOLEANDEFAULTFALSE,
extnValue OCTETSTRING }
四、 X.509数字证书实例
这是从RFC2459InternetX.509PublicKeyInfrastructure标准文档中摘取的两个证书例子。
本文在例子的原来基础上加了些注释。
1、DSA证书,CA证书
证书包含699字节,证书版本号为3。
该证书包含以下内容:
(a)证书序列号是17(0x11);
(b)证书使用DSA和SHA-1哈希算法签名;
(c)证书发行者的名字是OU=nist;O=gov;C=US
(d)证书主体的名字是OU=nist;O=gov;C=US
(e)证书的有效期从1997-6-30到1997-12-31;
(f)证书包含一个1024bitDSA公钥及其参数(三个整数p、q、g);
(g)证书包含一个使用者密钥标识符(subjectKeyIdentifier)扩展项
(h)证书是一个CA证书(通过basicConstraints基本扩展项标识)
0000308202b7 695:
SEQUENCE //Certificate:
:
SEQUENCE类型(30),数据块长度字节
为2(82),长度为695(02b7)
000430820277 631:
.SEQUENCE //tbsCertificate:
:
SEQUENCE类型,长度631
0008a003 3:
..[0] //Version:
:
特殊内容-证书版本(a0),长度3
00100201 1:
...INTEGER2 //整数类型(02),长度1
:
02 //版本3
(2)
00130201 1:
..INTEGER17 //serialNumber:
:
整数类型(02),长度1
:
11 //证书序列号17
00163009 9:
..SEQUENCE //signature:
:
SEQUENCE类型(30),长度9
00180607 7:
...OIDdsa-with-sha//signature:
:
OBJECT
IDENTIFIER类型,长度7
:
2a8648ce380403 //表示dsa-with-sha算法(见注1)
0027302a 42:
..SEQUENCE //以下红色的数据块表示issuer信息
0029310b 11:
...SET
00313009 9:
....SEQUENCE
00330603 3:
.....OIDC
:
550406
00381302 2:
.....PrintableString 'US'
:
5553
0042310c 12:
...SET
0044300a 10:
....SEQUENCE
00460603 3:
.....OIDO
:
55040a
00511303 3:
.....PrintableString 'gov'
:
676f76
0056310d 13:
...SET
0058300b 11:
....SEQUENCE
00600603 3:
.....OIDOU
:
55040b
00651304 4:
.....PrintableString 'nist'
:
6e697374
0071301e 30:
..SEQUENCE //validity:
:
SEQUENCE类型(30),长度30
0073170d 13:
...UTCTime '0000Z'//notBefore:
:
UTCTime类型(23)
长度13
:
3937303633303030303030305a
0088170d 13:
...UTCTime '0000Z'//notBefore:
:
UTCTime类型(23)
长度13
:
3937313233313030303030305a
0103302a 42:
..SEQUENCE //以下红色的数据块表示subject信息
0105310b 11:
...SET
01073009 9:
....SEQUENCE
01090603 3:
.....OIDC
:
550406
01141302 2:
.....PrintableString 'US'
:
5553
0118310c 12:
...SET
0120300a 10:
....SEQUENCE
01220603 3:
.....OIDO
:
55040a
01271303 3:
.....PrintableString 'gov'
:
676f76
0132310d 13:
...SET
0134300b 11:
....SEQUENCE
01360603 3:
.....OIDOU
:
55040b
01411304 4:
.....PrintableString 'nist'
:
6e697374
014
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- X509 数字证书 结构 实例