-->

如何检查是否X509证书是CA证书?(How to check if X509Certificate

2019-06-27 07:37发布

我在Java中的X509证书实例,我需要确定它是否是一个CA证书或用户证书。

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

提前致谢!

Answer 1:

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

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

我已用几个选中此CA certificates (根和中间),以及它的工作原理所描述的。 我还检查该方法与几个用户证书,并且该方法返回-1作为结果。



Answer 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
}


Answer 3:

根CA将与自签名证书keyCertSign启用标志。 在大多数情况下的通用名称可以包含文字CA为了方便。 中间CA证书可由签署Root CA (或另一中间!)。 你布劳尔密钥存储会有普遍信任的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.


文章来源: How to check if X509Certificate is CA certificate?