2012-03-01 108 views
18

Mi aplicación Java utiliza un archivo de almacén de claves en el que tengo un certificado que se utiliza en la conexión ssl con el servidor de directorio activo. Lo que tengo que hacer es verificar su fecha de vencimiento y preguntarle al usuario si está a punto de caducar. Tengo que hacerlo mientras mi aplicación comienza. Mi idea es usar un programa externo: keytool para mostrar información sobre cierto certificado en el almacén de claves y luego realizar algunas operaciones de análisis en una cadena, en la que se explican las salidas de keytool para encontrar esta fecha de validación.Comprobación de fechas de caducidad de certificados en java keystore

Aquí está la salida de un comando específico herramienta de claves:

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 sería con la fecha de análisis ya que no puedo estar seguro de qué formato se muestra.

¿Hay alguna manera más fácil de verificar la fecha de vencimiento de los certificados incluidos en el archivo java keystore?

Respuesta

7

Utilice la clase java.security.Keystore para cargar el almacén de claves y enumerar su contenido, y comprobar que cada certificado caduque.

+0

Gracias, eso resuelve el problema. –

20

Gracias por la dirección EJP, aquí hay un bloque de lo que se me ocurrió.

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

En el código anterior, keystore.getCertificate (alias) puede devolver nulo si la entrada no contiene una entrada de certificado. También devuelve la primera entrada de la cadena de certificados, en teoría podría haber una autoridad de certificación más arriba en la cadena que expira antes. –

Cuestiones relacionadas