如何检查X509Certificate是否为CA证书?

Jur*_*nic 14 java certificate ca x509certificate

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

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

提前致谢!

Jur*_*nic 15

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

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

我用几个CA certificates(根和中间)检查了它,它的工作原理如上所述.我还使用多个用户证书检查了此方法,并且该方法返回-1作为结果.


小智 11

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) }
Run Code Online (Sandbox Code Playgroud)

证书可以检查如下:

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