我想从Java X509Certificate中读取扩展BasicConstraint(证书实现来自默认的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()
的X509Certificate::getBasicConstraints()
方法。问题在于,当扩展名不存在时,它也会返回int
。
这就是为什么我正在寻找一种从X509证书中获取此ASN1序列以显式检查此CA -1
标志的方法。
BasicConstraints扩展的有效编码(在OCTET STRING内是:
CA = false:boolean
CA = true,省略路径:30 00
CA = true,pathlen = 0到127:30 03 01 01 FF
CA = true,pathlen> = 128:使用这么长的路径太愚蠢了,我忽略了这种情况,但是如果您确实想要的话,可以使用DER规则解决
您很可能有案例1。