Ssl

https://weakdh.org 上的 Tomcat 解決方案有拼寫錯誤?

  • July 27, 2015

為https://weakdh.org/sysadmin.html上的 Tomcat 修復列出的非 GCM 密碼是否有拼寫錯誤?

在“Apache Tomcat”標題下和文本“在 server.xml 文件(用於 JSSE)”下,有以下連接器密碼配置。

我的問題與底部 14 個密碼有關(名稱中沒有 GCM 的密碼)

(為了可讀性添加了新行)

<Connector ciphers="[GCM Ciphers],
 TLS_ECDHE_RSA_WITH_AES_128_SHA256,
 TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,
 TLS_ECDHE_RSA_WITH_AES_128_SHA,
 TLS_ECDHE_ECDSA_WITH_AES_128_SHA,
 TLS_ECDHE_RSA_WITH_AES_256_SHA384,
 TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,
 TLS_ECDHE_RSA_WITH_AES_256_SHA,
 TLS_ECDHE_ECDSA_WITH_AES_256_SHA,
 TLS_DHE_RSA_WITH_AES_128_SHA256,
 TLS_DHE_RSA_WITH_AES_128_SHA,
 TLS_DHE_DSS_WITH_AES_128_SHA256,
 TLS_DHE_RSA_WITH_AES_256_SHA256,
 TLS_DHE_DSS_WITH_AES_256_SHA,
 TLS_DHE_RSA_WITH_AES_256_SHA
" />

應該是這些 CBC 密碼嗎?

<Connector ciphers="[GCM Ciphers],
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
 TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
 TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
 TLS_DHE_RSA_WITH_AES_256_CBC_SHA
" />

似乎他們在名稱中缺少 CBC_。

範例:

TLS_DHE_RSA_WITH_AES_256_SHA 應該是TLS_DHE_RSA_WITH_AES_256_CBC_SHA。根據https://www.openssl.org/docs/apps/ciphers.html,後者存在而前者不存在。

如果您查看weakdh.org站點上的其他修復程序,您會看到其他產品使用不同的密碼命名約定。使用 OpenSSL 密碼列表,您可以將這些名稱映射到 Tomcat 使用的名稱,並找出它們映射到 CBC 密碼。

我嘗試使用在我的 server.xml 中發布的weakdh.org中的密碼,但它沒有效果。即使一個密碼拼寫錯誤或不是合法的密碼名稱,Tomcat 也會忽略這些密碼,並且 Tomcat 會退回到使用 JVM 的預設密碼。將 CBC_ 添加到密碼名稱後,Tomcat 開始使用連接器密碼屬性中列出的密碼。

weakdh.org 解決方案是否有錯別字,還是我遺漏了什麼?

來自weakdh.org 的密碼似乎對您的系統無效,所以,是的,它正在回退到預設值。weakdh.org 上列出的那些可能適用於他們測試過的其他系統,或者它們可能完全是錯誤的,我不能完全確定,但我知道的是它們不在列表,所以它們可能在任何地方都無效。

要從http://markmail.org/message/zn4namfhypyxum23獲取系統的有效密碼套件列表:

來自:克里斯托弗·舒爾茨 (chr...@christopherschultz.net)

全部,

接下來,下面的程式碼可用於獲取目前可用的 SSL 密碼,並將顯示它們是否在您的特定 JVM 中啟用。請注意,這些都不是 Tomcat 特定的:

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import javax.net.ssl.SSLServerSocketFactory;

public class SSLInfo
{
   public static void main(String[] args)
       throws Exception
   {
       SSLServerSocketFactory ssf =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

       String[] defaultCiphers = ssf.getDefaultCipherSuites();
       String[] availableCiphers = ssf.getSupportedCipherSuites();

       TreeMap ciphers = new TreeMap();

       for(int i=0; i<availableCiphers.length; ++i )
           ciphers.put(availableCiphers[i], Boolean.FALSE);

       for(int i=0; i<defaultCiphers.length; ++i )
           ciphers.put(defaultCiphers[i], Boolean.TRUE);

       System.out.println("Default\tCipher");
       for(Iterator i = ciphers.entrySet().iterator(); i.hasNext(); ) {
           Map.Entry cipher=(Map.Entry)i.next();

           if(Boolean.TRUE.equals(cipher.getValue()))
               System.out.print('*');
           else
               System.out.print(' ');

           System.out.print('\t');
           System.out.println(cipher.getKey());
       }
   }
}

編譯上述程式碼並從命令行執行java SSLInfo以獲取系統的有效密碼字元串列表。

引用自:https://serverfault.com/questions/706014