У меня есть куча файлов .keystore, и мне нужно найти один с конкретным CN и псевдонимом. Есть ли способ сделать это с помощью keytool, jarsigner или другого инструмента? Я нашел способ проверить, использовалось ли определенное хранилище ключей для подписи определенного apk, но мне также нужно получить псевдоним и имя сертификата в каждом из файлов.
Как проверить имя и псевдоним сертификата в файлах хранилища ключей?
Ответы (7)
Вы можете запустить следующую команду, чтобы вывести список содержимого вашего файла хранилища ключей (и псевдонима):
keytool -v -list -keystore .keystore
Если вы ищете конкретный псевдоним, вы также можете указать его в команде:
keytool -list -keystore .keystore -alias foo
Если псевдоним не найден, отобразится исключение:
ошибка keytool: java.lang.Exception: псевдоним не существует
/path/to/keystore
вместо .keystore
. В любом случае это правильный ответ!
- person Andrea; 11.07.2018
Чтобы получить все подробности, мне пришлось добавить параметр -v в ответ romaintaz:
keytool -v -list -keystore <FileName>.keystore
-v
, сертификат печатается в удобочитаемом формате с дополнительной информацией, такой как владелец, эмитент, серийный номер и любые расширения. (см .: Справочник по инструментам Java SE, отображение данных команда, параметр -list)
- person Eido95; 24.08.2017
Вы можете запускать из кода Java.
try {
File file = new File(keystore location);
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(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 Надеюсь, это то, что вы ищете!
java.security.UnrecoverableKeyException
это исключение, возникающее, когда я пробую этот код, на самом деле я хочу получить пароль псевдонима
- person Prateek; 22.08.2013
KeyStore Explorer визуальный инструмент с открытым исходным кодом для управления хранилищами ключей.
В среде, подобной bash, вы можете использовать:
keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo
Эта команда состоит из 3-х частей. Как указано выше, в 1-й части будут перечислены все доверенные сертификаты со всеми подробностями, поэтому 2-я часть предназначена для фильтрации только информации о псевдонимах среди этих сведений. И, наконец, в третьей части вы можете искать конкретный псевдоним (или его часть). -i включает режим без учета регистра. Таким образом, данная команда выдаст все псевдонимы, содержащие шаблон 'foo', например. foo, 123_FOO, fooBar и т. д. Для получения дополнительной информации man grep
.
В нем будут перечислены все сертификаты:
keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
Также существует консольный менеджер сертификатов, написанный как однофайловый сценарий оболочки (с открытым исходным кодом):
https://dev.to/sfkulyk/writing-panel-manager-for-certificate-keystore-in-linux-shell-187b
Можно просматривать, копировать, удалять, переименовывать и сравнивать хранилища ключей.