【问题标题】:SSL HANDSHAKE FAILURE: A signer with SubjectDN CN=*.facebook.comSSL 握手失败:SubjectDN CN=*.facebook.com 的签名者
【发布时间】:2025-12-20 18:05:10
【问题描述】:

我正在使用 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 = new URL(pictureUrl);

获取图像时我的问题

它触发了

[错误] CWPKI0022E: SSL HANDSHAKE FAILURE: 从目标发送了具有 SubjectDN CN=*.facebook.com, O="Facebook, Inc.", L=Menlo Park, ST=California, C=US 的签名者主持人。

注意:我在 server.xml 中添加了<keyStore id="defaultKeyStore" password="{xor}EzY9Oi0rJg=="/>

那么你能猜到为什么会这样吗?谢谢:)

【问题讨论】:

    标签: java ssl websphere-liberty


    【解决方案1】:

    为了使 SSL 工作,客户端需要信任服务器提供给它的链 - 从最高(根)级别一直向下。

    您说您已将 Facebook 证书放入您的信任库,但整个链是否受信任?至少,签署 Facebook 证书的根 CA 需要在信任库中。

    【讨论】:

    • 您是否需要安装 facebook 证书并确保整个链受信任?
    【解决方案2】:

    在 16.0.0.4(及更早版本)中,java SE API 永远不会使用 server.xml 中定义的密钥库或信任库。他们将使用 JRE 的“cacerts”或您在控制信任和密钥存储的知名 SE 系统属性中定义的任何替代方案。

    在 17.0.0.1(及更高版本)中,如果加载了 transportSecurity-1.0,java SE 调用者可以使用 server.xml 中定义的密钥库。

    【讨论】: