java - recuperar - ¿Cómo verificar el nombre del certificado y el alias en los archivos del almacén de claves?
keytool android (6)
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 forma de verificar si se utilizó 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.
En un entorno tipo 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 mostrará una lista de todos los certificados de confianza con todos los detalles y es por eso que la segunda parte trata de filtrar solo la información de alias entre esos detalles. Y, finalmente, en la tercera parte puede buscar un alias específico (o parte de él). El -i activa el modo no sensible a mayúsculas. Por lo tanto, el comando dado producirá todos los alias que contengan el patrón ''foo'', fe foo, 123_FOO, fooBar, etc. Para más información man grep
.
Esto listará todos los certificados:
keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
Para obtener todos los detalles tuve que agregar la opción -v a romaintaz answer:
keytool -v -list -keystore <FileName>.keystore
Puede ejecutar desde el código de 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.
ACTUALIZACIÓN- 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 buscas!
Puede ejecutar el siguiente comando para listar el contenido de su archivo de almacén de claves (y 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 no se encuentra el alias, mostrará una excepción:
Error keytool: java.lang.Exception: el alias no existe
KeyStore Explorer herramienta visual de código abierto para administrar los almacenes de claves.