【转】 X.509 数字证书结构和实例 (二)

发布时间: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(可选),只在证书版本23中才有

        subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,

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

        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标准文档中摘取的两个证书例子。本文在例子的原来基础上加了些注释。

1DSA证书,CA证书

证书包含699字节,证书版本号为3

该证书包含以下内容:
(a)
证书序列号是17 (0x11);
(b)
证书使用DSASHA-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 公钥及其参数(三个整数pqg;
(g)
证书包含一个使用者密钥标识符(subjectKeyIdentifier)扩展项
(h)
证书是一个CA证书(通过basicConstraints基本扩展项标识)

0000 30 82 02 b7 695: SEQUENCE    // Certificate:: SEQUENCE类型(30),数据块长度字节

282),长度为69502 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,三个整数

pqg

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

2RSA证书,非CA证书

证书包含675字节,证书版本号为3

该证书包含以下内容:
(a)
证书序列号是256 (0x100);
(b)
证书使用RSAMD2哈希算法签名;
(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),数据块长度不定,由0000作为结束符

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

参考:

RFC 2459 Internet X.509 Public Key Infrastructure

X.509证书结构简介及实例

X.509第三版的证书结构