Am o grămadă de .keystore fișiere și nevoie pentru a găsi unul cu specific CN și alias. Există o modalitate de a face cu keytool, jarsigner sau un alt instrument? Am găsit o modalitate de a verifica dacă anumite chei a fost folosit pentru a semna un anumit apk, dar eu, de asemenea, nevoie pentru a obține numele și numele de certificat în fiecare dintre fișierele.
Aveți posibilitatea să executați următoarea comandă pentru a lista conținutul de chei de fișier (și nume):
keytool -v -list -keystore .keystore
Dacă sunteți în căutarea pentru un anumit alias, de asemenea, puteți să specificați în comandă:
keytool -list -keystore .keystore -alias foo
Dacă numele nu este găsit, acesta va afișa o excepție:
keytool eroare: java.lang.Excepție: Alias
nu există
Puteți rula de cod 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();
}
}
Certificatul de clasa deține toate informațiile despre chei.
UPDATE - OBȚINEREA CHEIE PRIVATĂ
Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);
@prateek Sper că acest lucru este ceea ce cautati!
Într-un bash-ca mediu puteți folosi:
keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo
Această comandă compus din 3 piese. După cum se menționează mai sus, 1 parte va lista toate certificatele de încredere, cu toate detaliile și că's de ce 2 parte vine de la filtru numai alias informații între aceste detalii. Și în cele din urmă în 3 parte, puteți căuta o anumită alias (sau o parte din ea). A -i transformă caz insensibil mode. Astfel a dat comandă va da toate alias-uri care conțin model 'foo', f.e. foo, 123_FOO, fooBar, etc. Pentru mai multe informații man grep
.