2012-03-01 7 views
18

La mia applicazione java utilizza un file di archivio chiavi in ​​cui dispongo di un certificato utilizzato nella connessione ssl con il server di directory attivo. Quello che devo fare è controllare la data di scadenza e chiedere all'utente se la sua scadenza è vicina. Devo farlo mentre inizia la mia applicazione. La mia idea è di utilizzare un programma esterno: keytool per visualizzare informazioni su determinati certificati nel keystore e quindi eseguire alcune operazioni di analisi su una stringa che keytool restituisce per trovare questa data di convalida.Verifica delle date di scadenza dei certificati nel keystore java

Ecco l'output di un comando specifico 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 

problema sarebbe con la data di analisi perché non posso essere sicuro in quale formato viene visualizzato.

Esiste un modo più semplice per controllare la data di scadenza dei certificati inclusi nel file keystore java?

risposta

7

Utilizzare la classe java.security.Keystore per caricare il keystore ed elencarne il contenuto e controllare ogni certificato per la scadenza.

+0

Grazie, questo risolve il problema. –

20

Grazie per la direzione EJP, ecco un blocco di ciò che mi è venuto in mente.

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

Nel codice precedente, keystore.getCertificate (alias) può restituire null se la voce non contiene una voce di certificato. Restituisce anche solo la prima voce della catena di certificati, in teoria potrebbe esserci un'autorità di certificazione più in alto nella catena che scade prima. –