我正在解码ASN.1格式的X.509证书.我正在成功解码它,遍历结构,但有一件事我不明白.
在某些情况下,我得到一个八位字符串,我正在玩的这个网站(http://lapo.it/asn1js/)显示这些八位字节字符串实际上包含更多的ASN.1树.这个网站用(封装)注释这样的八位字符串
我的问题是:在解析过程中我怎么知道一个八位字节串实际上封装了更多东西?我是否只是尝试解析它,看看我是否有标签和有效长度?如果不是那么它是纯字节数据?如果是,那么它是一个有效的子树?
或者这是否意味着输出为字节,然后消费者只应该尝试解析它,如果他知道它是某些键的编码数据?
以网站上已加载的示例为例,点击"解码".我指的是例如偏移332,它是封装位串的八位字节串.
这就是"扩展"在ASN.1中所说的内容(RFC2459§B.2 - 我知道RFC是"过时的",但在后面的版本中不存在有用的附录).
Extensions ::= SEQUENCE OF Extension
Extension ::= SEQUENCE {
extnId OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING }
Run Code Online (Sandbox Code Playgroud)
每个扩展有效负载都封装在OCTET STRING中.扩展的OID告诉您在该八位字符串中期望什么.在keyUsage的情况下,它是一个BIT STRING(§4.2.1.3).
现在我对subjectAltName的问题有一个答案,它在§4.2.1.7中.
使用OCTET STRING进行内容的一个好处是,根据规范,未知(非关键)扩展可以被识别,并且可以轻易地被忽略(尽管我认为DER也使其变得微不足道).
| 归档时间: |
|
| 查看次数: |
5760 次 |
| 最近记录: |