Come controllare il nome e l'alias del certificato nei file del keystore?


410

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 usato per firmare un apk specifico, ma ho anche bisogno di ottenere l'alias e il nome del certificato in ciascuno dei file.

Risposte:


720

È possibile eseguire il comando seguente per elencare il contenuto del file del keystore (e il nome alias):

keytool -v -list -keystore .keystore

Se stai cercando un alias specifico, puoi anche specificarlo nel comando:

keytool -list -keystore .keystore -alias foo

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

errore keytool: java.lang.Exception: alias non esiste


1
Salve, posso visualizzare la password
dell'alias

11
@prateek Non puoi. Non avrebbe molto senso avere keystore o password chiave se si potesse semplicemente visualizzarlo con uno strumento da riga di comando.
Marchese di Lorne,

2
È possibile eseguire il comando seguente per elencare il contenuto del file del keystore: keytool -list -keystore .keystore Il comando precedente non fornisce il nome di alias
Manmohan Soni

1
@ManmohanSoni L'ho aggiornato per includere l'argomento -v che rivela l'alias
Steven Mark Ford

10
Penso che /path/to/keystoreinvece di .keystoresarebbe più chiaro per il lettore. Comunque è la risposta corretta!
Andrea,

261

Per ottenere tutti i dettagli ho dovuto aggiungere l'opzione -v alla risposta di romaintaz:

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

4
keytool -v -list -keystore <NomeFile> .jks
piyush singh

1
keytool -v -list -keystore cacerts
Ankur Srivastava,

2
"Se l' -vopzione è specificata, il certificato viene stampato in un formato leggibile dall'uomo , con informazioni aggiuntive come il proprietario, l'emittente, il numero di serie e tutte le estensioni." (vedi: Java SE Tools Reference, comando Visualizza dati, opzione -list )
Eido95

64

È possibile eseguire dal codice Java.

try {

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


        Enumeration<String> enumeration = keystore.aliases();
        while(enumeration.hasMoreElements()) {
            String alias = 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.

AGGIORNAMENTO- OTTIENI TASTO PRIVATO

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

@prateek Spero che questo sia quello che stai cercando!


import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.cert.Certificate; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.Enumeration;
divieto di geoingegneria il

1
@Renjith ciao Questo codice mostra tutto tranne la password associata all'alias, come posso visualizzarlo. Per favore, aiutatemi
Prateek,

@Renjith java.security.UnrecoverableKeyExceptionquesta è l'eccezione generata quando provo questo codice in realtà voglio recuperare la password alias
Prateek

2
dovresti usare lo snippet di codice all'interno del suddetto ciclo while
Renjith

1
Non avevo la classe Base64Encoder. Potete per favore dirmi quale file jar ha? o è un file .java?
Jack


17

In un ambiente simile a bash puoi usare:

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

Questo comando è composto da 3 parti. Come detto sopra, la prima parte elencherà tutti i certificati attendibili con tutti i dettagli ed è per questo che la seconda parte arriva a filtrare solo le informazioni alias tra questi dettagli. E infine nella terza parte è possibile cercare un alias specifico (o parte di esso). I -i giri la modalità insensibile caso su. Quindi il comando dato produrrà tutti gli alias contenenti lo schema 'foo', fe foo, 123_FOO, fooBar, ecc. Per ulteriori informazioni man grep.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.