首页 > 解决方案 > 如何从 Java X509 证书获取 BasicConstraints 扩展

问题描述

我想阅读 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()返回一个int. -1问题是当扩展名不存在时它也会返回。

这就是为什么我正在寻找一种从 X509 证书中获取此 ASN1 序列以明确检查此 CAboolean标志的方法。

标签: javabouncycastlex509

解决方案


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

  1. CA=假:30 00

  2. CA=true,pathlen 省略:30 03 01 01 FF

  3. CA=true,pathlen=0 到 127:30 06 01 01 FF 02 01 xx

  4. CA=true, pathlen >= 128: 使用这么长的路径太傻了我省略了这个案例,但是如果你真的想要的话,你可以使用 DER 规则来解决

您很可能有案例 1。


推荐阅读