X509数字证书结构和实例解析.docx
- 文档编号:27725208
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:26
- 大小:28.61KB
X509数字证书结构和实例解析.docx
《X509数字证书结构和实例解析.docx》由会员分享,可在线阅读,更多相关《X509数字证书结构和实例解析.docx(26页珍藏版)》请在冰豆网上搜索。
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)。
1.2.Bit6表示是否为结构类型(1位结构类型);0则表明编码类型是简单类型。
1.3.Bit5-bit1是类型的TAG值。
根据bit8-bit7的不同值有不同的含义,具体含义见下表。
当Bit8-bit7为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
当Bit8-bit7为context-specific(10)时,bit5-bit1的值表示特殊内容:
[0]–-表示证书的版本
[1]–-issuerUniqueID,表示证书发行者的唯一id
[2]–-subjectUniqueID,表示证书主体的唯一id
[3]–-表示证书的扩展字段
如SEQUENCE类型数据块,其TAG类型位UNIVERSAL(00),属于结构类型
(1),TAG值为16(10000)所以其类型标示字段值为(00110000),即为0x30。
再如,证书扩展字段类型的数据块,TAG类型为(10),属结构类型
(1),TAG的值为3(00011),所以其类型标示字段值为(10100011),即为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基本扩展项标识)
地址
内容
意义
0000
308202b7
SEQUENCECertificate:
:
SEQUENCE类型(30),数据块长度字节为2(82),长度为695(02b7)
0004
30820277
SEQUENCEtbsCertificate:
:
SEQUENCE类型,长度631
0008
a003
Version:
:
特殊内容-证书版本(a0),长度3
0010
020102
INTEGER2version:
:
整数类型(02),长度1,版本3
(2)
0013
020111
INTEGER17serialNumber:
:
整数类型(02),长度1,证书序列号17
0016
3009
SEQUENCEsignature:
:
SEQUENCE类型(30),长度9
0018
0607
signature:
:
OBJECTIDENTIFIER类型,长度7,dsa-with-sha算法
OID1.2.840.10040.4.3:
dsa-with-sha
2a8648ce380403
0027
302a
SEQUENCE以下的数据块表示issuer信息,长度为42
0029
310b
SET开始一个集合,长度为11
0031
3009
SEQUENCE开始一个序列,长度为9
0033
0603
OBJECTIDENTIFIER类型,长度3
OID2.5.4.6C
550406
0038
1302
PrintableString 'US'
5553
0042
310c
SET开始一个集合,长度为12
0044
300a
SEQUENCE开始一个序列,长度为10
0046
0603
OBJECTIDENTIFIER类型,长度3
OID2.5.4.10O
55040a
0051
1303
PrintableString 'gov'
676f76
0056
310d
SET开始一个集合,长度为13
0058
300b
SEQUENCE开始一个序列,长度为11
0060
0603
OBJECTIDENTIFIER类型,长度3
OID2.5.4.11:
OU
55040b
0065
1304
PrintableString 'nist'
6e697374
0071
301e
SEQUENCEvalidity:
:
SEQUENCE类型(30),长度30
0073
170d
notBefore:
:
UTCTime类型(23),长度13
UTCTime '970630000000Z'
3937303633303030
303030305a
0088
170d
notBefore:
:
UTCTime类型(23),长度13
UTCTime '971231000000Z'
3937313233313030
303030305a
0103
302a
SEQUENCE以下数据块表示subject信息,长度42
0105
310b
SET,长度11
0107
3009
SEQUENCE长度9
0109
0603
OBJECTIDENTIFIER类型,长度3
OID2.5.4.6:
C
550406
0114
1302
PrintableString 'US'
5553
0118
310c
SET,长度12
0120
300a
SEQUENCE长度10
0122
0603
OBJECTIDENTIFIER类型,长度3
OID2.5.4.10:
O
55040a
0127
1303
PrintableString 'gov'
676f76
0132
310d
SET,长度13
0134
300b
SEQUENCE长度11
0136
0603
OBJECTIDENTIFIER类型,长度3
OID2.5.4.11:
OU
55040b
0141
1304
PrintableString 'nist'
6e697374
0147
308201b4
SEQUENCEsubjectPublicKeyInfo:
:
SEQUENCE类型(30),长度436
0151
30820129
SEQUENCE类型(30),长度297
0155
0607
IDENTIFIER类型,长度7
OID1.2.840.10040.4.1
2a8648ce380401
0164
3082011c
SEQUENCE类型(30),长度284
DSA算法的parameters,三个整数p、q、g
0168
028180
INTEGER p参数,长度128
d43802c5357bd50ba1
7e5d72596355d34556
eae2251a6bc5a4abaa
0bd462b4d221b195a2
c601c9c3fa016f7986
833d03 61e1f192acbc
034e89a3c9534af7e2
a648cf421e21b15c2b
3a7fbabe6b5af70a26
d88e1bebecbf1e5a3f
45c0bd3123be6971a7
c290fea5d680b524dc
449ceb4df9daf0c8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- X509 数字证书 结构 实例 解析