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

Resuelto Malthan asked hace 54 años • 12 respuestas

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

Malthan avatar Jan 01 '70 08:01 Malthan
Aceptado

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

keytool -v -list -keystore /path/to/keystore

Si buscas un alias específico (por ejemplo foo), también puedes especificarlo en el comando:

keytool -list -keystore /path/to/keystore -alias foo

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

error de herramienta clave: java.lang.Exception: el alias no existe

Romain Linsolas avatar Oct 15 '2012 11:10 Romain Linsolas

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

keytool -v -list -keystore <FileName>.keystore
enkara avatar Apr 17 '2015 11:04 enkara

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

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

ACTUALIZAR- OBTENER 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!

Renjith avatar Oct 15 '2012 11:10 Renjith

En un entorno similar a bash puedes usar:

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

Este comando consta de 3 partes. Como se indicó anteriormente, la primera parte enumerará todos los certificados confiables con todos los detalles y es por eso que la segunda parte filtra solo la información del alias entre esos detalles. Y finalmente en la parte puedes buscar un alias específico (o parte de él). El -i activa el modo que no distingue entre mayúsculas y minúsculas. Por lo tanto, el comando dado generará todos los alias que contengan el patrón 'foo', fe foo, 123_FOO, fooBar, etc. Para obtener más información man grep.

Svetoslav avatar Nov 01 '2016 11:11 Svetoslav

Esto enumerará todos los certificados:

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
Walk avatar Mar 19 '2017 15:03 Walk