当前位置: 首页 > 面试题库 >

如何将指纹添加到密钥库

哈扬
2023-03-14
问题内容

写入SSL套接字时出现以下异常

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

似乎目标服务器的证书不受信任。我在Windows 7机器jdk7和tomcat7上测试了我的实现,没有问题。在带有openJDK
6和tomcat7的ubuntu 10
LTS上引发了异常。我得到了套接字目标服务器的sha1和md5指纹。我要流式传输的服务器的证书不是我的ubuntu服务器上的受托人吗?我可以将指纹保存到tomcats密钥库中吗?如果是这样,我该怎么做?


问题答案:

不是您需要添加到信任库中的指纹,而是实际的证书。

您可以添加服务器证书本身,也可以在链中添加一个CA证书(如果您希望信任该CA中的所有证书,而不仅仅是该特定服务器)。

要了解证书是什么,可以使用OpenSSL:

openssl s_client -showcerts -connect your.host.name:443

(用您使用的实际端口替换主机名和443。)

两者之间的块--BEGIN/END CERT...--是PEM格式的证书。您可以使用openssl x509 -text -noout(并在其中粘贴每个块)检查其内容。

将您要导入的证书保存到纯文本文件中(例如certificate.pem)。您应该只导入您信任的证书。这里有一定的信念飞跃。(例如,您可能想连接浏览器并检查密钥材料是否匹配。)

要导入您的信任库,请使用:

keytool -importcert -keystore truststore.jks -file certificate.pem

(您可能需要指定一个别名wit -alias some_name_you_choose。)

如果您希望这影响默认的信任库,请替换truststore.jkslib/security/cacertsJava主目录中的路径(默认密码应为changeit)。

由于目标服务器无论如何似乎都来自著名的CA(并且适用于JRE的某些版本),因此最简单的修复方法当然是cacerts手动更新文件,并从与其一起工作的JRE中获取副本。毕竟,正如《JSSE参考指南》所说:

重要说明:JDK随附了/ lib / security /
cacerts文件中有限数量的受信任的根证书。如keytool中所述,如果您将此文件用作信任库,则有责任维护(即添加/删除)此文件中包含的证书。

根据您联系的服务器的证书配置,您可能需要添加其他根证书。从适当的供应商处获取所需的特定根证书。

事实证明,证书链顺序肯定是有问题的(在此站点上不正确),如Qualys
SSL Labs测试仪所示。



 类似资料:
  • 问题内容: 我的文件带有证书链-certificate.cer: 我需要将此证书链添加到密钥库。 我做的事: 结果,我在密钥库中只有1个证书。 但是应该有3. 什么地方可能出问题? 解决方案: CA向我发送了PKCS#7格式的证书。 我将它们存储在certificate.p7b文件中,然后通过以下命令将它们成功添加到密钥库中: 问题答案: 从keytool管理员中-如果以PKCS#7格式输入,它将

  • 问题内容: 我正在编写NIO服务器,并希望根据用户请求进行响应,即将一些数据写入通道。 读取一些数据后,我想响应。这意味着我需要添加到键,然后将键添加到“ 选定键”集中 ,然后一旦键出现在选定集中,就将一些内容写入通道。 如何将密钥显式添加到所选集中? 问题答案: 你不能 从Javadoc: 键可能无法直接添加到所选键集中。 您只能从中删除密钥。 但是您不需要任何这些。如果要写,只需写,且 仅当

  • 我们的应用程序成功地使用了此证书,并且在此过程中没有抛出任何错误。

  • 问题内容: 我想自动将键添加到Python字典(如果还不存在)。例如, 如果密钥不存在,如何自动创建密钥? 问题答案: 使用:

  • 获得SHA-1指纹的方法与获得指纹的方法相同吗?以前,我运行的是以下命令: 我不清楚我得到的结果是不是SHA-1指纹。有人能澄清一下吗?