https://weakdh.org 上的 Tomcat 解决方案有拼写错误?

https://weakdh.org 上的 Tomcat 解决方案有拼写错误?

Tomcat 修复程序中列出的非 GCM 密码是否https://weakdh.org/sysadmin.html有错别字?

在“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,后者存在,前者不存在。

如果你看看弱者网站点上,您可以看到其他产品使用不同的密码命名约定。使用 OpenSSL 密码列表,您可以将这些名称映射到 Tomcat 使用的名称,并发现它们映射到 CBC 密码。

我尝试使用来自弱者网在我的 server.xml 中发布,但没有任何效果。看来,只要有一个密码拼写错误或不是合法的密码名称,Tomcat 就会忽略这些密码,然后 Tomcat 会重新使用 JVM 的默认密码。一旦我将 CBC_ 添加到密码名称中,Tomcat 就会开始使用 Connector ciphers 属性中列出的密码。

weakdh.org 解决方案是否有拼写错误,或者我遗漏了什么?

答案1

来自weakdh.org的密码似乎对您的系统无效,所以,是的,它正在恢复默认设置。weakdh.org上列出的密码可能在他们测试过的其他系统上有效,或者它们可能完全错误,我不能完全确定,但我知道它们不在列表中这里,因此它们可能在任何地方都无效。

要获取系统的有效密码套件列表,请从http://markmail.org/message/zn4namfhypyxum23

来自:克里斯托弗·舒尔茨([电子邮件保护]

全部,

接下来,下面的代码可用于获取当前可用的 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从命令行运行以获取系统有效密码字符串列表。

相关内容