如何在Java中启用SSL 3.

14
自从Java 8 Update 31开始,由于SSL协议的安全漏洞(参见POODLE攻击),SSL3协议默认被禁用。
即使不建议这样做,也可以如何启用SSL3协议?
4个回答

15

除非你别无选择,只能使用SSL 3,否则请参考下面的链接来了解配置。

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

如以下所述:

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

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


需要设置哪个属性为true呢?...通过在JSSE初始化之前动态地将此安全性属性设置为“true”。 - mohanaki
由于它说“动态”,我认为它意味着使用代码,以编程方式。 - Evandro Pomatti

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

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

本文讲述如何在Java 8中启用SSL v3.0


9
您可以像这样在运行时设置jdk.tls.disabledAlgorithms安全属性。
static {
    Security.setProperty("jdk.tls.disabledAlgorithms", "");
}

3

我发现为了连接到DRAC 5卡,需要进行以下两个编辑:

移除MD5:

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

移除SSLv3、RC4和MD5withRSA:

jdk.tls.disabledAlgorithms=DH keySize < 768

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接