Назад | Перейти на главную страницу

В решении Tomcat на https://weakdh.org есть опечатки?

Используйте шифры, отличные от GCM, перечисленные для исправления Tomcat на 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, второе существует, а первое - нет.

Если вы посмотрите на другие исправления на weakdh.org site, вы можете увидеть, что другие продукты используют другое соглашение об именах шифров. Используя список шифров OpenSSL, вы можете сопоставить эти имена с именами, которые использует Tomcat, и узнать, что они сопоставлены с шифрами CBC.

Я пробовал использовать шифры из weakdh.org как опубликовано в моем server.xml, но это не повлияло. Похоже, что Tomcat игнорирует шифры, если хотя бы один шифр написан с ошибкой или не является допустимым именем шифра, и Tomcat возвращается к использованию шифров JVM по умолчанию. Как только я добавил CBC_ к именам шифров, Tomcat начал использовать шифры, перечисленные в атрибуте Connector ciphers.

Есть ли опечатки в решении 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 из командной строки, чтобы получить список допустимых строк шифра для вашей системы.