Jak sprawdzić nazwę certyfikatu i alias w plikach keystore?

Mam kilka .pliki keystore i trzeba znaleźć taki z określonym CN i aliasem. Czy istnieje sposób, aby to zrobić za pomocą keytool, jarsigner lub innego narzędzia? Znalazłem sposób, aby sprawdzić, czy określony keystore został użyty do podpisania konkretnego apk, ale muszę również uzyskać alias i nazwę certyfikatu w każdym z plików.

Author: Malthan, 2012-10-15

6 answers

Możesz uruchomić następujące polecenie, aby wyświetlić listę zawartości pliku keystore (i nazwy aliasu):

keytool -v -list -keystore .keystore

Jeśli szukasz konkretnego aliasu, możesz go również podać w Komendzie:

keytool -list -keystore .keystore -alias foo

Jeśli alias nie zostanie znaleziony, wyświetli wyjątek:

Błąd Keytool: java.lang.Wyjątek: Alias nie istnieje
 488
Author: romaintaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 05:18:02

Aby uzyskać wszystkie szczegóły musiałem dodać opcję-v do odpowiedzi romaintaz:

keytool -v -list -keystore <FileName>.keystore
 215
Author: enkara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-07 18:18:48

Możesz uruchomić z kodu Java.

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();
            }
    }

Klasa Certificate przechowuje wszystkie informacje o keystore.

UPDATE-UZYSKAJ KLUCZ PRYWATNY

Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);
@ Prateek mam nadzieję, że tego szukasz!
 53
Author: Renjith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 11:34:31

KeyStore Explorer otwarte narzędzie wizualne do zarządzania kluczami.

 51
Author: Ycnannamela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 14:13:38

W środowisku podobnym do Basha możesz użyć:

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

To polecenie składa się z 3 części. Jak wspomniano powyżej, część 1st wyświetli listę wszystkich zaufanych certyfikatów ze wszystkimi szczegółami i dlatego część 2nd filtruje tylko informacje o aliasach wśród tych szczegółów. I wreszcie w 3rd można wyszukać konkretny alias (lub jego część). - i włącza tryb niewrażliwy na wielkość liter. W ten sposób podane polecenie uzyska wszystkie aliasy zawierające wzór "foo", np. foo, 123_foo, fooBar itp. Więcej informacji man grep.

 14
Author: Svetoslav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-01 11:52:41

Wyświetli listę wszystkich certyfikatów:

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
 7
Author: Walk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-19 15:30:14