我正在编写一个解析 x509 证书的脚本。x509 v3 证书的扩展是一个 ASN.1 序列,其中包含一个 OID、一个critical
标志和一个称为extnValue
.
对于basicConstraints
扩展,extnValue 应该是另一个带有详细信息的 ASN.1 序列。
我遇到了一个在那里有一个空序列的证书。从字面上0x30 0x00
看,解析为零长度的 ASN.1 序列的字节,而不是预期的数据集(证书颁发机构的布尔值和路径长度的整数。
我在野外找到了具有这种质量的证书这一事实意味着它是有效的,但我希望找到一个关于此的具体协议规则,以便我的脚本可以正确处理它而不是引发错误。
extnValue
不是空的,它是30 00
,它是一个空序列。https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.9说基本约束扩展值的编码是
因此,空序列在逻辑上是
{ cA: FALSE, pathLenConstraint: Not Present }
.因为证书使用 ASN.1 DER 编码,所以
DEFAULT
永远不应该指定一个值,并且文本说在设置为pathLenConstraint
时永远不应该指定,因此“此证书不代表证书颁发机构”的唯一有效形式是。cA
FALSE
30 00