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

时间:2012-08-23 13:15:31

标签: java certificate x509certificate ca

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

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

提前致谢!

3 个答案:

答案 0 :(得分:13)

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

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

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

答案 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) }

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

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

答案 2 :(得分:2)

根CA将是启用了keyCertSign标志的自签名证书。在大多数情况下,为方便起见,通用名称可能包含单词CA。中间CA证书可以由Root CA(或其他中级!)签名。您的浏览器密钥存储区将包含常用的CA证书示例。

来自The Internet Engineering Task Force

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.