Назад | Перейти на главную страницу

Подтверждение SSL: должен ли сервер выбирать более ранний протокол?

Мы должны подключиться к нашему приложению (написанному на Java 8) с каким-то очень старым сервером, используя HTTPS. Будучи Java 8, наш клиент поддерживает TLSv1.2, TLSv1.1, TLSv1 и SSLv3. Конечно, он предпочитает использовать TLSv1.2, так как это новейший протокол.

Однако сервер (Oracle-HTTP-Server 11.1.1.7) поддерживает только TLSv1 и SSLx. Кроме того, у него очень ограниченный выбор поддерживаемых наборов шифров, но есть еще один общий набор, который мы можем использовать с TLSv1: SSL_RSA_WITH_3DES_EDE_CBC_SHA (он же TLS_RSA_WITH_3DES_EDE_CBC_SHA).

Однако прямое соединение не удается, и сервер завершает рукопожатие. Вывод отладки, который мы получаем (на стороне клиента), выглядит следующим образом:

main, WRITE: TLSv1.2 Handshake, length = 265
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, close_notify
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLException: Received fatal alert: close_notify

Мне кажется, что сервер даже не пытается вернуться к TLSv1: как только клиент объявляет TLSv1.2 как предпочтительный, сервер выходит из строя.

Для сравнения, когда мы явно отключаем TLSv1.2 и TLSv1.1 в нашем клиенте, что делает TLSv1 предпочтительным вариантом, рукопожатие проходит успешно.

Мы также пытались подключиться к другой устаревший сервер, который не знает о TLSv1.2 и TLSv1.1, но здесь соединение работает, как ожидалось: хотя клиент говорит, что предпочитает TLSv1.2, они соглашаются с сервером использовать TLSv1 как лучший общий протокол:

main, WRITE: TLSv1.2 Handshake, length = 269
main, READ: TLSv1 Handshake, length = 85
...

Вопрос: Обязан ли сервер выбирать из списка протоколов TLS / SSL, поддерживаемых клиентом? Могу я сказать обслуживающему персоналу сервера, что это сервер что плохо себя ведет, не наш клиент?

Обязан ли сервер выбирать из списка протоколов TLS / SSL, поддерживаемых клиентом?

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

Могу ли я сказать обслуживающему персоналу сервера, что плохо себя ведет сервер, а не наш клиент?

Я думаю, ты можешь так сказать. Любой сервер, который правильно реализует TLS 1.0, должен иметь возможность иметь дело с подключением TLS 1.2 от клиента, потому что протокол специально разработан для этого. К сожалению, до сих пор существует достаточно неработающих реализаций TLS.