发布时间:2011-4-10 18:42
分类名称:PKI
三、 X.509证书详细描述
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中才有
}
Version ::= INTEGER { v1(0), v2(1), v3(2) }
CertificateSerialNumber ::= INTEGER
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
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 ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType
Validity ::= SEQUENCE {
notBefore Time, -- 证书有效期起始时间
notAfter Time -- 证书有效期终止时间
}
Time ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier, -- 公钥算法
subjectPublicKey BIT STRING -- 公钥值
}
subjectPublicKey:
RSAPublicKey ::= SEQUENCE { -- RSA算法时的公钥值
modulus INTEGER, -- n
publicExponent INTEGER -- e -- }
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING }
四、 X.509数字证书实例
这是从RFC 2459 Internet X.509 Public Key Infrastructure标准文档中摘取的两个证书例子。本文在例子的原来基础上加了些注释。
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) 证书包含一个1024 bit DSA 公钥及其参数(三个整数p、q、g);
(g) 证书包含一个使用者密钥标识符(subjectKeyIdentifier)扩展项
(h) 证书是一个CA证书(通过basicConstraints基本扩展项标识)
0000 30 82 02 b7 695: SEQUENCE // Certificate:: SEQUENCE类型(30),数据块长度字节
为2(82),长度为695(02 b7)
0004 30 82 02 77 631: . SEQUENCE // tbsCertificate:: SEQUENCE类型,长度631
0008 a0 03 3: . . [0] // Version:: 特殊内容-证书版本(a0),长度3
0010 02 01 1: . . . INTEGER 2 //整数类型(02),长度1
: 02 // 版本3(2)
0013 02 01 1: . . INTEGER 17 // serialNumber:: 整数类型(02),长度1
: 11 // 证书序列号 17
0016 30 09 9: . . SEQUENCE // signature:: SEQUENCE类型(30),长度9
0018 06 07 7: . . . OID 1.2.840.10040.4.3: dsa-with-sha //signature:: OBJECT
IDENTIFIER类型,长度7
: 2a 86 48 ce 38 04 03 // 表示dsa-with-sha算法(见注1)
0027 30 2a 42: . . SEQUENCE // 以下红色的数据块表示issuer信息
0029 31 0b 11: . . . SET
0031 30 09 9: . . . . SEQUENCE
0033 06 03 3: . . . . . OID 2.5.4.6: C
: 55 04 06
0038 13 02 2: . . . . . PrintableString 'US'
: 55 53
0042 31 0c 12: . . . SET
0044 30 0a 10: . . . . SEQUENCE
0046 06 03 3: . . . . . OID 2.5.4.10: O
: 55 04 0a
0051 13 03 3: . . . . . PrintableString 'gov'
: 67 6f 76
0056 31 0d 13: . . . SET
0058 30 0b 11: . . . . SEQUENCE
0060 06 03 3: . . . . . OID 2.5.4.11: OU
: 55 04 0b
0065 13 04 4: . . . . . PrintableString 'nist'
: 6e 69 73 74
0071 30 1e 30: . . SEQUENCE // validity:: SEQUENCE类型(30),长度30
0073 17 0d 13: . . . UTCTime '970630000000Z' // notBefore:: UTCTime类型(23)
长度13
: 39 37 30 36 33 30 30 30 30 30 30 30 5a
0088 17 0d 13: . . . UTCTime '971231000000Z' // notBefore:: UTCTime类型(23)
长度13
: 39 37 31 32 33 31 30 30 30 30 30 30 5a
0103 30 2a 42: . . SEQUENCE // 以下红色的数据块表示subject信息
0105 31 0b 11: . . . SET
0107 30 09 9: . . . . SEQUENCE
0109 06 03 3: . . . . . OID 2.5.4.6: C
: 55 04 06
0114 13 02 2: . . . . . PrintableString 'US'
: 55 53
0118 31 0c 12: . . . SET
0120 30 0a 10: . . . . SEQUENCE
0122 06 03 3: . . . . . OID 2.5.4.10: O
: 55 04 0a
0127 13 03 3: . . . . . PrintableString 'gov'
: 67 6f 76
0132 31 0d 13: . . . SET
0134 30 0b 11: . . . . SEQUENCE
0136 06 03 3: . . . . . OID 2.5.4.11: OU
: 55 04 0b
0141 13 04 4: . . . . . PrintableString 'nist'
: 6e 69 73 74
0147 30 82 01 b4 436: . . SEQUENCE // subjectPublicKeyInfo:: SEQUENCE类型(30),
长度436
0151 30 82 01 29 297: . . . SEQUENCE
0155 06 07 7: . . . . OID 1.2.840.10040.4.1: dsa //algorithm:: OBJECT
IDENTIFIER类型,长度7
: 2a 86 48 ce 38 04 01 // 表示DSA算法(见注1)
0164 30 82 01 1c 284: . . . . SEQUENCE // DSA算法的parameters,三个整数
p、q、g
0168 02 81 80 128: . . . . . INTEGER // p参数
: d4 38 02 c5 35 7b d5 0b a1 7e 5d 72 59 63 55 d3
: 45 56 ea e2 25 1a 6b c5 a4 ab aa 0b d4 62 b4 d2
: 21 b1 95 a2 c6 01 c9 c3 fa 01 6f 79 86 83 3d 03
: 61 e1 f1 92 ac bc 03 4e 89 a3 c9 53 4a f7 e2 a6
: 48 cf 42 1e 21 b1 5c 2b 3a 7f ba be 6b 5a f7 0a
: 26 d8 8e 1b eb ec bf 1e 5a 3f 45 c0 bd 31 23 be
: 69 71 a7 c2 90 fe a5 d6 80 b5 24 dc 44 9c eb 4d
: f9 da f0 c8 e8 a2 4c 99 07 5c 8e 35 2b 7d 57 8d
0299 02 14 20: . . . . . INTEGER // q参数
: a7 83 9b f3 bd 2c 20 07 fc 4c e7 e8 9f f3 39 83
: 51 0d dc dd
0321 02 81 80 128: . . . . . INTEGER // g参数
: 0e 3b 46 31 8a 0a 58 86 40 84 e3 a1 22 0d 88 ca
: 90 88 57 64 9f 01 21 e0 15 05 94 24 82 e2 10 90
: d9 e1 4e 10 5c e7 54 6b d4 0c 2b 1b 59 0a a0 b5
: a1 7d b5 07 e3 65 7c ea 90 d8 8e 30 42 e4 85 bb
: ac fa 4e 76 4b 78 0e df 6c e5 a6 e1 bd 59 77 7d
: a6 97 59 c5 29 a7 b3 3f 95 3e 9d f1 59 2d f7 42
: 87 62 3f f1 b8 6f c7 3d 4b b8 8d 74 c4 ca 44 90
: cf 67 db de 14 60 97 4a d1 f7 6d 9e 09 94 c4 0d
0452 03 81 84 132: . . . BIT STRING (0 unused bits) // subjectPublicKey::
公钥值,BIT STRING类型,长度132字节(好像应该是131字节)
0455 02 81 80 128: . . . . INTEGER // 公钥值,表现为integer类型,128字节,1024位
: aa 98 ea 13 94 a2 db f1 5b 7f 98 2f 78 e7 d8 e3
: b9 71 86 f6 80 2f 40 39 c3 da 3b 4b 13 46 26 ee
: 0d 56 c5 a3 3a 39 b7 7d 33 c2 6b 5c 77 92 f2 55
: 65 90 39 cd 1a 3c 86 e1 32 eb 25 bc 91 c4 ff 80
: 4f 36 61 bd cc e2 61 04 e0 7e 60 13 ca c0 9c dd
: e0 ea 41 de 33 c1 f1 44 a9 bc 71 de cf 59 d4 6e
: da 44 99 3c 21 64 e4 78 54 9d d0 7b ba 4e f5 18
: 4d 5e 39 30 bf e0 d1 f6 f4 83 25 4f 14 aa 71 e1
0587 a3 32 50: . . [3] // extensions:: 特殊内容-证书扩展部分(a3),
长度50
0589 30 30 48: . . . SEQUENCE
0591 30 0f 9: . . . . SEQUENCE // 扩展basicConstraints
0593 06 03 3: . . . . . OID 2.5.29.19: basicConstraints
: 55 1d 13
0598 01 01 1: . . . . . TRUE // true,表示为CA证书
: ff
0601 04 05 5: . . . . . OCTET STRING
: 30 03 01 01 ff
0608 30 1d 29: . . . . SEQUENCE // 扩展 subjectKeyIdentifier
0610 06 03 3: . . . . . OID 2.5.29.14: subjectKeyIdentifier
: 55 1d 0e
0615 04 16 22: . . . . . OCTET STRING //扩展 subjectKeyIdentifier的值
: 04 14 e7 26 c5 54 cd 5b a3 6f 35 68 95 aa d5 ff
: 1c 21 e4 22 75 d6
0639 30 09 9: . SEQUENCE // signatureAlgorithm:: = AlgorithmIdentifier
0641 06 07 7: . . OID 1.2.840.10040.4.3: dsa-with-sha
: 2a 86 48 ce 38 04 03
0650 03 2f 47: . BIT STRING (0 unused bits) // bit串,证书签名值,47字节
0652 30 2c 44: . . SEQUENCE
0654 02 14 20: . . . INTEGER // 签名值,20字节,160bit
: a0 66 c1 76 33 99 13 51 8d 93 64 2f ca 13 73 de
: 79 1a 7d 33
0674 02 14 20: . . . INTEGER // 签名值,20字节,160bit
: 5d 90 f6 ce 92 4a bf 29 11 24 80 28 a6 5a 8e 73
: b6 76 02 68
2、RSA证书,非CA证书
证书包含675字节,证书版本号为3。
该证书包含以下内容:
(a) 证书序列号是256 (0x100);
(b) 证书使用RSA和MD2哈希算法签名;
(c) 证书发行者的名字是OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de Catalunya; C=ES
(d) 证书主体的名字是CN=Francisco Jordan;OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de Catalunya; C=ES
(e) 证书的有效期从1996-5-21到 1997-5-21;
(f) 证书包含一个768 bit RSA 公钥;
(g) 证书是一个非CA证书(通过一个基本扩展项标识)
(h) 证书包含证书主体别名、证书发行者别名–都是URLs
(i) 证书包含一个发行者密钥标识符和证书策略扩展,和
(j) 证书包含一个密钥用法的扩展,指定用于数字签名
0000 30 80 : SEQUENCE (size undefined) // Certificate:: SEQUENCE类型(30),数据块长度不定,由00、00作为结束符
0002 30 82 02 40 576: . SEQUENCE // tbsCertificate:: SEQUENCE类型,长度576
0006 a0 03 3: . . [0] // Version:: 特殊内容-证书版本(a0),长度3
0008 02 01 1: . . . INTEGER 2 //整数类型(02),长度1
: 02 // 版本3(2)
0011 02 02 2: . . INTEGER 256 //serialNumber:: 整数类型(02),长度2
: 01 00 // 证书序列号256
0015 30 0d 13: . . SEQUENCE // signature:: SEQUENCE类型(30),长度13
0017 06 09 9: . . . OID 1.2.840.113549.1.1.2: MD2WithRSAEncryption
// signature:: OBJECT IDENTIFIER类型,长度9
: 2a 86 48 86 f7 0d 01 01 02 //MD2WithRSAEncryption算法(见注1)
0028 05 00 0: . . . NULL
0030 30 68 88: . . SEQUENCE // 以下红色的数据块表示issuer信息
0032 31 0b 11: . . . SET
0034 30 09 9: . . . . SEQUENCE
0036 06 03 3: . . . . . OID 2.5.4.6: C
: 55 04 06
0041 13 02 2: . . . . . PrintableString 'ES'
: 45 53
0045 31 2d 45: . . . SET
0047 30 2b 43: . . . . SEQUENCE
0049 06 03 3: . . . . . OID 2.5.4.10: O
: 55 04 0a
0054 13 24 36: . . . . . PrintableString
'Universitat Politecnica de Catalunya'
: 55 6e 69 76 65 72 73 69 74 61 74 20 50 6f 6c 69
: 74 65 63 6e 69 63 61 20 64 65 20 43 61 74 61 6c
: 75 6e 79 61
0092 31 2a 42: . . . SET
0094 30 28 40: . . . . SEQUENCE
0096 06 03 3: . . . . . OID 2.5.4.11: OU
: 55 04 0b
0101 13 21 33: . . . . . PrintableString
'OU=Dept. Arquitectura de Computadors'
: 44 65 70 74 2e 20 41 72 71 75 69 74 65 63 74 75
: 72 61 20 64 65 20 43 6f 6d 70 75 74 61 64 6f 72
: 73
0136 30 1e 30: . . SEQUENCE // validity:: SEQUENCE类型(30),长度30
0138 17 0d 13: . . . UTCTime '960521095826Z' // notBefore:: UTCTime类型(23)
长度13
: 39 36 30 37 32 32 31 37 33 38 30 32 5a
0153 17 0d 13: . . . UTCTime '979521095826Z' // notBefore:: UTCTime类型(23)
长度13
: 39 37 30 37 32 32 31 37 33 38 30 32 5a
0168 30 81 83 112: . . SEQUENCE // 以下红色的数据块表示subject信息
0171 31 0b 11: . . . SET
0173 30 09 9: . . . . SEQUENCE
0175 06 03 3: . . . . . OID 2.5.4.6: C
: 55 04 06
0180 13 02 2: . . . . . PrintableString 'ES'
: 45 53
0184 31 2d 12: . . . SET
0186 30 2b 16: . . . . SEQUENCE
0188 06 03 3: . . . . . OID 2.5.4.10: O
: 55 04 0a
0193 13 24 36: . . . . . PrintableString
'Universitat Politecnica de Catalunya'
: 55 6e 69 76 65 72 73 69 74 61 74 20 50 6f 6c 69
: 74 65 63 6e 69 63 61 20 64 65 20 43 61 74 61 6c
: 75 6e 79 61
0231 31 2a 42: . . . SET
0233 30 28 40: . . . . SEQUENCE
0235 06 03 3: . . . . . OID 2.5.4.11: OU
: 55 04 0b
0240 13 21 33: . . . . . PrintableString
'Dept. Arquitectura de Computadors'
: 44 65 70 74 2e 20 41 72 71 75 69 74 65 63 74 75
: 72 61 20 64 65 20 43 6f 6d 70 75 74 61 64 6f 72
: 73
0275 31 19 22: . . . SET
0277 30 17 20: . . . . SEQUENCE
0279 06 03 3: . . . . . OID 2.5.4.3: CN
: 55 04 03
0284 13 10 16: . . . . . PrintableString 'Francisco Jordan'
: 46 72 61 6e 63 69 73 63 6f 20 4a 6f 72 64 61 6e
0302 30 7c 2: . . SEQUENCE // subjectPublicKeyInfo:: SEQUENCE类型(30),
长度不定
0304 30 0d 13: . . . SEQUENCE
0306 06 09 9: . . . . OID 1.2.840.113549.1.1.1: RSAEncryption //algorithm::
OBJECT IDENTIFIER类型,长度9
: 2a 86 48 86 f7 0d 01 01 01 // 表示RSA算法(见注1)
0317 05 00 0: . . . . NULL
0319 03 6b 107: . . . BIT STRING (0 unused bits) // subjectPublicKey::
公钥值,BIT STRING类型,长度107字节
: 00 (0 unused bits)
0321 03 68 104: . . . . BIT STRING (0 unused bits)
0323 02 61 97: . . . . . INTEGER (0 unused bits) // 公钥值,96字节,768位
: 00 (0 unused bits)
: be aa 8b 77 54 a3 af ca 77 9f 2f b0 cf 43 88 ff
: a6 6d 79 55 5b 61 8c 68 ec 48 1e 8a 86 38 a4 fe
: 19 b8 62 17 1d 9d 0f 47 2c ff 63 8f 29 91 04 d1
: 52 bc 7f 67 b6 b2 8f 74 55 c1 33 21 6c 8f ab 01
: 95 24 c8 b2 73 93 9d 22 61 50 a9 35 fb 9d 57 50
: 32 ef 56 52 50 93 ab b1 88 94 78 56 15 c6 1c 8b
0423 02 03 3: . . . . . INTEGER // RSA加密算法的exponent值
: 01 00 01
0428 a3 81 97 151: . . [3] // extensions:: 特殊内容-证书扩展部分(a3),
长度151
0431 30 3c 60: . . . SEQUENCE
0433 30 1f 31: . . . . SEQUENCE // 扩展发行者密钥标识符
authorityKeyIdentifier
0435 06 03 3: . . . . . OID 2.5.29.35: authorityKeyIdentifier
: 55 1d 23
0440 04 14 22: . . . . . OCTET STRING
: 30 12 80 10 0e 6b 3a bf 04 ea 04 c3 0e 6b 3a bf
: 04 ea 04 c3
0464 30 19 25: . . . . SEQUENCE // 扩展keyUsage
0466 06 03 3: . . . . . OID 2.5.29.15: keyUsage
: 55 1d 0f
0471 01 01 1: . . . . . TRUE
: ff
0474 04 04 4: . . . . . OCTET STRING
: 03 02 07 80
0480 30 19 25: . . . . SEQUENCE //扩展certificatePolicies
0482 06 03 3: . . . . . OID 2.5.29.32: certificatePolicies
: 55 1d 20
0487 04 21 33: . . . . . OCTET STRING
: 30 1f 30 1d 06 04 2a 84 80 00 30 15 30 07 06 05
: 2a 84 80 00 01 30 0a 06 05 2a 84 80 00 02 02 01
: 0a
0522 30 1c 28: . . . . SEQUENCE //扩展subjectAltName
0524 06 03 3: . . . . . OID 2.5.29.17: subjectAltName
: 55 1d 11
0529 04 15 21: . . . . . OCTET STRING
: 30 13 86 11 68 74 74 70 3a 2f 2f 61 63 2e 75 70
: 63 2e 65 73 2f
0552 30 19 25: . . . . SEQUENCE //扩展issuerAltName
0554 06 03 3: . . . . . OID 2.5.29.18: issuerAltName
: 55 1d 12
0559 04 12 18: . . . . . OCTET STRING
: 30 14 86 12 68 74 74 70 3a 2f 2f 77 77 77 2e 75
: 70 63 2e 65
0579 30 80 : . SEQUENCE (indefinite length) // signatureAlgorithm
不知为何这里的前面算法为空
0581 06 07 7: . . OID
0583 05 00 0: . . NULL
0585 00 00 0: . . end of contents marker
0587 03 81 81 47: . BIT STRING // 签名值
: 00 (0 unused bits)
: 5c 01 bd b5 41 88 87 7a 0e d3 0e 6b 3a bf 04 ea
: 04 cb 5f 61 72 3c a3 bd 78 f5 66 17 fe 37 3a ab
: eb 67 bf b7 da a8 38 f6 33 15 71 75 2f b9 8c 91
: a0 e4 87 ba 4b 43 a0 22 8f d3 a9 86 43 89 e6 50
: 5c 01 bd b5 41 88 87 7a 0e d3 0e 6b 3a bf 04 ea
: 04 cb 5f 61 72 3c a3 bd 78 f5 66 17 fe 37 3a ab
: eb 67 bf b7 da a8 38 f6 33 15 71 75 2f b9 8c 91
: a0 e4 87 ba 4b 43 a0 22 8f d3 a9 86 43 89 e6 50
0637 00 00 0: . . end of contents marker
注1: OID表示的算法
DSA -- 1.2.840.10040.4.1
sha1DSA -- 1.2.840.10040.4.3
RSA -- 1.2.840.113549.1.1.1
md2RSA -- 1.2.840.113549.1.1.2
md4RSA -- 1.2.840.113549.1.1.3
md5RSA -- 1.2.840.113549.1.1.4
sha1RSA -- 1.2.840.113549.1.1.5
参考: