web-dev-qa-db-fra.com

Comment vérifier le nom du certificat et l'alias dans les fichiers de clés?

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.

367
Malthan

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

622
Romain Linsolas

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
247
enkara

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!

61
Renjith

KeyStore Explorer Outil visuel open source permettant de gérer les magasins de clés.

56
Ycnannamela

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.

16
Svetoslav

Ceci listera tous les certificats:

keytool -list -keystore "$Java_HOME/jre/lib/security/cacerts"
9
Walk