我在Java中的X509证书实例,我需要确定它是否是一个CA证书或用户证书。
任何人都可以提供任何帮助吗?
提前致谢!
我在Java中的X509证书实例,我需要确定它是否是一个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
(或另一中间!)。 你布劳尔密钥存储会有普遍信任的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.