У меня есть группа файлов .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"