如何从Java X509证书获取BasicConstraint扩展名

问题描述 投票:1回答:1

我想从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标志的方法。

java bouncycastle x509
1个回答
0
投票

BasicConstraints扩展的有效编码(在OCTET STRING内是:

  1. CA = false:boolean

  2. CA = true,省略路径:30 00

  3. CA = true,pathlen = 0到127:30 03 01 01 FF

  4. CA = true,pathlen> = 128:使用这么长的路径太愚蠢了,我忽略了这种情况,但是如果您确实想要的话,可以使用DER规则解决

您很可能有案例1。

© www.soinside.com 2019 - 2024. All rights reserved.