X.509 协议:V3版证书编码、解码规则解析

X.509 协议:V3版证书编码、解码规则解析
                                
                                                ---By HengLiang Yang     2000.07.06

一、证书格式(待签名部分)
    
    1、版本号 V3                                        Version
    
    2、序列号                                                Serial Number
    
    3、签名算法OID                                    Signature Algorithm Identifier
    
    4、签发者                                                Issuer(各项名字的集合)
    
    5、有效期                                                Validity
        生效期                                                NotBefore
        失效期                                                NotAfter
    
    6、申请者                                                Subject (各项名字的集合)
    
    7、申请者公钥信息                                Subject Public Key Info
        算法                                                    Algorithm
        公钥PK                                                Subject Public Key
    
    8、签发者唯一ID                                    Unique ID of CA
    
    9、申请者唯一ID                                    Unique ID of Subject
    
    10、扩展项                                            Extension
        标准扩展项
        扩展扩展项
        
        
二、对应项解析
    
    1、版本号 V3
        DER 编码:A0 03 02(整数标志) 01(版本号长度) 02(V3);
    
    2、序列号
        DER 编码:02 (整数标志) 02(序列号长度) 12 23(长度为0x1223);
    
    3、签名算法OID    
        DER 编码:30(SEQUENCE) 0D(长度) 06(后接OID长度) 09(签名算法OID的长度)
         (2A 86 48 86 F7 0D 01 01 05)(SHA1WITHRSAEncrypt的OID) (05 00)(结束)
    
    4、签发者
        C 语言定义的结构为
        struct CerInfo_PK_ {
        //    char ID[STRING_FILED_MAX_LEN];                                //UniqueID号
                char countryName[STRING_FILED_MAX_LEN];                    //国名
                char organizationName[STRING_FILED_MAX_LEN];            //组织名
                char organizationalUnitName[STRING_FILED_MAX_LEN];        //部门名
                char stateOrProvinceName[STRING_FILED_MAX_LEN];            //省名
                char commanName[STRING_FILED_MAX_LEN];                    //通用名
                char localityName[STRING_FILED_MAX_LEN];                //所在地名
                char email[STRING_FILED_MAX_LEN];                        //email地址
                char postalAddress[STRING_FILED_MAX_LEN];                //通信地址    
                char postalCode[STRING_FILED_MAX_LEN];                    //邮政编码
                char postalOfficeBox[STRING_FILED_MAX_LEN];                //邮箱
                char telephoneNumber[STRING_FILED_MAX_LEN];                //电话号码
                char telexNumber[STRING_FILED_MAX_LEN];                    //传真号码
                char title[STRING_FILED_MAX_LEN];                        //头衔
                char surName[STRING_FILED_MAX_LEN];                        //姓0x550404
                char givenName[STRING_FILED_MAX_LEN];                    //名
                char initials[STRING_FILED_MAX_LEN];                    //曾用名

        };
        DER 编码:
            签发者包长:
                30(SEQUENCE) 
                82(包长用二字节表示) 
                01 3e(包长为0X013E,不包括前4字节);
                    31(SET:子包) 
                        0b(子包长) 
                        30 09 06 03(同上) 
                        (55 04 06)(国名的OID) 
                        13(PrintableString) (如果是0x1E,则表示后面的数据是unicode类型)
                        02(长度) 
                        43 4e(cn:中国);
                        ... ...
        
    
    5、有效期(CTime 格式);                                                
        生效期            30 1e 
                                    17(UTCTime) 
                                    0d(长度) 
                                    (30 30 30 34 30 35 32 32 34 39 35 34 5a)(000405224954Z)                                 
        失效期                17(UTCTime) 
                                    0d(长度) 
                                    (30 33 31 32 33 31 31 35 35 39 35 39 5a)(031231155959Z)                                 

    
    6、申请者同签发者编码;
    
    7、申请者公钥信息    
            DER 编码:
                30(SEQUENCE) 
                81(后接一字节长度) 
                9f(公钥包长度为0X9F,不包括前3字节);            
            算法    (同3解析,这里的OID为rsa)
                DER 编码:30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 
            公钥PK    
                DER 编码:03(BIT STRING) 
                                81(后接一字节长度) 
                                8d(长度) 
                                00(此包无用比特数为0,BIT类必有此项);
                                常说的DER编码公钥从这里开始            
                                    30(SEQUENCE) 
                                    81(后接一字节长度) 
                                    89(DER公钥包长度为0X89,不包括前3字节)
                                        02(INTEGER) 
                                        81(后接一字节长度) 
                                        81(公钥N长度为0X81,不包括前3字节) 
                                        00(因N的第一字节高位为1,INTEGER数前必须加0X00,高位为0则不加) 
                                        C1 ......
                                        (02 03 01 00 01)(公钥指数E,解析同上)
    
    8、签发者唯一ID
        DER 编码:81(签发者唯一ID标志) 11(长度) 00(固定字节) 1c ......(16字ID)
            
    9、申请者唯一ID    
        DER 编码:82(申请者唯一ID标志) 11(长度) 00(固定字节) 22 ......(16字ID)
    
    10、扩展项
    
        标准扩展项    扩展扩展项
        
        DER 编码:A3(扩展项标志)
                            82(长度字节为2)
                            01 5D(长度为0X015D)
                        30 82 XX XX     
                                30 1F(子包)
                                06 03(标志以下有3字节的OID)
                                55 1D 23(签发者密钥标志符,即签发者的DER编码公钥的HASH(SHA1)结果)
                                04(OCTET STRING)
                                18(长度)
                                    30(子包)
                                    16(长度)
                                    80(标志)
                                    14(长度)
                                    ......(20字节签发者的DER编码公钥的HASH(SHA1)结果)    
                                
                                30 1D(子包)
                                06 03(标志以下有3字节的OID)
                                55 1D    0E(申请者密钥标志符,即申请者的DER编码公钥的HASH(SHA1)结果)
                                04(OCTET STRING) 
                                16(长度)
                                04(OCTET STRING)
                                14(长度)
                                ......(20字节申请者的DER编码公钥的HASH(SHA1)结果)
                                
                                30 0E
                                06 03
                                55 1D 0F(KeyUsage OID)
                                04 04
                                03 02
                                01(1比特无效)
                                F6(1111011?)
                                
                                30 15
                                06 03
                                55 1D 20(CertificatePolicies OID)
                                04 0E
                                    30 0C
                                        30 0A
                                        06 08
                                        (2B 06 01 04 01 95 18 0A)
                                
                                30 5F
                                06 03
                                55 1D 11(申请者Email地址、HTTP地址 OID)
                                04 58
                                    30 56
                                        81 1A 
                                            (......)Email地址
                                        86 38 
                                            (......)HTTP地址
                                
                                30 45 
                                06 03
                                55 1D 12(签发者Email地址、HTTP地址 OID)
                                04 3E
                                    30 3C
                                        81 0F
                                            (......)Email地址
                                        86 29
                                            (......)HTTP地址
                                        
                                30 0F
                                06 03
                                55 1D 13(BasicConstraints  OID)
                                04 05
                                    30 03    01 01 FF(Subject Type=CA,Path Length Constraint=None)
                                    (如果不是CA 则 30 00指明)        
                                    
                                    
                                    
                                30 37
                                06 03
                                55 1D 1F(CRLdistpoints OID)
                                04 30
                                    30 2E
                                        30 2C
                                         A0 2A
                                          A0 28
                                            86 26
                                                (......)(HTTP地址)
                                                
                                                
                                                
                                30 20 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 01 (OID) 
                                        04 12 
                                            16 10 
                                                31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 
                                30 22 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 02  (OID)
                                        04 14 
                                            16 12 
                                                31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 
                                30 11 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 03  (OID)
                                        04 03 
                                            16 01 
                                                31 
                                30 11 06 0a 
                                    2b 06 01 04 01 a9 43 64 02 03  (OID)
                                        04 03 
                                            02 01 
                                                03 
                                30 21 06 0a 
                                    2b 06 01 04 01 a9 43 64 02 04  (OID)
                                        04 13 
                                            16 11 
                                                31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 
                                30 19 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 08  (OID)
                                        04 0b 
                                            16 09 
                                                6f 70 65 72 61 74 6f 72 32 
                                30 22 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 09  (OID)
                                        04 14 
                                            16 12 
                                                31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 
                                30 1e 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 0b  (OID)
                                        04 10 
                                            16 0e 
                                                31 31 31 31 31 31 31 31 31 31 31 31 31 31 
                                30 11 06 0a 
                                    2b 06 01 04 01 a9 43 64 05 0c  (OID)
                                        04 03 
                                            16 01 
                                                31 
                                30 11 06 0a 
                                    2b 06 01 04 01 a9 43 64 02 02  (OID)
                                        04 03 
                                            02 01 
                                                00 
                                30 11 06 0a 
                                    2b 06 01 04 01 a9 43 64 02 01  (OID)
                                        04 03 
                                            16 01 
                                                31 
                    
                                                
                                                
