我有一个X509 CRL的列表。我需要以某种方式识别其中的一些。现在我使用发卡机构:
for(var crl: List<X509CRL> crls){
String issuer = c.getIssuerX500Principal().getName();
if(issuer.contains("searchString"))
result.add(crl);
}
但必须有一种更好的方法来使用CRL文件格式的知识,也许可以比较公钥或类似的东西,但我对X509CRL不太了解。有人能帮我吗?
如果您有权访问每个证书的公钥,则可以使用verify(PublicKey key)
方法验证CRL是否使用与给定公钥相对应的私钥进行了签名。
如果密钥不正确,它应该抛出一个InvalidKeyException
,所以用一个try-catch块围绕它,如下所示:
try {
crl.verify(<public_key>)
} catch(InvalidKeyException e) {
// handle exception
}
另请参阅:
- 类X509CRL-验证
与@Pexers的解决方案类似,使用X509证书或X509证书序列号列表,并在循环中调用其中任何一个;
X509CRLEntry getRevokedCertificate(BigInteger serialNumber)
或
X509CRLEntry getRevokedCertificate(X509Certificate certificate)
如果它们在CRL中,结果将是X509CRLEntry;如果它们不在,结果将为null。
以这种方式处理大量的证书和/或CRL将减少捕获和处理每个证书和(或(CRL的异常的需要。