数字证书编码ASN.1

数字证书编码

  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格式)

1.证书结构

ee96907dc69fab98dc1e4eed3b8c653

证书包含tbsCertificate、signatureAlgorithm、signatureValue三大主要部分组成。

证书主要结构如下

  • tbsCertificate
    • version
    • serialNumber
    • signature
    • issuer
    • validity
    • subject
    • subjectPublicKeyInfo
    • extensions
      • basicContrains
      • subjectKeyIdentifier
      • KeyUsage
      • extKeyUsage
      • netscapeCertType
      • authorityKeyIdentifier
  • signatureAlgorithm
  • signatureValue

2.编码过程

2.1对Extension进行编码

这部分的编码较为固定,注意编码的长度和标识,按照书上内容进行编码就可以,如图:

image-20220405161300639

编写结果为:

\x30\x0C\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x02\x30\x00\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x2C\x04\x87\x10\x60\xFC\x61\xF6\x2B\x64\x81\x3D\xFB\x66\x30\xDA\xF0\x73\xBC\x08\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x03\xF8\x30\x29\x06\x03\x55\x1D\x25\x04\x22\x30\x20\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x02\x06\x0A\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x02\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x04\x30\x11\x06\x09\x60\x86\x48\x01\x86\xF8\x42\x01\x01\x04\x04\x03\x02\x05\xA0\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\x96\xF0\x94\xF8\x49\x8D\x23\x05\x86\xB0\xCA\xB5\x2D\x7A\x9A\x60\x32\xFB\xB0\xF9

2.2对TBSCertificate其他部分编码

这部分包括版本、序列号、签名算法、国家、CA、有效期、对象等信息,如图:

image-20220405161634970

将我的名字转换成ascii码表示:使用echo+od完成,即echo "LI Zehao" | od -tx1 -tc

image-20220405161833928

得到结果为4c 49 20 5a 65 68 61 6f 0a

2.3对最后的部分编码

只剩下两个部分,一个是证书的签名算法标识,一个就是签名的值了。

为了生成一张完整的证书,我按照书上给出的数据样例进行了编码。

此部分如图所示:

image-20220405163124364

2.4检查和写入

最后就得到了完整的证书,检查后就进行写入,用echo -n -e "\x12\x34" > 20191320.der的方式写入。

写入的指令(包含完整证书内容):

