【发布时间】:2013-02-24 07:18:53
【问题描述】:
我正在解码 ASN.1 格式的 X.509 证书。解码成功,遍历结构,但是有一点看不懂。
在某些情况下,我得到一个八位字节字符串,而我正在玩的这个网站 (http://lapo.it/asn1js/) 显示这些八位字节字符串实际上包含更多的 ASN.1 树。这个网站用(封装)注释这样的八位字节字符串
我的问题是:在解析过程中我怎么知道一个八位字节字符串实际上封装了更多的东西?我是否只是尝试解析它,看看我是否得到标签和有效长度?如果不是,那么它是纯字节数据吗?如果是,那么它是一个有效的子树吗?
或者这是否意味着作为字节输出,然后消费者应该只在他知道它是来自某些键的编码数据时才尝试解析它?
以网站上已经加载的示例为例,然后点击“解码”。例如,我指的是偏移量 332,它是一个封装位字符串的八位字节字符串。
【问题讨论】:
-
在该示例中,偏移量 332 是 keyUsage,即 just a bitstring。一个更有趣的例子可能是
subjectAltName2.5.29.17,该证书中不存在,但 google.com 有一个很好的用于测试解析的例子。 -
抱歉,为了清楚起见,我的意思是 google.com https 网站上的证书,它有 40 多个 altName。这不是 LMGTFY ;-)
-
@mr.spuratic Offset 332 在该示例中具有包含位串的八位字节串。我的问题是是否有某种规则我可以推断出一个原语封装了其他东西。还是我只是尝试解码它,如果长度和类型都有效,然后取而代之的是解码的值?或者我会从一些规范中知道像 subjectAltName 这样的东西总是一个八位字节字符串,它可以编码更多的东西?