【问题标题】:Search in List of X509CRL's在 X509CRL 列表中搜索
【发布时间】:2022-10-22 18:25:53
【问题描述】:

我有一个 X509 CRL 的列表。我需要以某种方式识别其中一些。现在我使用发行者来做到这一点:

for(var crl: List<X509CRL> crls){
 String issuer = c.getIssuerX500Principal().getName();
 if(issuer.contains("searchString"))
  result.add(crl);
}

但是必须有一个更好的方法来使用 CRL 文件格式的知识来做到这一点,也许是比较公钥或类似的东西,但我对 X509CRL 的了解不多。有人可以帮我吗?

【问题讨论】:

    标签: java security certificate x509certificate


    【解决方案1】:

    如果您有权访问每个证书的公钥,则可以使用 verify(PublicKey key) 方法来验证 CRL 是否使用与给定公钥对应的私钥签名。

    如果密钥不正确,它应该抛出一个InvalidKeyException,所以用一个 try-catch 块包围它,如下所示:

    try {
        crl.verify(<public_key>)
    } catch(InvalidKeyException e) {
        // handle exception
    }
    

    来源:https://docs.oracle.com/javase/7/docs/api/java/security/cert/X509CRL.html#verify(java.security.PublicKey)

    【讨论】:

    • 但是返回类型是无效的,如果不是所需的证书会发生什么,我怎么知道呢?
    • 我已经用更多细节编辑了我的答案:)
    【解决方案2】:

    与@Pexers 的解决方案类似,将使用 X509 证书或 X509 证书序列号列表,并在循环中调用其中任何一个;

    X509CRLEntry getRevokedCertificate(BigInteger serialNumber)

    或者

    X509CRLEntry getRevokedCertificate(X509Certificate certificate)

    如果它们在 CRL 中,则结果将为 X509CRLEntry,否则为 null。

    以这种方式处理大量证书和/或 CRL 将减少捕获和处理每个异常的需要。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 2014-02-14
      • 2015-03-02
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      相关资源
      最近更新 更多