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



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

705   6  

6 ответов:

вы можете выполнить следующую команду, чтобы перечислить содержимое вашего файла хранилища ключей (и псевдоним):

keytool -v -list -keystore .keystore

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

keytool -list -keystore .keystore -alias foo

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

ошибка keytool: java.ленг.Исключение: псевдоним не существует

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

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

вы можете запустить из кода 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 надеюсь, что это то, что вы искали!

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

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

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

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

Это будет список всех сертификатов:

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

Comments

    Ничего не найдено.