如果将包含一个或多个PrivateKeyEntry
的密钥库指定为信任存储,JSSE是否会在每个条目中从最终实体证书创建信任锚?
换句话说,如果我们有一个包含可信和私有条目的密钥库,那么在PrivateKeyEntry
下是否有足够的证书?或者,我们是否还必须将该证书添加为TrustedCertificateEntry
?
答案 0 :(得分:0)
无论如何,证书放在 PrivateKeyEntry 下或 trustedCertEntry 下,JVM 信任主机的证书都无关紧要。
在本地测试。
使用https和密钥库运行本地服务器,只有一个PrivateKeyEntry 。
使用代码运行客户端:
public static String getHTML(String urlToRead) throws Exception {
StringBuilder result = new StringBuilder();
URL url = new URL(urlToRead);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
return result.toString();
}
public static void main(String[] args) throws Exception {
String testUrl="https://localhost/test";
System.out.println(getHTML(testUrl));
}
没有任何:
线程中的异常" main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径
truststore 只包含一个 PrivateKeyEntry (与服务器用作密钥库的jks文件相同):
<!DOCTYPE....</html>
答案 1 :(得分:0)
如果我们有一个包含可信条目和私有条目的密钥库,那么在PrivateKeyEntry下获得证书是否足够
你永远不应该有这样的密钥库。
还是我们还应该将证书添加为trustedCertEntry,以便向代理下的自己/其他节点发出请求?
trustedCertEntry
用于传入证书。私钥条目用于传出证书。
你正在混淆两个不同的东西,实际上是密钥库的两种不同用途。
包含trustedCertEntry
的密钥库文件是{em> truststore ,在javax.net.ssl.trustStore
意义上,它告诉JSSE哪些传入证书直接或间接信任。
包含PrivateKeyEntry
的密钥库文件是密钥库,在javax.net.ssl.keyStore
意义上,它告诉JSSE用于出站的证书证书。
包含两者的密钥库文件存在根本错误的格式。信任库只是要信任的证书列表。这不是秘密。 KeyStore包含您的私钥,对每个人来说都是绝密。将两者混为一谈是一项重大的安全漏洞。
如果没关系,为什么会有两种不同类型的条目?
这甚至都不是一个问题的正确问题。如果您拥有可信证书的私钥,则表示您拥有其他人的私钥,这是表面上安全漏洞。