ASN.1八位字符串

Coc*_*ics 4 asn.1 decoding

我正在解码ASN.1格式的X.509证书.我正在成功解码它,遍历结构,但有一件事我不明白.

在某些情况下,我得到一个八位字符串,我正在玩的这个网站(http://lapo.it/asn1js/)显示这些八位字节字符串实际上包含更多的ASN.1树.这个网站用(封装)注释这样的八位字符串

我的问题是:在解析过程中我怎么知道一个八位字节串实际上封装了更多东西?我是否只是尝试解析它,看看我是否有标签和有效长度?如果不是那么它是纯字节数据?如果是,那么它是一个有效的子树?

或者这是否意味着输出为字节,然后消费者只应该尝试解析它,如果他知道它是某些键的编码数据?

以网站上已加载的示例为例,点击"解码".我指的是例如偏移332,它是封装位串的八位字节串.

mr.*_*tic 7

这就是"扩展"在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也使其变得微不足道).