Answers:
您可以运行以下命令来列出密钥库文件的内容(和别名):
keytool -v -list -keystore .keystore
如果要查找特定的别名,也可以在命令中指定它:
keytool -list -keystore .keystore -alias foo
如果找不到别名,它将显示异常:
keytool错误:java.lang.Exception:别名不存在
/path/to/keystore
不是.keystore
会更清楚地向读者。无论如何,这是正确的答案!
为了获得所有详细信息,我必须在romaintaz答案中添加-v选项:
keytool -v -list -keystore <FileName>.keystore
-v
指定了该选项,那么证书将以人类可读的格式打印,并带有所有者,发行者,序列号和任何扩展名等其他信息。” (请参阅:《Java SE工具参考》,“显示数据”命令,-list选项)
您可以从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();
}
}
证书类包含有关密钥库的所有信息。
更新-获取私钥
Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);
@prateek希望这是您想要的!
java.security.UnrecoverableKeyException
这是我实际尝试获取别名密码时尝试抛出的异常
KeyStore Explorer 开源可视化工具来管理密钥库。
这将列出所有证书:
keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"