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

时间:2014-10-22 09:46:08

标签: java poodle-attack

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

有没有办法在计算机上为所有基于Java的应用程序(服务器和客户端)禁用SSLv3,而无需修改每个Java程序?

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

有人知道这种方式吗?

4 个答案:

答案 0 :(得分:3)

您尚未指定Java的版本,因为在Java 8下面无法禁用或禁用特定的SSL协议,但在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或更低版​​本,请尝试使用解释Instructions to disable SSL v3.0 in Oracle JDK and JRE

的解决方法

我刚刚在我们的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的位置

答案 1 :(得分: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(&#34; sun.security.ssl.allowUnsafeRenegotiation&#34;,true);   请注意,除非客户端和服务器都启用了重新协商,否则不会发生TLS / SSL重新协商。

它解释了问题和解决方法。

答案 2 :(得分:0)

对于使用java.net-package的https-connections,您可以尝试使用环境变量_JAVA_OPTIONS来设置系统属性https.protocols

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

应仅启用上述协议。请注意,在Java 7之前,支持的最大版本是TLSv1。

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

答案 3 :(得分:0)