x509 扩展:“extnValue”可以为空吗?

x509 扩展:“extnValue”可以为空吗?

我正在编写一个解析 x509 证书的脚本。x509 v3 证书具有扩展,它是包含 OID、标志critical和八位字节串的ASN.1 序列extnValue

对于basicConstraints扩展,extnValue 应该是另一个带有详细信息的 ASN.1 序列。

我遇到过一个证书,它有一个空序列。字面上的字节0x30 0x00解析为长度为零的 ASN.1 序列,而不是预期的数据集(证书颁发机构的布尔值和路径长度的整数)。

事实上,我发现了一个具有这种质量的证书,这意味着它有效,但我希望找到有关此问题的具体协议规则,以便我的脚本可以正确处理它而不是引发错误。

答案1

extnValue不是空的,它是30 00,这是一个空序列。

https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.9说基本约束扩展值的编码是

BasicConstraints ::= SEQUENCE {
    cA                      BOOLEAN DEFAULT FALSE,
    pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

因此,空序列在逻辑上是{ cA: FALSE, pathLenConstraint: Not Present }

由于证书使用 ASN.1 DER 编码,因此DEFAULT永远不应指定值,并且文本表示当设置为时pathLenConstraint永远不应指定,因此是“此证书不代表证书颁发机构”的唯一有效形式。cAFALSE30 00

相关内容