将一个证书存储到Java密钥库后存储多个条目

时间:2016-01-27 11:38:09

标签: java certificate keystore vcenter

我正在使用班级InstallCert将VMware vCenter证书导入我的本地Java密钥库。

socket.startHandshake()返回UnsupportedOperationException,但班级SavingTrustManager仍然成功下载了证书。

然后,我使用以下代码段将下载的证书存储到我的本地密钥库中。

KeyStore jsk;
... ... ..
jks.setCertificateEntry(alias, cert);
OutputStream out = new FileOutputStream("jssecacert");
jks.store(out, passphrase);
out.close();

但是当我尝试列出密钥库中的所有条目时:keytool -list -keystore jssecacerts -v,它显示有160个条目,包括我已下载的条目。

我很确定密钥库是由我的代码生成的,它应该是最初为空的。我想知道其他159个条目来自哪里?

感谢。

1 个答案:

答案 0 :(得分:1)

使用KeyStoreExplorer比较两个信任库:由Installcert类生成的jssecacerts,以及位于Java> jre> security> lib的cacerts文件。

Istallcert从服务器获取证书并创建您正在使用的JVM的信任库的副本。然后它将证书添加到您的信任库的副本,并命名为" jssecacerts"。检查这段代码:

File file = new File("jssecacerts");
    if (file.isFile() == false) {
        char SEP = File.separatorChar;
        File dir = new File(System.getProperty("java.home") + SEP
        + "lib" + SEP + "security");
        file = new File(dir, "jssecacerts");
        if (file.isFile() == false) {
            file = new File(dir, "cacerts");

            }
    }

File file = new File("jssecacerts"); if (file.isFile() == false) { char SEP = File.separatorChar; File dir = new File(System.getProperty("java.home") + SEP + "lib" + SEP + "security"); file = new File(dir, "jssecacerts"); if (file.isFile() == false) { file = new File(dir, "cacerts"); } }

然后您只需要将jsscacerts重命名为cacerts并替换JVM上的原始文件