所有Java应用程序是否可以禁用SSLv3?

7

由于Poodle攻击,现在建议禁用客户端和服务器应用程序的SSLv3,并仅允许TLS 1.0-TLS 1.2连接。

有没有一种方法可以在计算机上禁用所有基于Java的应用程序(服务器和客户端)的SSLv3,而不必修改每个Java程序?

也许有可能更改JRE的配置或使用特殊的环境变量。

有人知道这样的方法吗?


可能是Java HTTP客户端和POODLE的重复问题。 - Yves Martin
4个回答

3

由于在Java 8以下版本中没有禁用或取消特定SSL协议的方法,因此您尚未指定Java的版本。但是在Java 8中,您可以设置启用的协议,如下所示:

静态设置:

% java -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" MyApp

动态地:

java.lang.System.setProperty("jdk.tls.client.protocols", "TLSv1,TLSv1.1,TLSv1.2");

如果您仍在使用Java 7或以下版本,请尝试使用以下解决方法:禁用Oracle JDK和JRE中的SSL v3.0的说明 我刚在我们的Java6应用程序上实施了以下代码,以禁止SSLv3和SSLv2Hello。
if(disabledSSLProtocols != null) {

    String[] protocols = sslEngine.getEnabledProtocols();
    List<String> protocolList = new ArrayList<String>();

    for (String s : protocols) {

        if (disabledSSLProtocols.contains(s)) {

            log4j.info("{} protocol is disabled", s);
            continue;
        }

        log4j.info("{} protocol is enabled", s);
        protocolList.add(s);
    }

    sslEngine.setEnabledProtocols(protocolList.toArray(new String[0]));
}

disabledSSLProtocols被初始化为SSLv3,SSLv2Hello


这只会影响Java客户端。在此处查看:https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https - Evandro Pomatti

1
请查看http://www.oracle.com/technetwork/java/javase/overview/tlsreadme-141115.html 相关部分:
重协商可以通过在JSSE库初始化之前将新系统属性sun.security.ssl.allowUnsafeRenegotiation设置为true来重新启用需要该功能的应用程序。有几种方法可以设置此属性: 命令行: %java -Dsun.security.ssl.allowUnsafeRenegotiation=true Main Java控制面板(Java插件/ Java Web Start)-运行时环境。 在应用程序中: java.lang.System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", true); 请注意,除非客户端和服务器都启用了重协商,否则不会发生TLS / SSL重协商。

你确定不安全重协商对Poodle攻击有影响吗? - Robert
非常正确。攻击之所以有效,是因为它可以强制使用较低的协议(SSL3而不是TLS)。通过禁用重新协商,您可以防止此类攻击。 - Davio
1
回退机制和重新协商是不同的。回退将尝试使用最近的协议创建连接,如果失败,则尝试较旧的协议。重新协商是在成功建立连接后更改SSL连接。 - Kazaag

0

对于使用java.net包进行https连接,你可以尝试使用环境变量_JAVA_OPTIONS来设置系统属性https.protocols

_JAVA_OPTIONS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

应该仅启用所提到的协议。请注意,在Java 7之前,最大支持版本为TLSv1。

此解决方案不会影响使用apache-http-connector等其他SSL连接或http连接。


这只会影响Java客户端。在此处查看:https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https - Evandro Pomatti


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