6

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

17

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

5 ответ(ов)

12

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

keytool -v -list -keystore /путь/к/вашему/keystore

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

keytool -list -keystore /путь/к/вашему/keystore -alias foo

Если алиас не найден, будет отображено сообщение об ошибке:

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

Таким образом, проверьте правильность введенного алиаса или наличие нужного алиаса в хранилище ключей.

3

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

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

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

try {
    File file = new File(keystoreLocation);
    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 (is != null) {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

UPDATE - ПОЛУЧЕНИЕ ЧАСТНОГО КЛЮЧА

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

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

0

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

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

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

0

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

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

Убедитесь, что вы указали правильный путь к вашему файлу cacerts и что у вас есть необходимые права доступа для чтения этого keystore. Если требуется, вы также можете добавить флаг -storepass changeit, чтобы указать стандартный пароль по умолчанию для keystore cacerts.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь