检查java密钥库中的证书到期日期

问题描述:

我的java应用程序使用密钥库文件,其中有一个证书,该证书在与活动目录服务器的ssl连接中使用。 我所要做的就是检查它的到期日期并提示用户是否过期。我必须在我的应用程序启动时执行此操作。我的想法是使用外部程序:keytool在密钥库中显示有关特定证书的信息,然后对keytool输出的字符串执行一些解析操作以找到此验证日期。检查java密钥库中的证书到期日期

这里有一个具体的keytool命令的输出:

Owner: 
Issuer: CN=CPD Root CA, DC=cpd, DC=local<br> 
Serial number: 39e8d1610002000000cb 
<br>Valid from: Wed Feb 22 21:36:31 CET 2012 until: Thu Feb 21 21:36:31 CET 2013 
Certificate fingerprints: <br> 
     MD5: 82:46:8B:DB:BC:5C:64:21:84:BB:68:E3:4B:D4:35:70<br> 
     SHA1: 35:52:CA:F2:11:66:1E:50:63:BC:53:A5:50:C1:F0:1E:62:81:BC:3F<br> 
     Signature algorithm name: SHA1withRSA 

问题将与解析日期,因为我不能确定以哪种方式被显示出来。

有没有更简单的方法来检查包含在java keystore文件中的证书的过期日期?

使用java.security.Keystore类加载密钥库并枚举其内容,并检查每个证书是否到期。

+0

谢谢,解决了这个问题。 – 2012-03-01 13:42:00

感谢EJP的方向,这里是我想出的一块。

try { 
     KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     keystore.load(new FileInputStream("keystoreLocation"), "keystorePassword".toCharArray()); 
     Enumeration<String> aliases = keystore.aliases(); 
     while(aliases.hasMoreElements()){ 
      String alias = aliases.nextElement(); 
      if(keystore.getCertificate(alias).getType().equals("X.509")){ 
       System.out.println(alias + " expires " + ((X509Certificate) keystore.getCertificate(alias)).getNotAfter()); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+1

在上面的代码中,如果条目不包含证书条目,keystore.getCertificate(别名)可能会返回null。它也只是返回证书链的第一个条目,理论上可能有一个证书授权机构进一步提前到期。 – 2013-08-02 08:01:05