数字证书编码ASN.1
任务要求
-
- 参考附件中图书p223 中13.2的实验指导,完成DER编码
-
- 序列号=1174(0x0496),证书签发者 DN="CN=Virtual CA,C=CN",证书持有者DN="CN=你的名字拼音, OU=Person,C=CN",证书有效期=20200222000000-20220222000000。
-
- 用echo -n -e "编码" > 你的学号.der中,用OpenSSL asn1parse 分析编码的正确性
-
- 提交编码过程文档(推荐markdown格式)
任务实现过程
-
1.1 阅读附件图书13.2的实验指导后,我们得知证书主要由tbsCertificate、signatureAlgorithm和signatureValue三大部分组成。
如图所示:
-
1.2 对第一部分Extension进行编码
参考附件图书中Extension编码过程编码即可,如图:
编写结果如下:\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
- 1.4 对TBSCertificate其他部分编码
如图:
结合此次实验要求
序列号=1174(0x0496),证书签发者 DN="CN=Virtual CA,C=CN",证书持有者DN="CN=Lei Qingyi, OU=Person,C=CN",证书有效期=20200222000000-20220222000000。
将我的名字:Lei Qingyi转换为ascii码,使用代码echo+od完成。
代码如下:
echo "LeiQingyi" | od -tx1 -tc
截图如下:
得到编码如下:4c 65 69 51 69 6e 67 79 69 0a
- 1.5 对最后的部分编码
参考图书内容
截图如下:
而后即可得到完整的证书,使用代码写入即可
代码如下:
echo -n -e "……" > 20191330.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\x65\x69\x51\x69\x6e\x67\x79\x69\x0a\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" > 20191330.der
验证过程
- 2.1 用openssl asn1parse验证
使用指令进行验证
代码如下:
openssl asn1parse -in 20191330.der -inform DER
结果如下:
验证完成