如何在Java中启用SSL 3

时间:2015-01-30 12:35:56

标签: java ssl poodle-attack

自Java 8 Update 31起,由于SSL协议存在安全漏洞,默认情况下禁用SSL 3协议(参见POODLE attack)。

即使不推荐,如何启用?

4 个答案:

答案 0 :(得分:12)

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

release notes for the update 31提供了在Java中再次启用SSL 3的信息。

如上所述:

  

如果SSLv3 绝对需要,则可以重新激活协议   删除" SSLv3"来自的jdk.tls.disabledAlgorithms属性   java.security文件或通过动态设置此安全属性   "真"在JSSE初始化之前。

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

答案 1 :(得分:9)

如果您必须在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

启用SSL 3.0后

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

credits / source:http://javablogx.blogspot.de/2015/02/enabling-ssl-v30-in-java-8.html

答案 2 :(得分:7)

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

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

答案 3 :(得分:3)

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

删除MD5:

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

删除SSLv3,RC4和MD5withRSA:

jdk.tls.disabledAlgorithms=DH keySize < 768