2012-03-01 111 views
18

私のJavaアプリケーションは、Active Directoryサーバーとの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キーストアファイルに含まれる証明書の有効期限を確認する方法はありますか。

答えて

7

java.security.Keystoreクラスを使用してキーストアをロードし、内容を列挙し、各証明書の有効期限を確認します。

+0

ありがとう、それで問題は解決します。 –

20

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を返すことがあります。また、証明書チェーンの最初のエントリを返すだけです。理論的には、より早く期限切れになる証明書認証局が存在する可能性があります。 –

関連する問題