• 数字证书编码ASN.1


    数字证书编码ASN.1

    作者:20191322wyl

    (头秃了)

    任务详情

    1. 参考附件中图书p223 中13.2的实验指导,完成DER编码
    2. 序列号=1174(0x0496),证书签发者 DN="CN=Virtual CA,C=CN",证书持有者DN="CN=你的名字拼音, OU=Person,C=CN",证书有效期=20200222000000-20220222000000。
    3. 用echo -n -e "编码" > 你的学号.der中,用OpenSSL asn1parse 分析编码的正确性
    4. 提交编码过程文档(推荐markdown格式)

    Name编码过程

    根据证书信息确认用户DER编码值
    Name 为 CHOICE 类型,其 DER 编码值与 RDNSequence 相同

    RDNSequence的内容串由3个 RelativeDistinguishedName的 DER编码值组成

    RelativeDistinguishedName的内容串由Attribute ValucAssertion的 DER编码值组成

    Attribute ValucAssertion的内容串由AttributeTypeAttributeValue的 DER编码值组成

    所以,要算证书信息的DER编码值,就必须依次算出AttributeTypeAttributeValueAttribute ValucAssertionRelativeDistinguishedName的DER值

    AttributeType编码

    AttributeType为OBJECT IDENTIFIER基本类型,编码规则采用基本类型定长模式。

    对于标识串,采用低标识编码方式,只需1个字节。OBJECT IDENTIFIER的tag 为Ox06;class选择universal,则位8和位7为0,OBJECT IDENTIFIER为基本类型,则位6为0。因此,标识串=Ox06(0000 1010)

    image-20220407224501358

    对于长度串,采用短型编码方式,只需1个字节

    此时,countryName为‘’CN‘’,organizationName为学号,即“20191322”,commonName为姓名,即“wuyonglin”

    对于内容串,由3个字节组成。2.5.4.6编码为55 04 06,2.5.4.10编码为55 04 0A,2.5.4.3编码为55 04 03

    AttributeValue编码

    AttributeValue为 PrintableString 基本类型,编码规则采用基本类型定长模式。
    对于标识串,采用低标识编码方式,只需1个字节。PrintableString 的tag 为0x13;class选择universal,则位8和位7为0,OBJECT IDENTIFIER为基本类型,则位6为0。因此,标识串=Ox13(0001 0011)AttributeValue
    对于长度串,采用短型编码方式,只需1个字节。

    对于内容串,由其ASCII码组成。

    CN ASCII码 : 434E

    20191322 ASCII码 : 3230313931333232

    wuyonglin ASCII码 : 7775796f6e676c696e

    image-20220407225558880

    image-20220407225656365

    image-20220407225737814

    AttributeValue 标识符 长度串 内容串
    CN 13 02 43 4E
    20191322 13 08 32 30 31 39 31 33 32 32
    wuyonglin 13 09 77 75 79 6F 6E 67 6C 69 6E

    Attribute ValueAssertion编码

    对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE的 tag 为0x10;class选择universal,则位8和位7为0,SEQUENCE为结构类型,则位6为1。因此,标识串=0x30。

    tag   0X10 = 0001 0000
    标识串        0011 0000 = 0x30
    

    对于长度串,采用短型编码方式,只需1个字节。

    对于内容串,由AttributeType和 AttributeValue的 DER编码值组成。(注意不是内容串拼接,是der值拼接)

    • 内容串分别为:

      CN: 06 03 55 04 06 43 4E (55 04 06 + 43 4E )

      20191322:06 03 55 04 0A 32 30 31 39 3133 32 32

      wuyonglin:06 03 55 04 03 77 75 79 6F 6E 67 6C 69 6E

    Attribute ValueAssertion 标识符 长度串 内容串
    CN 30 09 06 03 55 04 06 13 02 43 4E
    20191322 30 0F 06 03 55 04 0A 13 08 32 30 31 39 31 33 32 32
    wuyonglin 30 10 06 03 55 04 03 13 09 77 75 79 6F 6E 67 6C 69 6E

    RelativeDistinguishedName

    对于标识串,采用低标识编码方式,只需1个字节。SET OF的 tag 为0x11; class 选择universal,则位8和位7为0,SET OF为结构类型,则位6为1。因此,标识串=0x31。

    tag:                 0x11 = 0001 0001
    SEQUENCE OF为结构类型:        0011 0001  = 0x31
    

    对于长度串,采用短型编码方式,只需1个字节。

    对于内容串,由Attribute ValucAssertion的DER编码值组成

    内容串分别为:

    CN: 30 09 06 03 55 04 06 43 4E

    20191322:30 0F 06 03 55 04 0A 32 30 31 39 3133 32 32

    wuyonglin:03 10 06 03 55 04 03 77 75 79 6F 6E 67 6C 69 6E

    RelativeDistinguishedName 标识符 长度串 内容串
    CN 31 0B 30 09 06 03 55 04 06 13 02 43 4E
    20191322 31 11 30 0F 06 03 55 04 0A 13 08 32 30 31 39 31 33 32 32
    wuyonglin 31 12 30 10 06 03 55 04 03 13 09 77 75 79 6F 6E 67 6C 69 6E

    RDNSequence编码

    对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE OF的 tag 为0x10;class选择universal,则位8和位7为0,SEQUENCE OF为结构类型,则位6为1。因此,标识串=0x30。

    tag:                 0x10 = 0001 0000
    SEQUENCE OF为结构类型:        0011 0001  = 0x30
    

    对于长度串,采用短型编码方式,只需1个字节。

    对于内容串,由3个 RelativeDistinguishedName的 DER编码值组成。

    RDNSequence 标识符 长度串 内容串
    CN、20191322、wuyonglin 30 34 31 0B 30 09 06 03 55 04 06 13 02 43 4E 31 11 30 0F 06 03 55 04 0A 13 08 32 30 31 39 31 33 32 32 31 12 30 10 06 03 55 04 03 13 09 77 75 79 6F 6E 67 6C 69 6E

    Name编码

    Name为CHOICE类型,其DER编码值与RDNSequence相同。用户Test User 1最终DER编码值如下表所示。

    30 34
          31 0B
                30 09
                      06 03 55 04 06 
                      13 02 43 4E 
    31 11
          30 0F 
                06 03 55 04 0A
                13 08 
                         32 30 31 39 31 33 32 32 
    31 12
          30 10
                06 03 55 04 03
                13 09
                         77 75 79 6F 6E 67 6C 69 6E
    

    UTC Time编码(对有效期编码)

    image-20220408195949859

    标记符为0x17

    20200222000000 转 16进制 32 30 32 30 30 32 32 32 30 30 30 30 30 30

    20220222000000 转 16进制 32 30 32 32 30 32 32 32 30 30 30 30 30 30

    ASN.1 标记符 长度串 内容串
    20200222000000 17 0E 32 30 32 30 30 32 32 32 30 30 30 30 30 30
    20220222000000 17 0E 32 30 32 32 30 32 32 32 30 30 30 30 30 30

    Integer编码(对序列号编码)

    标记符为0x02

    ASN.1 标记符 长度串 内容串
    1174 0x02 02 04 96

    验证

    ##输入序列号
    echo -n -e "\x02\x02\x04\x96" > 20191322.der
    
    ##输入证书有效期
    echo -n -e "\x17\x0E\x32\x30\x32\x30\x30\x32\x32\x32\x30\x30\x30\x30\x30\x30\x17\x0E\x32\x30\x32\x32\x30\x32\x32\x32\x30\x30\x30\x30\x30\x30" >> 20191322.der
    
    ##输入国家,签发人,签发机构
    echo -n -e "\x30\x34\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x13\x08\x32\x30\x31\x39\x31\x33\x32\x32\x31\x12\x30\x10\x06\x03\x55\x04\x03\x13\x09\x77\x75\x79\x6F\x6E\x67\x6C\x69\x6E" >> 20191322.der
    
    

    openssl asn1parse -inform DER -in 20191322.der

    image-20220408203237621

  • 相关阅读:
    Hibernate注解(一对一、一对多、多对多)
    Hibernate多表关系配置——继承
    Hibernate多表关系配置——多对多对关系映射
    Hibernate多表关系配置——一对一关系映射
    Hibernate多表关系配置——多对一关系映射
    初识Hibernate——添加数据
    Servlet学习总结
    jQuery动态添加Table行
    VS2013搭建CSDN源代码管理git
    Node.js amqplib 连接 Rabbitmq 学习笔记
  • 原文地址:https://www.cnblogs.com/BillGreen/p/16115002.html
Copyright © 2020-2023  润新知