如何检查密钥库文件中的证书名称和别名?

我有一堆.keystore文件,需要find一个具有特定的CN和别名。 有没有办法做到这一点与keytool,jarsigner或其他工具? 我find了一种方法来检查是否使用特定的密钥库来签署特定的apk,但是我也需要在每个文件中获取别名和证书名称。

您可以运行以下命令来列出密钥库文件的内容:

keytool -list -keystore .keystore 

如果你正在寻找一个特定的别名,你也可以在命令中指定它:

 keytool -list -keystore .keystore -alias foo 

如果没有find别名,则会显示一个exception:

keytool错误:java.lang.Exception:别名不存在

为了得到所有的细节,我不得不添加-v选项romaintaz答案:

 keytool -v -list -keystore <FileName>.keystore 

您可以从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(); } } 

证书类包含有关密钥库的所有信息。

更新 – 获得私钥

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

@prateek希望这是你在找什么!

KeyStore Explorer开源可视化工具来pipe理密钥库。

在类似bash的环境中,您可以使用:

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

该命令由3部分组成。 如上所述, 第一部分将列出具有所有细节的所有可信证书,这就是为什么第二部分仅过滤这些细节中的别名信息的原因。 最后在第三部分中,您可以search特定的别名(或其中的一部分)。 -i打开不区分大小写的模式。 因此,给定的命令将产生包含模式'foo',fe foo,123_FOO,fooBar等的所有别名。有关更多信息man grep

这将列出所有证书:

 keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"