我正在使用类 InstallCert将 VMware vCenter 证书导入到我的本地 Java keystore 中。
socket.startHandshake()
行返回 UnsupportedOperationException
,但类 SavingTrustManager
仍然已成功下载证书。
然后,我使用以下代码片段将下载的证书存储到本地 keystore 中。
KeyStore jsk;
... ... ..
jks.setCertificateEntry(alias, cert);
OutputStream out = new FileOutputStream("jssecacert");
jks.store(out, passphrase);
out.close();
但是当我尝试列出 keystore 中的所有条目时:keytool -list -keystore jssecacerts -v
,它显示有 160 个条目,包括我下载的条目。
我非常确定 keystore 是由我的代码生成的,并且它最初应该是空的。我想知道其他 159 个条目来自哪里?
谢谢。
最佳答案
使用 KeyStoreExplorer 来比较两个信任库:Installcert 类生成的 jssecacerts 以及位于 Java>jre>security>lib 中的 cacerts 文件。
Istallcert 从服务器获取证书并创建您正在使用的 JVM 的信任库的副本。然后它将证书添加到您的信任库的副本中,并将其命名为“jssecacerts”。检查这段代码:
文件 file = new File("jssecacerts");
if (file.isFile() == false) {
char SEP = File.separatorChar;
文件目录 = new File(System.getProperty("java.home") + SEP
+“lib”+SEP+“安全”);
文件=新文件(目录,“jssecacerts”);
if (file.isFile() == false) {
文件=新文件(目录,“cacerts”);
}
}
然后您只需将 jsscacerts 重命名为 cacerts 并替换 JVM 上的原始证书
关于java - 将一个证书存储到我的 Java keystore 后出现多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35036327/