三、部分定义                                
        
    1、KeyUsage
            
            定义                                比特位                            中文定义
        -------------------------------------------------------        
        digitalSignature   |   0x8000                        |数字签名证书
        nonRepudiation     |   0x4000                        |非抵赖证书
        keyEncipherment    |   0x2000                        |密钥加密证书
        dataEncipherment   |   0x1000                        |数据加密证书
        keyAgreement       |   0x0800                        |密钥交换
        keyCertSign        |   0x0400                        |签发证书
        crlSign            |   0x0200                        |签发CRL文件
        encipherOnly       |   0x0100                        |仅用于加密
        decipherOnly       |   0x0080                        |仅用于解密
        -------------------------------------------------------
        DER编码:55 1D 0F(keyUsage OID) 
                         04 04 
                         03 02 
                         01(无用比特为1) 
                         FE(有用比特为7,即1111111?,因此,此keyUsage所拥有的权限为:
                                 digitalSignature      数字签名证书
                                nonRepudiation        非抵赖证书
                                keyEncipherment        密钥加密证书
                                dataEncipherment      数据加密证书
                                keyAgreement           密钥交换
                                keyCertSign            签发证书
                                crlSign             签发CRL文件
                         );

                         55 1D 0F(keyUsage OID) 
                         04 05 
                         03 03 
                         07(无用比特为7) 
                         FE(有用比特为9,即111111111???????,因此,此keyUsage所拥有的权限为:
                                 digitalSignature      数字签名证书
                                nonRepudiation        非抵赖证书
                                keyEncipherment        密钥加密证书
                                dataEncipherment      数据加密证书
                                keyAgreement           密钥交换
                                keyCertSign            签发证书
                                crlSign             签发CRL文件
                                encipherOnly           仅用于加密
                                decipherOnly           仅用于解密
                         );

    2、CRL_revcation_reasonCode
    
        定义                                    中文定义
        -------------------------------------------------------        
          unspecified            |  0            |未指定
            keyCompromise        |  1            |密钥泄露
            caCompromise         |  2            |CA遭到破坏
            affiliationChanged   |  3            |从属关系改变
            superseded           |  4            |被取代
            cessationOfOperation |  5            |终止操作
            certificateHold      |  6            |证书挂起
            removeFromCRL        |  8            |从CRL文件中移出
        -------------------------------------------------------

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值