it-roy-ru.com

Ошибка открытого ключа Диффи-Хеллмана в 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 я получаю ненадежную ошибку связи.

14
Bob

Для меня это сработало после добавления списка разрешенных шифров в конфигурацию 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"
        ...
30
centic

Это связано с тем, что новые версии браузера начали выдавать предупреждения/ошибки при доступе к веб-сайтам, которые настроены со слабыми шифрами 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 Unlimited Strength Jurisdiction

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

7
kadian

Добавьте это в файл 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

2
Gajendra Kumar Sahu

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

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

Для меня это была проблема использования Java-версии Tomcat. Я изменил версию с JDK 6 на JDK 1.7_080, и ошибка исчезла.

Когда я сказал, что изменил версию Java, я имел в виду, что я изменил переменную среды "Java_HOME".

0
Swapnil