2015-07-23 2 views
0

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

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

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

ответ

1

Но я хочу установить 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 и т. д. Часто браузеры даже имеют жестко закодированный список серверов, которые слишком гнилые, чтобы даже хорошо играть после попыток простых понижений и которые нуждаются в специальных шифрах или что-то в этом роде.

+0

Да, мы работаем со многими службами, которые поддерживают только TLSv1. И мы не можем изменить его реализацию - они не наши. Большинство из них успешно переходят на TLSv1 во время рукопожатия. Но работать, как браузер, не очень хорошо, потому что каждый раз мы должны отправлять по крайней мере 2 запроса вместо 1. Наш клиент является частью биллинговой системы, и мы хотим отправлять только успешные запросы. – cynepnaxa

+0

Может быть, java может как-то рукопожатие с такими гнилыми серверами? – cynepnaxa

+0

Althouth Я думаю, что это кажется невозможным. :) – cynepnaxa

Смежные вопросы