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

时间:2012-10-15 10:46:18

标签: java android keystore

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

7 个答案:

答案 0 :(得分:592)

您可以运行以下命令列出密钥库文件的内容(和别名):

keytool -v -list -keystore .keystore

如果要查找特定别名,还可以在命令中指定它:

keytool -list -keystore .keystore -alias foo

如果找不到别名,则会显示异常:

  

keytool error:java.lang.Exception:Alias不存在

答案 1 :(得分:239)

为了获得所有细节,我必须将-v选项添加到romaintaz answer:

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

答案 2 :(得分:58)

您可以从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希望这就是你要找的!

答案 3 :(得分:55)

用于管理密钥库的

KeyStore Explorer开源可视化工具。

答案 4 :(得分:16)

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

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

该命令由3部分组成。如上所述,第一部分将列出所有受信任的证书,其中包含所有详细信息以及第二部分仅过滤这些详细信息中的别名信息的原因。最后,在 3rd 部分,您可以搜索特定的别名(或部分别名)。 -i 打开不区分大小写的模式。因此,给定的命令将产生包含模式&f 39的所有别名。 foo,123_FOO,fooBar等。有关详细信息man grep

答案 5 :(得分:8)

这将列出所有证书:

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

答案 6 :(得分:0)

也有写成单文件 shell 脚本的控制台证书管理器(开源):

https://dev.to/sfkulyk/writing-panel-manager-for-certificate-keystore-in-linux-shell-187b

可以浏览、复制、删除、重命名和比较密钥库。