如何在Java 8.31中使用客户端证书

时间:2015-09-28 01:24:29

标签: java ssl https client-certificates

我有SSL客户端证书。它正在使用我的应用程序,直到最近一次Java更新发生(可能早在一年之后)。它适用于Web浏览器。它适用于卷曲。

例如,我可以这样做,很好:

curl --cert example.pem https://example.net

现在我无法使用此证书来使用Java。我尝试了一个非常小的应用程序,例如来自https://gist.github.com/4ndrej/4547029的SSLPoke

将证书放入ControlPanel的客户端证书中并不行。

将.pem导入密钥库,然后使用-Djavax.net.ssl.trustStore.keystore指向该密钥库,并不执行此操作。

我离开Java的是:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

所以我无法弄清楚出了什么问题 - 我调用Java的方式是什么?我放证书的地方?我导入证书的方式是什么?

使用-Djava.security.debug=all的调试输出不会使用我指定的trustStore / keyStore显示它。它甚至没有显示我想要覆盖的网址。

我没有想法。

1 个答案:

答案 0 :(得分:0)

您的服务器可能使用过时的SSL协议,默认情况下,出于安全原因,Java不再允许该协议。

尝试使用此选项运行Java(例如旧SQL Server实例需要):

document.getElementById("append").onclick = function()
{
    var text = document.getElementById("new-text").value;

    var li = "<li>" + text + "</li>";
    document.getElementById("list").appendChild(li);
}

如果这不起作用,服务器可能正在使用SSLv3,请参阅How to enable SSL 3 in Java的这个问题。

如果其中任何一项工作,他们需要降级SSL安全性,因此强烈建议您升级服务器,并再次删除这些解决方法。