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