如何从 Java X509 证书获取 BasicConstraints 扩展
How to get BasicConstraints extension from Java X509 certificate
我想从 Java X509Certificate 中读取扩展 BasicConstraints(证书实现来自默认 JCE,因此它是 sun.security.x509.X509CertImpl
)。
我想获取 BasicConstraint 扩展值以检查它是否是 CA :
X509Certificate certificate = ...
byte[] basicConstraint = certificate.getExtensionValue("2.5.29.19");
但这给了我包含 DEROctetString 的字节数组。在打开它之后,我得到了 2 个字节的字节数组。
但是,扩展名 BasicConstraint
似乎定义为:
BasicConstraints := SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL
}
我已经看过 X509Certificate::getBasicConstraints()
方法,其中 returns 和 int
。问题是当扩展名不存在时它也会 returns -1
。
这就是为什么我正在寻找一种方法从 X509 证书中获取此 ASN1 序列以明确检查此 CA boolean
标志。
BasicConstraints 扩展的有效编码(在 OCTET STRING 中)是:
CA=假: 30 00
CA=true,路径省略:30 03 01 01 FF
CA=true, pathlen=0 到 127: 30 06 01 01 FF 02 01 xx
CA=true, pathlen >= 128: 使用这么长的路径太傻了我忽略了这种情况,但是如果你真的想要的话你可以使用 DER 规则来解决
您很可能遇到第 1 种情况。
我想从 Java X509Certificate 中读取扩展 BasicConstraints(证书实现来自默认 JCE,因此它是 sun.security.x509.X509CertImpl
)。
我想获取 BasicConstraint 扩展值以检查它是否是 CA :
X509Certificate certificate = ...
byte[] basicConstraint = certificate.getExtensionValue("2.5.29.19");
但这给了我包含 DEROctetString 的字节数组。在打开它之后,我得到了 2 个字节的字节数组。
但是,扩展名 BasicConstraint
似乎定义为:
BasicConstraints := SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL
}
我已经看过 X509Certificate::getBasicConstraints()
方法,其中 returns 和 int
。问题是当扩展名不存在时它也会 returns -1
。
这就是为什么我正在寻找一种方法从 X509 证书中获取此 ASN1 序列以明确检查此 CA boolean
标志。
BasicConstraints 扩展的有效编码(在 OCTET STRING 中)是:
CA=假:
30 00
CA=true,路径省略:
30 03 01 01 FF
CA=true, pathlen=0 到 127:
30 06 01 01 FF 02 01 xx
CA=true, pathlen >= 128: 使用这么长的路径太傻了我忽略了这种情况,但是如果你真的想要的话你可以使用 DER 规则来解决
您很可能遇到第 1 种情况。