echo -n -e "\x30\x82\x02\xEC\x30\x82\x01\xD4\xA0\x03\x02\x01\x02\x02\x02\x04\x96\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x22\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x56\x69\x72\x74\x75\x61\x6C\x20\x43\x41\x30\x1E\x17\x0D\x32\x30\x30\x32\x32\x32\x30\x30\x30\x30\x30\x30\x5A\x17\x0D\x32\x32\x30\x32\x32\x32\x30\x30\x30\x30\x30\x30\x5A\x30\x32\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x0F\x30\x0D\x06\x03\x55\x04\x0B\x13\x06\x50\x65\x72\x73\x6F\x6E\x31\x12\x30\x10\x06\x03\x55\x04\x03\x13\x09\x4C\x49\x20\x5A\x65\x68\x61\x6F\x20\x30\x81\x9F\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x81\x8D\x00\x30\x81\x89\x02\x81\x81\x00\xB4\xF6\xCF\x18\x3D\x5E\x8E\x1D\x46\x7A\x90\x7D\x8E\x41\xD2\xE3\xC8\xF1\xA3\xAE\xF3\x6D\x8A\x24\xFF\x55\x23\x25\xBD\xEB\x0C\xD0\x7B\x87\x36\x5D\x1F\x73\x98\x65\x3E\x57\x97\xF6\x65\x7D\x13\xE0\xE1\xB5\xFC\xBC\x38\x6F\x56\x3E\x57\x4E\xD6\x51\x1D\x13\x12\x7C\x33\xB3\x60\x31\x79\x32\x07\x97\xF3\x3C\x8B\x29\x0D\xB5\x78\x38\x93\xCE\x84\xE4\xA3\xDD\xFB\xF9\x25\x47\x1C\x72\xA6\x5E\x78\x02\xCF\xF3\x48\x9D\xCA\xD9\x00\x73\xDE\x4B\x16\x07\x52\x48\x20\x06\xF3\x4F\xCA\xA5\x2D\x66\x88\x95\xC6\x6C\xD6\x3F\x61\x34\xF7\xE3\x02\x03\x01\x00\x01\xA3\x81\x9F\x30\x81\x9C\x30\x0C\x06\x03\x55\x1D\x13\x01\x01\xFF\x04\x02\x30\x00\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x2C\x04\x87\x10\x60\xFC\x61\xF6\x2B\x64\x81\x3D\xFB\x66\x30\xDA\xF0\x73\xBC\x08\x30\x0E\x06\x03\x55\x1D\x0F\x01\x01\xFF\x04\x04\x03\x02\x03\xF8\x30\x29\x06\x03\x55\x1D\x25\x04\x22\x30\x20\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x02\x06\x0A\x2B\x06\x01\x04\x01\x82\x37\x14\x02\x02\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x04\x30\x11\x06\x09\x60\x86\x48\x01\x86\xF8\x42\x01\x01\x04\x04\x03\x02\x05\xA0\x30\x1F\x06\x03\x55\x1D\x23\x04\x18\x30\x16\x80\x14\x96\xF0\x94\xF8\x49\x8D\x23\x05\x86\xB0\xCA\xB5\x2D\x7A\x9A\x60\x32\xFB\xB0\xF9\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x5D\x42\xAD\x5C\xDF\xC7\xC7\x90\xFA\x58\xC0\x74\x15\xC6\x4F\x20\x9B\xF1\x49\x9C\xB8\x3C\x22\x98\x45\x75\xA6\x0D\x7C\x02\x9D\x83\x1D\xC4\x5D\xCF\x4F\x5E\x57\xF7\x0A\x9B\x67\x02\x33\x23\x59\x76\xB4\xB5\xB7\xF3\x27\x36\x6F\xF4\x32\x6C\x1C\xE9\xB3\x4B\x81\xDC\xD0\xCF\x2E\xCF\x07\x4C\x65\x75\x74\xDF\x23\x9D\x7D\x2B\xE4\xF1\x15\x0C\x84\x61\x41\x5F\xDC\x67\x92\xA9\x7C\x39\xA0\xCA\xA9\x58\x6B\xED\x7D\x94\x08\xF7\x83\x42\x61\xF8\x62\xD8\xDC\x3B\x5D\xB7\x69\x5C\xD0\x36\xF2\x99\xA5\x0C\x99\x6E\xB0\x0C\x21\xE3\x98\x9F\x12\x6D\xD1\x76\x4E\x0C\x31\xCB\x7F\x54\x73\xFE\x96\x83\x76\x35\x22\x2F\xBF\xF6\x2B\x11\x04\x3A\xA7\xBE\x33\x3C\xD5\xDA\xEE\x56\x7A\xC4\x1A\x67\x3B\x77\xDE\x52\xC0\xDA\x09\xCA\x45\x71\x11\xB2\xD5\x35\xBF\x44\x54\x08\xC2\xFA\x0C\x5C\xEF\xC0\xEF\x82\x63\x37\x3C\x4C\xAB\x59\x4C\xFD\x6C\x2A\x9D\x64\x27\x35\x4E\x4F\xD8\x2E\x2C\x5C\xEB\xA1\x99\xDB\xFA\x3A\x53\x54\x13\x92\x91\x5D\x5F\x38\xDD\x1C\xD8\xAB\x34\x22\x9A\xEF\x8A\xE4\x62\xC2\x23\x9D\x06\xA5\xD7\xD8\x58\xB7\xF4\x98\xCA\x61\x29\x9D\xDE\xA5\xF6\xDA\xCC\x81" > 20191320.der

3.验证过程

3.1用openssl asn1parse验证

使用指令openssl asn1parse -in 20191320.der -inform DER进行验证,结果如下:

image-20220405164040127

3.2用windows自带证书进行查看

此外,还可以用windows本身打开证书,查看证书各字段的详细内容。

image-20220405164112243

可见,姓名、有效期限等信息都是正确的,实验到此完成。

posted @ 2022-04-05 16:44  20191320  阅读(276)  评论(0编辑  收藏  举报