2015-09-28 98 views
0

我有SSL客户端证书。它正在与我的应用程序一起工作,直到最近发生的某个Java更新(也许早在一年之前)。它适用于Web浏览器。它适用于卷曲。如何在Java 8.31上使用客户端证书

例如,我可以做到这一点,它是罚款:

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显示它。它甚至没有显示任何关于我想要达到的URL。

我出来的想法。

回答

0

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

尝试使用此选项(例如需要为老年人SQL Server实例)上运行Java:

-Djsse.enableCBCProtection=false 

如果不工作,也许服务器使用SSLv3的,所以看到这太问题的How to enable SSL 3 in Java

如果这些工作中有任何一个是解决方法,则需要降级SSL安全性,因此强烈建议您升级服务器,然后再次删除这些解决方法。

+0

我不认为这是问题 - 卷曲的详细输出显示它使用TLS1.2: '*使用TLSv1.2工作/ ECDHE-RSA-AES256-GCM-SHA384' SSL连接 –