在Java中针对默认系统密钥库验证非SSL证书

时间:2014-05-04 19:52:41

标签: java security x509 trust

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

我的第一个想法是使用Java的信任管理器,因为我已经在使用具有同一CA颁发的服务器证书的HTTP。但似乎这只能用于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列表来检查证书的实际状态。

0 个答案:

没有答案
相关问题