如何检查X509Certificate是否为CA证书



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

有人能提供帮助吗?

提前感谢!

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

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

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

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
}

根CA将是启用keyCertSign标志的自签名证书。在大多数情况下,为了方便,通用名称可以包括单词CA。中间CA证书可以由Root CA(或另一个中间!)签名。您的brower密钥存储将包含常见的受信任CA证书的示例。

来自互联网工程任务组

The keyCertSign bit is asserted when the subject public key is
    used for verifying a signature on certificates.  This bit may only
    be asserted in CA certificates.

最新更新