2012-10-15 9 views
239

Ho un sacco di file .keystore e ho bisogno di trovarne uno con CN e alias specifici. C'è un modo per farlo con keytool, jarsigner o qualche altro strumento? Ho trovato un modo per verificare se un keystore specifico è stato utilizzato per firmare un apk specifico, ma ho anche bisogno di ottenere l'alias e il nome del certificato in ciascuno dei file.Come verificare il nome e l'alias del certificato nei file keystore?

risposta

402

È possibile eseguire il seguente comando per elencare il contenuto del file di archivio chiavi:

keytool -list -keystore .keystore 

Se siete alla ricerca di un alias specifico, è anche possibile specificare nel comando:

keytool -list -keystore .keystore -alias foo 

Se l'alias non viene trovato, verrà visualizzato un'eccezione:

keytool error: java.lang.Exception: Alias does not exist

+1

Hi posso visualizzare la password alias chiave se conosco il nome alias chiave e hanno certificato dell'archivio chiavi e password keystore – Prateek

+6

@prateek Non è possibile. Non ci sarebbe molto senso avere il keystore o le password delle chiavi se si potesse semplicemente visualizzare con uno strumento da riga di comando. – EJP

+0

È possibile eseguire il comando seguente per elencare il contenuto del file del keystore: keytool -list -keystore .keystore Il comando sopra indicato non fornisce il nome dell'alias –

49

è possibile eseguire da Ja codice va.

try { 

     File file = new File(keystore location); 
     is = new FileInputStream(file); 
     KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     String password = "password"; 
     keystore.load(is, password.toCharArray()); 


     Enumeration enumeration = keystore.aliases(); 
     while(enumeration.hasMoreElements()) { 
      String alias = (String)enumeration.nextElement(); 
      System.out.println("alias name: " + alias); 
      Certificate certificate = keystore.getCertificate(alias); 
      System.out.println(certificate.toString()); 

     } 

    } catch (java.security.cert.CertificateException e) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (KeyStoreException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }finally { 
     if(null != is) 
      try { 
       is.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
    } 

La classe di certificato contiene tutte le informazioni sul keystore.

Update-ottenere la chiave PRIVATA

Key key = keyStore.getKey(alias, password.toCharArray()); 
String encodedKey = new Base64Encoder().encode(key.getEncoded()); 
System.out.println("key ? " + encodedKey); 

@prateek Spero che questo è quello che stai cercando!

+0

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.cert.Certificato; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.Enumeration; –

+0

Questo codice non visualizza la password alias – Prateek

+1

@Renjith ciao Questo codice visualizza tutto tranne la password associata con l'alias, Come posso visualizzarlo. Per favore aiutami – Prateek

196

Al fine di ottenere tutti i dettagli ho dovuto aggiungere l'opzione -v per romaintaz risposta:

keytool -v -list -keystore <FileName>.keystore 
+12

Grazie, questa dovrebbe essere la risposta. – Sulby

+9

'-v' ha funzionato il trucco – ashutosh

+2

keytool -v -list -keystore .jks –

8

In un ambiente bash-come è possibile utilizzare:

keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo 

Questo comando consiste di 3 parti. Come indicato in precedenza, la parte elenca tutti i certificati attendibili con tutti i dettagli ed è per questo che la parte 2nd viene a filtrare solo le informazioni di alias tra questi dettagli. Infine, nella parte 3rd è possibile cercare un alias specifico (o parte di esso). -i attiva la modalità maiuscole/minuscole. Quindi il comando dato produrrà tutti gli alias contenenti il ​​modello 'pippo', per esempio. foo, 123_FOO, fooBar, ecc. Per ulteriori informazioni man grep.

4

Questo elenco di tutti i certificati:

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts" 
+0

Questo elenco solo i certificati memorizzati nel trust store del JDK che è simile ma per uno scopo diverso a un keystore (a cui è stato chiesto). C'è una buona differenziazione qui: [http://stackoverflow.com/questions/17935619/what-is-difference-between-cacerts-and-keystore](http://stackoverflow.com/questions/17935619/what-is -Differenza-tra-cacerts-e-chiavi). –

Problemi correlati