Ошибка открытого ключа Диффи-Хеллмана с Tomcat 7

Я успешно настроил две машины Ubuntu с сертификатами Tomcat и SSL. Я выполнил точно такую ​​же процедуру с Centos 6, но получаю это, когда пытаюсь подключиться к серверу (используя Opera):

Сервер имеет слабый эфемерный открытый ключ Диффи-Хеллмана.

Коннектор следующий, ошибок в catalina.log нет:

<Connector port="some port number"  
           protocol="org.apache.coyote.http11.Http11Protocol" 
           SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keystoreFile="path to jks"
           keystoreType="JKS"
           keystorePass="mypass1"
           keyPass="mypass2"  /> 

С Firefox я получаю сообщение об ошибке ненадежной связи.


person Bob    schedule 19.06.2015    source источник


Ответы (4)


Для меня это сработало после добавления списка разрешенных шифров в конфигурацию Tomcat в conf/server.xml для отключения слабых шифров Диффи-Хеллмана:

    <Connector
        ...
        ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
        ...
person centic    schedule 25.06.2015
comment
Знаем ли мы, является ли этот список окончательным? Где/как мы можем согласовать этот список для каждой версии Tomcat? - person Techmag; 10.08.2015
comment
Я не нашел ни одного, и, вероятно, трудно предоставить общий список, поскольку некоторые шифры считаются безопасными для одних и небезопасными для других. Так что это в значительной степени зависит от вашей среды, если вы управляете клиентом, вы даже можете сузить его до одного, который вы хотели бы использовать. - person centic; 11.08.2015
comment
вот несколько дополнительных ссылок, которые объясняют это более подробно блог .eveoh.nl/2014/02/tls-ssl-ciphers-pfs-tomcat devtidbits.com/2015/05/13/ security.stackexchange.com/questions/89689/ - person eramm; 03.09.2015
comment
Для всех этих несчастных ублюдков, использующих Tomcat 5.5/Java 6: разъем APR — это способ сделать это. - person Jochen Bedersdorfer; 09.09.2015
comment
Фантастический. Я следил за учебными пособиями, чтобы запустить существующий подстановочный сертификат на новом экземпляре Tomcat, и это было последним препятствием. Спасибо! - person Ternary; 23.09.2015
comment
Около года назад я добавил в руководство OWASP несколько примеров конфигураций, которые работают. Это было бы хорошим местом для внесения любых улучшений для всех. owasp.org/index.php/ - person Richard Brightwell; 06.11.2015

Это связано с тем, что новые версии браузеров начали выдавать предупреждения/ошибки при доступе к веб-сайтам, для которых настроены слабые шифры DH для SSL. Для получения дополнительной информации о проблеме следуйте ссылкам ниже

https://weakdh.org

проблема с заторами

Чтобы исправить это, вы можете найти способ обойти это на стороне браузера или на стороне сервера. Сторона сервера лучше всего, так как она решит проблему для всех пользователей, если они обращаются к серверу из разных браузеров/местоположений.

Исправьте проблему, которую мы должны убедиться, что наш сервер (в данном случае tomcat) использует надежные шифры для SSL.

В tomcat есть две разные реализации SSL. Defautl — это реализация JSSE, предоставляемая как часть среды выполнения Java. Другая реализация APR, которая по умолчанию использует движок OpenSSL.

JSSE, поскольку он зависит от среды выполнения Java, мы должны сначала выяснить, какую версию Java мы используем с tomcat. Tomcat 7 поддерживает Java 1.6 и выше. Затем нам нужно найти соответствующие наборы шифров, поддерживаемые соответствующей версией Java JSSE. Слабые — это те, которые содержат «DHE», поэтому выбирайте те, которые не содержат «DHE». Ниже перечислены несколько более сильных наборов для Java 1.6 JSSE.

TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_ECDH_ECDSA_WITH_RC4_128_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDH_RSA_WITH_RC4_128_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_ECDSA_WITH_NULL_SHA
TLS_ECDH_RSA_WITH_NULL_SHA
TLS_ECDHE_ECDSA_WITH_NULL_SHA
TLS_ECDHE_RSA_WITH_NULL_SHA
...

Составьте список надежных шифров и добавьте его к шифрам коннектора в conf/server.xml в вашем tomcat.

<Connector
...
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_RC4_128_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_RC4_128_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_NULL_SHA,TLS_ECDH_RSA_WITH_NULL_SHA,TLS_ECDHE_ECDSA_WITH_NULL_SHA,TLS_ECDHE_RSA_WITH_NULL_SHA"
...
/>

Перезапустите сервер, и ошибка/предупреждение должны исчезнуть. Помните, что если версия Java отличается, копирование/вставка, описанная выше, может не сработать. Поэтому обратитесь к правильной версии и поддерживаемым наборам шифров.

Примечание. Чтобы иметь возможность использовать 256-битные шифры AES, необходимо установить файлы политики юрисдикции неограниченной силы JCE.

Если Tomcat настроен на использование APR вместо JSSE, приведенная выше конфигурация не будет работать. Вы можете включить стойкие наборы шифров, следуя руководству по настройке tomcat ssl для APR и logjam руководству администратора .

person kadian    schedule 09.09.2015

Добавьте это в файл server.xml и перезапустите сервер.

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       keystoreFile="keystorePath"
       keystorePass="keystorepass"
       ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
       clientAuth="false" sslProtocol="TLS"/>

Попробуйте использовать https://localhost:8443.

person Gajendra Kumar Sahu    schedule 24.11.2015

Он работает с Google Chrome версии 44. Спасибо Джейсону Скроггинсу за предложение:

  1. В новой вкладке введите или вставьте about:config в адресную строку и нажмите Enter. Нажмите кнопку, обещающую быть осторожным.
  2. В поле поиска над списком введите или вставьте dhe и сделайте паузу, пока список фильтруется.
  3. Дважды щелкните параметр security.ssl3.dhe_rsa_aes_128_sha, чтобы переключить его с true на false (запретите Firefox использовать этот шифр).
  4. Дважды щелкните параметр security.ssl3.dhe_rsa_aes_256_sha, чтобы переключить его с true на false (запретите Firefox использовать этот шифр).
person user5312883    schedule 08.09.2015