2

我有一个 X509 证书 (java.security.cert.X509Certificate),我需要验证它。受信任的锚点已经在系统默认证书库( jre\lib\security\cacerts )中,但如果需要,我可以将其填充到其他内容中。该证书不是 SSL 证书。

我的第一个想法是使用 Java 的信任管理器,因为我已经在使用带有由同一 CA 颁发的服务器证书的 HTTPs。但似乎这只能用于 SSL 证书,因为它只提供 checkServerTrusted 和 checkClientTrusted。为了完整起见,这是我的尝试:

X509TrustManager x509TrustManager=null;
trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore)null);
for (TrustManager trustManager : trustManagerFactory.getTrustManagers()) 
{  
    if (trustManager instanceof X509TrustManager) 
     {  
       x509TrustManager = (X509TrustManager)trustManager;
     }  
}
java.security.cert.X509Certificate x509 = .... get certificate ...
x509TrustManager.checkServerTrusted(new java.security.cert.X509Certificate[]{x509}, "RSA");

这可以满足我的所有需要​​,但它还会检查证书是否对 SSL 服务器(或客户端,如果我使用 checkClientTrusted)有效,并且显然失败了。

是否有任何简单的方法来指定信任管理器的证书和/或密钥用法,或者至少有一种方法来禁用检查(我可以自己做)。

将来我想使用 OCSP 或 CRL 列表来检查证书的实际状态。

4

0 回答 0