如何检查X509证书是否是CA证书?
2022-09-02 20:33:57
我有一个 Java 版 X509Certificate 实例,我需要确定它是 CA 证书还是用户证书。
任何人都可以提供任何帮助吗?
提前致谢!
我有一个 Java 版 X509Certificate 实例,我需要确定它是 CA 证书还是用户证书。
任何人都可以提供任何帮助吗?
提前致谢!
根据我进行的研究,可以通过检查基本约束来检查它!检查 API 以返回方法的结果。getBasicConstraints()
因此,如果该方法返回结果,则可以将证书视为 .!= -1
CA certificate
我已经用几个(根和中间)检查了这一点,它的工作原理与描述的一样。我还使用多个用户证书检查了此方法,该方法返回-1作为结果。CA certificates
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
}