J'ai un tas de fichiers .keystore et j'ai besoin d'en trouver un avec un CN et un alias spécifiques. Y a-t-il un moyen de le faire avec keytool, jarsigner ou un autre outil? J'ai trouvé un moyen de vérifier si un fichier de clés spécifique était utilisé pour signer un apk spécifique, mais je dois également obtenir l'alias et le nom du certificat dans chacun des fichiers.
Vous pouvez exécuter la commande suivante pour répertorier le contenu de votre fichier de clés (et de son nom d'alias):
keytool -v -list -keystore .keystore
Si vous recherchez un alias spécifique, vous pouvez également le spécifier dans la commande:
keytool -list -keystore .keystore -alias foo
Si l'alias n'est pas trouvé, il affichera une exception:
erreur keytool: Java.lang.Exception: l'alias n'existe pas
Afin d'obtenir tous les détails, j'ai dû ajouter l'option -v à la réponse de romaintaz:
keytool -v -list -keystore <FileName>.keystore
Vous pouvez exécuter à partir de Java code.
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();
}
}
La classe de certificat contient toutes les informations sur le magasin de clés.
MISE À JOUR- OBTENIR UNE CLÉ PRIVÉE
Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);
@prateek J'espère que c'est ce que vous cherchez!
KeyStore Explorer Outil visuel open source permettant de gérer les magasins de clés.
Dans un environnement bash, vous pouvez utiliser:
keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo
Cette commande est composée de 3 parties. Comme indiqué ci-dessus, la partie 1st liste tous les certificats de confiance avec tous les détails. C'est pourquoi la partie 2nd vient filtrer uniquement les informations d'alias parmi ces détails. Et enfin, dans la partie rd, vous pouvez rechercher un alias spécifique (ou une partie de celui-ci). Le - i active le mode insensible à la casse. Ainsi, la commande donnée donnera tous les alias contenant le motif 'foo', f.e. foo, 123_FOO, fooBar, etc. Pour plus d'informations man grep
.
Ceci listera tous les certificats:
keytool -list -keystore "$Java_HOME/jre/lib/security/cacerts"