我有一堆" .keystore "文件,需要找到其中一个具有特定CN和别名(alias)的文件。是否有使用keytool、jarsigner或其他工具来完成这个任务的方法?我发现了一种检查特定密钥库是否用于签署特定apk的方法,但我还需要在每个文件中获取alias和证书名称。
keytool -v -list -keystore /path/to/keystore
如果你正在寻找特定的别名(例如 foo),你也可以在命令中指定它:
keytool -list -keystore /path/to/keystore -alias foo
keytool 错误: java.lang.Exception: 别名不存在
为了获得所有细节,我必须将-v选项添加到romaintaz的答案中:
keytool -v -list -keystore <FileName>.keystore
你可以从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
这是当我尝试运行这段代码时抛出的异常,实际上我想要检索别名密码。 - PrateekKeyStore Explorer是一个开源的可视化工具,用于管理密钥库。
keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo
这个命令由3部分组成。如上所述,第1部分将列出所有信任的证书及其详细信息,因此第2部分仅过滤其中的别名信息。最后,在第3部分中,您可以搜索特定的别名(或其部分)。-i打开不区分大小写模式。因此,给定的命令将产生包含模式“foo”的所有别名,例如foo、123_FOO、fooBar等。有关更多信息,请参见man grep
。
这将列出所有的证书:
keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
命令行:
keytool -list -keystore 'keystoreName'
接着按下“Enter”键,然后命令提示符将提示您输入密钥库密码。
在输入时,命令提示符不会在屏幕上显示密码,所以只需仔细地输入正确的密码,然后再次按Enter即可。
或者,您可以使用:
keytool -list -keystore 'keystoreName' -storepass 'type your keystore passwd'
而要获取Keys的全部信息,只需添加-v:
keytool -v -list -keystore 'keystoreName' -storepass 'type your keystore passwd'
keytool -list -keystore C:/swdtools/jdk1.7.0_67/jre/lib/security/cacerts
还有一个控制台证书管理器,它是用单个文件的Shell脚本编写的(开源):
https://dev.to/sfkulyk/writing-panel-manager-for-certificate-keystore-in-linux-shell-187b
可以浏览、复制、删除、重命名和比较密钥库。