如何检查X509证书是否是CA证书?

2022-09-02 20:33:57

我有一个 Java 版 X509Certificate 实例,我需要确定它是 CA 证书还是用户证书。

任何人都可以提供任何帮助吗?

提前致谢!


答案 1

根据我进行的研究,可以通过检查基本约束来检查它!检查 API 以返回方法的结果。getBasicConstraints()

因此,如果该方法返回结果,则可以将证书视为 .!= -1CA certificate

我已经用几个(根和中间)检查了这一点,它的工作原理与描述的一样。我还使用多个用户证书检查了此方法,该方法返回-1作为结果。CA certificates


答案 2

X509Certificate.getKeyUsage() javadoc:

获取一个布尔数组,表示 KeyUsage 扩展的位 (OID = 2.5.29.15)。密钥用法扩展定义了证书中包含的密钥的用途(例如,加密、签名、证书签名)。ASN.1 对此的定义是:

          KeyUsage ::= BIT STRING {
              digitalSignature        (0),
              nonRepudiation          (1),
              keyEncipherment         (2),
              dataEncipherment        (3),
              keyAgreement            (4),
              keyCertSign             (5),  --> true ONLY for CAs
              cRLSign                 (6),
              encipherOnly            (7),
              decipherOnly            (8) }

可以按如下方式检查证书:

X509Certificate cert = ...;
boolean[] keyUsage = cert.getKeyUsage();
if ( keyUsage[5] ) {
    // CA certificate
}
else {
    // User certificate
}

推荐