2014-10-22 65 views
7

由於Poodle攻擊,現在建議爲客戶端和服務器應用程序禁用SSLv3,並且只允許TLS 1.0 -TLS 1.2連接。是否可以爲所有Java應用程序禁用SSLv3?

有沒有辦法在計算機上禁用所有基於Java的應用程序(服務器和客戶端)的SSLv3,而無需修改每個Java程序?

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

有沒有人知道這樣的方式?

+0

[Java的HTTP客戶端和獅子狗]的可能重複(http://stackoverflow.com/questions/26429751/java-http-clients-and-poodle) – 2014-12-08 14:04:12

回答

1

看看http://www.oracle.com/technetwork/java/javase/overview/tlsreadme-141115.html

相關部分:

重新談判可以重新啓用那些由之前的新系統屬性sun.security.ssl.allowUnsafeRenegotiation設置爲true需要它的應用程序JSSE庫被初始化。有幾種方法來設置該屬性: 命令行: %的Java -Dsun.security.ssl.allowUnsafeRenegotiation =真正的主 Java控制面板(Java插件/ Java Web Start的) - 運行時環境。 在應用程序內: java.lang.System.setProperty(「sun.security.ssl.allowUnsafeRenegotiation」,true); 請注意,除非客戶端和服務器已啓用重新協商,否則不會發生TLS/SSL重新協商。

它解釋了問題和修復。

+0

你肯定不安全,重新談判是相關獅子狗 - attck? – Robert 2014-10-22 11:08:30

+0

是的,非常非常。這種攻擊是可行的,因爲它可以強制使用較低的協議(SSL3而不是TLS)。通過禁用重新協商,您可以禁用攻擊, – Davio 2014-10-22 11:09:41

+1

回退機制和重新協商是不同的。回退將嘗試使用最新的協議創建連接,如果失敗,嘗試使用最近的協議。連接成功建立後,重新協商正在改變ssl連接。 – Kazaag 2014-10-22 12:05:10

0

對於使用java.net包,你可以嘗試使用環境變量_JAVA_OPTIONS設置系統屬性https.protocols HTTPS的連接:

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

應該只啓用了以上協議。請注意,在Java 7之前,受支持的最大版本是TLSv1。

此解決方案不會影響任何其他SSL連接或http連接,例如, apache-http連接器。

+0

這隻會影響Java **客戶端**。檢查[這裏](https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https) – BonanzaOne 2017-11-06 14:37:59

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

我只是執行下面的代碼段不允許SSLv3和SSLv2Hello我們的Java6應用之一。

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])); 
} 

disabledSSLProtocolsSSLv3,SSLv2Hello

+0

這隻會影響Java **客戶**。檢查[這裏](https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https) – BonanzaOne 2017-11-06 14:37:48

相關問題