如何在Java中启用SSL 3

自Java 8 Update 31起,由于SSL协议中的安全漏洞,默认情况下禁用SSL 3协议(请参阅POODLE攻击 )。

即使不推荐,如何启用?

除非您使用SSL 3别无选择,否则下面的链接将说明配置。

更新31的发行说明提供了在Java中再次启用SSL 3的信息。

就像声明的那样:

如果绝对需要 SSLv3,则可以通过从java.security文件中的jdk.tls.disabledAlgorithms属性中删除“SSLv3”或通过在初始化JSSE之前将此Security属性动态设置为“true”来重新激活协议。

请记住,甚至可以利用TLS协议来允许使用SSL 3进行不安全的访问,这也是POODLE漏洞的一部分。 只有出于严峻的原因,为Java或任何其他技术启用此function应该是最后的手段。

如果必须在8u31,7u75,6u91上重新启用SSLv3.0,您只需在JRE_HOME / lib / security / java.security中注释掉以下行:

jdk.tls.disabledAlgorithms=SSLv3 

码:

 import javax.net.ssl.*; public class SocketProtocols { public static void main(String[] args) throws Exception { SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket soc = (SSLSocket) factory.createSocket(); // Returns the names of the protocol versions which are // currently enabled for use on this connection. String[] protocols = soc.getEnabledProtocols(); System.out.println("Enabled protocols:"); for (String s : protocols) { System.out.println(s); } } } 

输出:

在启用SSL 3.0之前

 $ /jdk1.8.0_31/bin/java SocketProtocols Enabled protocols: TLSv1 TLSv1.1 TLSv1.2 

启用S​​SL 3.0后

 $ /jdk1.8.0_31/bin/java SocketProtocols Enabled protocols: SSLv3 TLSv1 TLSv1.1 TLSv1.2 

学分/来源: http : //javablogx.blogspot.de/2015/02/enabling-ssl-v30-in-java-8.html

您可以在运行时设置jdk.tls.disabledAlgorithms安全属性,如下所示。

 static { Security.setProperty("jdk.tls.disabledAlgorithms", ""); } 

我发现连接到DRAC 5卡需要进行这两种编辑:

删除MD5:

 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 

删除SSLv3,RC4和MD5withRSA:

 jdk.tls.disabledAlgorithms=DH keySize < 768