2012-03-01 15 views
18

Moja aplikacja java używa pliku magazynu kluczy, w którym mam certyfikat używany w połączeniu ssl z aktywnym serwerem katalogów. Co muszę zrobić, to sprawdzić datę wygaśnięcia i monitować użytkownika, jeśli zbliża się data wygaśnięcia. Muszę to zrobić, gdy zaczyna się moja aplikacja. Moim pomysłem jest użycie zewnętrznego programu: keytool do wyświetlenia informacji o określonym certyfikacie w magazynie kluczy, a następnie wykonanie niektórych operacji analizy na łańcuchu, który daje wynik na keytole, aby znaleźć tę datę weryfikacji.Sprawdzanie dat wygaśnięcia certyfikatów w magazynie kluczy Java

Oto wyjście określonego polecenia 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 

Problem byłby z datą analizowania ponieważ nie mogę być pewien, w jakim formacie jest on wyświetlany.

Czy istnieje łatwiejszy sposób sprawdzenia daty wygaśnięcia certyfikatów zawartych w pliku magazynu kluczy Java?

Odpowiedz

7

Użyj klasy java.security.Keystore, aby załadować magazyn kluczy i wyliczyć jego zawartość, a następnie sprawdzić każdy certyfikat pod kątem ważności.

+0

Dziękuję, że rozwiązuje problem. –

20

Dzięki za kierunek EJP, oto blok tego, co wymyśliłem.

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

W powyższym kodzie klucz_przypisu.get (alias) może zwrócić wartość null, jeśli wpis nie zawiera pozycji certyfikatu. Po prostu zwraca pierwszy wpis w łańcuchu certyfikatów, teoretycznie może istnieć organ certyfikacji w łańcuchu, który wygasa wcześniej. –

Powiązane problemy