我们有一个Java桌面产品,我们的客户(小企业)使用它(除其他外)通过几个不同的SOAP协议与大型保险公司通信。(我们是SOAP客户)。这里的重点是保险公司是房间里的大猩猩--我们只是使保险公司和我们的客户之间的沟通成为可能。
我们使用AXIS1作为SOAP客户端库。通常情况下是完美的,而且多年来一直如此。
一家主要的保险公司仍在使用TLS1.0作为SOAP服务器。我们对此没有任何影响,就像国际空间站对地球轨道的影响一样。
不幸的是(对我们来说)最新的Java版本8u60自动禁用TLS1.0。参见JDK-8076221:在id=8076221禁用RC4密码套件
所以现在我们有一些客户不能通过8u60进行连接。我们可以将其恢复到8u51,但这充其量只是短期的。
JDK-8076221提供了一些关于如何重新启用TLS1.0的线索,如下所示.
可以通过删除RC4文件中的"jdk.tls.disabledAlgorithms“安全属性或动态调用Security.setProperty()来重新激活这些密码套件,还可以使用SSLSocket/SSLEngine.setEnabledCiferSuites()方法将它们读入启用的加密套件列表。
不幸的是,对于像我这样的人(他依赖于被抽象出的安全层),这是不够的信息。
评论
有人能提供一些关于如何在Java 8u60中编程地启用TLS1.0的更详细的线索吗?
也许有点像..。
Security.setProperty("jdk.tls.disabledAlgorithms", "SSLv3");
SSLContext sslCtx = SSLContext.getInstance("TLS");
SSLSocket.setEnabledCipherSuites("please help me!");
SSLEngine.setEnabledCipherSuites("please help me!");非常感谢你抽出时间,-Damian
发布于 2015-10-08 07:00:25
检查http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html中的算法名。
TLS1.0与"TLSv1“( SSLContext算法节)匹配,因此类似于下面的内容将启用TLS1.0(注意,这适用于createEngine()返回的SSLEngine实例)。
SSLContext.getDefault().createSSLEngine().setEnabledCipherSuites(new String[] {"TLSv1"});要启用密码套件,必须用不同的内容覆盖当前值。您的代码禁用已经禁用的SSLv3。相反,您需要类似于
Security.setProperty("jdk.tls.disabledAlgorithms", "");但是,在执行此操作之前,请检查这些属性的实际工作方式。它希望Security属性包含密匙的名称,例如,作为逗号分隔的列表。所以你应该做这样的事
String disabledAlgorithms = Security.getProperty("jdk.tls.disabledAlgorithms");
Security.setProperty("jdk.tls.disabledAlgorithms", disabledAlgorithms .replace("RC4,", ""));https://stackoverflow.com/questions/33008332
复制相似问题