不是您需要添加到信任库中的指纹,而是实际的证书。
您可以添加服务器证书本身,也可以在链中添加一个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.jks
为lib/security/cacerts
Java主目录中的路径(默认密码应为changeit
)。
由于目标服务器无论如何似乎都来自著名的CA(并且适用于JRE的某些版本),因此最简单的修复方法当然是cacerts
手动更新文件,并从与其一起工作的JRE中获取副本。毕竟,正如《JSSE参考指南》所说:
重要说明:JDK随附了/ lib / security / cacerts文件中有限数量的受信任的根证书。如keytool中所述,如果您将此文件用作信任库,则有责任维护(即添加/删除)此文件中包含的证书。
根据您联系的服务器的证书配置,您可能需要添加其他根证书。从适当的供应商处获取所需的特定根证书。
事实证明,证书链顺序肯定是有问题的(在此站点上不正确),如Qualys SSL Labs测试仪所示。