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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (53)

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

以下是特定的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类加载密钥库并枚举其内容,并检查每个证书是否到期。

用户回答回答于

感谢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();
    }

扫码关注云+社区