JAVA TLS 1.2 понижается до TLS 1.0, иногда ошибка

0 cynepnaxa [2015-07-23 09:22:00]

У меня есть клиент TLS, написанный в JAVA. Когда я устанавливаю

sslContext = TLS1.2
and enabled protocols to SSLv3 TLSv1 TLSv1.1 TLS1.2

он отлично работает практически со всеми серверами. Клиентское рукопожатие с TLSv1.2. Если сервер может только TLSv1, соединение понижает до TLSv1 во время установления связи. Но! Мы используем около 15 таких служб TLSv1, и 4 из них не могут понизить рейтинг. Серверы разные:

Microsoft-IIS/7.5, nginx, IBM_HTTP_SERVER, SQLAnywhere.

Ошибки:

SEND TLSv1 ALERT:  fatal, description = unexpected_message  X2
handling exception: javax.net.ssl.SSLException: Invalid Padding length: 139
javaException : Received fatal alert: unexpected_message

Если я устанавливаю разрешенные протоколы для TLSv1, эти серверы работают нормально. Но я хочу, чтобы sslContext и включенные протоколы были совместимы со всеми службами и, желательно, работали с TLSv1.2

Любые предложения будут оценены!

java ssl iis nginx


1 ответ


1 Решение Steffen Ullrich [2015-07-23 09:52:00]

Но я хочу, чтобы sslContext и включенные протоколы были совместимы со всеми службами и, желательно, работали с TLSv1.2

Во-первых, есть достаточно серверов, которые не делают TLS 1.2, но лучшее, что они могут сделать, это TLS 1.0 (и некоторые даже только SSL 3.0). Правильная реализация стека TLS в этом случае просто отправит ответ TLS 1.0 и, таким образом, обеспечит соединение TLS 1.0, которое поддерживается вашим клиентом. Принуждение этих серверов к TLS 1.2 не будет работать, потому что они не реализуют его. Все, что вы можете сделать, это заменить серверы новыми реализациями.

И тогда есть несколько реализаций, которые неправильно реализуют протокол. Некоторые из них просто закрывают соединение, если вы отправляете TLS 1.2 ClientHello или используете некоторые расширения TLS, о которых они никогда не слышали. Если вы не можете заменить эти серверы, вы должны общаться с ними таким образом, чтобы они понимали, например, говоря только TLS 1.0 и т.д. Браузеры уже имеют дело с этими гнилыми серверами, медленно понижая уровень соединения, т.е. Если TLS 1.2 вызывает отказ от рукопожатия, они будут попробуйте еще раз с TLS 1.0 и т.д. Часто браузеры даже имеют жестко закодированный список серверов, которые слишком гнилые, чтобы даже хорошо играть после попыток простых понижений и которые нуждаются в специальных шифрах или что-то в этом роде.