¿Cómo verificar el nombre y el alias del certificado en los archivos del almacén de claves?


Tengo un montón de .keystore archivos y necesidad de encontrar uno con CN específico y alias. ¿Hay alguna forma de hacerlo con keytool, jarsigner o alguna otra herramienta? Encontré una manera de comprobar si se usó un almacén de claves específico para firmar un apk específico, pero también necesito obtener el alias y el nombre del certificado en cada uno de los archivos.

Author: Malthan, 2012-10-15

6 answers

Puede ejecutar el siguiente comando para listar el contenido de su archivo de almacén de claves (y el nombre de alias):

keytool -v -list -keystore .keystore

Si está buscando un alias específico, también puede especificarlo en el comando:

keytool -list -keystore .keystore -alias foo

Si el alias no se encuentra, mostrará una excepción:

Error de Keytool: java.lang.Excepción: Alias no existe

 488
Author: romaintaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 05:18:02

Para obtener todos los detalles tuve que agregar la opción-v a romaintaz respuesta:

keytool -v -list -keystore <FileName>.keystore
 215
Author: enkara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-07 18:18:48

Se puede ejecutar desde código 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();
            }
    }

La clase de certificado contiene toda la información sobre el almacén de claves.

UPDATE-OBTENER LA CLAVE PRIVADA

Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);

@ prateek Espero que esto sea lo que estás buscando!

 53
Author: Renjith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-22 11:34:31

KeyStore Explorer herramienta visual de código abierto para administrar los almacenes de claves.

 51
Author: Ycnannamela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-18 14:13:38

En un entorno similar a bash puede usar:

keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo

Este comando consta de 3 partes. Como se indicó anteriormente, la parte 1st listará todos los certificados de confianza con todos los detalles y es por eso que la parte 2nd viene a filtrar solo la información de alias entre esos detalles. Y finalmente en la parte 3rd puede buscar un alias específico (o parte de él). El -i activa el modo insensible a mayúsculas y minúsculas. Por lo tanto, el comando dado producirá todos los alias que contengan el patrón 'foo', f. e. foo, 123_FOO, fooBar, etc. Para más información man grep.

 14
Author: Svetoslav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-01 11:52:41

Esto listará todos los certificados:

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
 7
Author: Walk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-19 15:30:14