Котяра: Протоколе TLSv1.2 с сильным шифров не работают


Я установил Tomcat-7, настроил поддержку TLSv1.2 на порту 8443.
Конфигурация моего разъема:
протокол= " орг.апаш.койот.http11.Http11NioProtocol" задано sslenabled="истинный" схема="HTTPS в" безопасную="истинный" sslProtocol="протоколе TLSv1.2" sslEnabledProtocols="протоколе TLSv1.2"

Затем я настроил список надежных шифров, которые хотел использовать. TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

Как я уже читал, Tomcat может использовать Java JSSE или OpenSSL
Протокол JSSE= " org.апаш.койот.http11.Http11NioProtocol "
Протокол OpenSSL= " org.апаш.койот.http11.Http11AprProtocol "
Мой соединитель tomcat настроен с протоколом JSSE.

Это работает, если я добавляю следующие шифры с SHA1. (Отсутствие GCM с SHA1) TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA.

I скачали файлы политики криптографических расширений Java. Пробовал работать как с Java 7, так и с Java 8.

Перед установкой криптографических расширений я получил следующую ошибку при запуске Tomcat

INFO: Initializing ProtocolHandler ["http-nio-8443"]
mai 20, 2014 3:57:43 PM org.apache.tomcat.util.net.jsse.JSSESocketFactory     getEnableableCiphers
WARNING: None of the ciphers specified are supported by the SSL engine :     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

Согласно документации Java 7 все эти сильные шифры с GCM-SHA384 и CBC-SHA384 должны поддерживаться: http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#ciphersuites

Если я немного изменю шифры бит:

INFO: Initializing ProtocolHandler ["http-nio-8443"]
mai 20, 2014 4:21:11 PM org.apache.tomcat.util.net.jsse.JSSESocketFactory getEnableableCiphers
WARNING: None of the ciphers specified are supported by the SSL engine : TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA584,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA584,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA584,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA584

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

Может ли проблема быть с браузером? Я пробовал последние версии Chromium и Firefox. После проверки некоторых коммитов я обнаружил, что Chromium поддерживает SHA256, SHA384 и AES-GCM.

4 4

4 ответа:

Оказалось, что ни Chromium, ни Firefox не поддерживают эти более высокие шифры.
Самый сильный / самый высокий доступный шифр - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
Нет поддержки для SHA384 и нет AES_256_GCM

Https://www.ssllabs.com/ssltest/viewMyClient.html
Наборы шифров (в порядке предпочтения)
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA (0xc007)
TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33)
TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x32)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39)
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c)
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa)
TLS_RSA_WITH_RC4_128_SHA (0x5)
TLS_RSA_WITH_RC4_128_MD5 (0x4)

Документация по имени стандартного алгоритма, которую вы цитируете, - это просто список имен, которые эффективно зарезервированы, но не обязательно реализованы.

ПоставщикSunJSSE (поставщик JSSE по умолчанию в Oracle JRE) не реализует никакого набора шифров GCM в Java 7. Они находятся в обновленной таблице для реализации Java 8 .

Вам также может понадобиться sslProtocol="TLSv1.2".

Я веб-разработчик и столкнулся с аналогичной проблемой, запустив приложение с версиями Tomcat 7 и Java7, и нашел исправление.

Путем добавления свойства ниже в сервер.xml-файл tomcat в

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_ECDHE_RSA_WITH_RC4_128_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,SSL_RSA_WITH_RC4_128_SHA"

Для Firefox 37.0.2 список поддерживаемых шифров выглядит следующим образом:

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x33)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39)
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa)