Как проверить имя сертификата и псевдоним в файлах хранилища ключей?

У меня есть группа файлов .keystore и вам нужно найти один с конкретным CN и псевдонимом. Есть ли способ сделать это с помощью keytool, jarsigner или какого-нибудь другого инструмента? Я нашел способ проверить, использовалось ли определенное хранилище ключей для подписи определенного apk, но мне также нужно получить псевдоним и имя сертификата в каждом из файлов.

Ответ 1

Вы можете запустить следующую команду, чтобы отобразить содержимое файла хранилища ключей:

keytool -list -keystore .keystore

Если вы ищете определенный псевдоним, вы также можете указать его в команде:

keytool -list -keystore .keystore -alias foo

Если псевдоним не найден, будет отображаться исключение:

ошибка keytool: java.lang.Exception: псевдонима не существует

Ответ 2

Чтобы получить все подробности, мне пришлось добавить опцию -v для ответа romaintaz:

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

Ответ 3

Вы можете запускать из 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();
            }
    }

Класс сертификата содержит всю информацию о хранилище ключей.

ОБНОВЛЕНИЕ ЧАСТНОГО КЛЮЧА

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

@prateek Надеюсь, это то, что вы ищете!

Ответ 4

KeyStore Explorer с открытым исходным кодом для управления хранилищами ключей.

Ответ 5

В среде bash -like вы можете использовать:

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

Эта команда состоит из 3 частей. Как указано выше, часть 1st будет перечислять все доверенные сертификаты со всеми подробностями и что для этого требуется 2nd, чтобы фильтровать только информацию о псевдонимах среди этих деталей. И, наконец, в разделе 3rd вы можете найти определенный псевдоним (или его часть). -i включает режим, не учитывающий регистр. Таким образом, данная команда даст все псевдонимы, содержащие шаблон "foo", т.е. foo, 123_FOO, fooBar и т.д. Для получения дополнительной информации man grep.

Ответ 6

Здесь перечислены все сертификаты:

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