【问题标题】:Checking certificates expiration dates in java keystore检查 Java 密钥库中的证书到期日期
【发布时间】:2012-03-19 18:33:39
【问题描述】:

我的 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 ssl certificate keystore


    【解决方案1】:

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

    【讨论】:

    • 在上面的代码中,如果条目不包含证书条目,keystore.getCertificate(alias) 可能会返回 null。它也只是返回证书链的第一个条目,理论上可能有一个证书颁发机构在更早的链上过期。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2021-03-20
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      相关资源
      最近更新 更多