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

5 ответов

Решение

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

Это связано с тем, что новые версии браузера начали выдавать предупреждения / ошибки при доступе к веб-сайтам, которые настроены со слабыми шифрами 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, вышеуказанная конфигурация не будет работать. Вы можете включить надежные комплекты шифров, следуя руководству по настройке tomcat ssl для APR и руководству администратора logjam.

Он работает с 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).

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

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

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

Другие вопросы по тегам