我正在使用班级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个条目来自哪里?
感谢。
答案 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上的原始文件