我正在使用 Liberty 16.0.0.4,我想从 facebook 帐户图像中获取图像,所以我运行了下一个命令将 facebook 证书添加到 Liberty 服务器
keytool -importcert -keystore /pathToServer/Servers/'03- Liberty 16.0.0.4'/wlp/usr/servers/MyProjectServer/resources/key.jks -file facebook.crt -alias facebooksigner
并且证书已成功添加到 liberty key.jks 文件中,我在列出此文件上的证书时看到它。
但是当我尝试使用 URL url = 新 URL(图片网址(获取图像时,我的问题;
它发射
[错误] CWPKI0022E:SSL 握手失败:从目标主机发送了具有 SubjectDN CN=*.facebook.com、O="Facebook, Inc."、L=Menlo Park、ST=California、C=US 的签名者。
注意:我<keyStore id="defaultKeyStore" password="{xor}EzY9Oi0rJg=="/>
添加到服务器中.xml
所以你能猜到为什么会这样吗?谢谢:)
为了使SSL正常工作,客户端需要信任服务器呈现给它的链 - 从顶部(根(级别一直向下。
你说你已经把Facebook证书放进了你的信任商店,但整个链条是可信的吗?至少,签署 Facebook 证书的根 CA 需要位于信任存储区中。
在 16.0.0.4(及更早版本(中,Java SE API 永远不会使用服务器.xml中定义的密钥库或信任库。他们将使用 JRE 的"cacerts"或您在控制信任和密钥存储的已知 SE 系统属性中定义的任何替代方法。
在 17.0.0.1(及更高版本(中,如果装入了 transportSecurity-1.0.xml则 Java SE 调用方可以使用服务器中定义的密钥库。