Сбой рукопожатия с клиентом TLS1.2 и сервером TLS1.3 - PullRequest
0 голосов
/ 22 октября 2018

После обновления openssl до версии 1.1.1 у меня есть ценарио, в котором мой клиент (odbc) работает на TLS1.2, а мой сервер (база данных) работает на TLS 1.3, и происходит сбой со следующей ошибкой на стороне клиента.

"Причина сбоя рукопожатия SSL [ошибка: 1407743E: подпрограммы SSL: SSL23_GET_SERVER_HELLO: оповещение tlsv1 о неприемлемом резервном восстановлении]."

В документации TLS 1.3 было написано, что защита от сбоев включена по умолчанию, и когда клиент TLS 1.2 связывается с сервером TLS 1.3, сервер отправляет специальные байты для защиты от сбоев.

Вот мои сомнения.- Должен ли я обрабатывать эти специальные байты на моем клиенте?- Есть ли какая-либо другая обработка, которая необходима клиенту TLS 1.2 для связи с сервером TLS 1.3?- Или есть какая-то другая причина неудачи?

1 Ответ

0 голосов
/ 20 декабря 2018

Полагаю, это именно то, что произошло:

1) Клиент отправляет рукопожатие TLS 1.2
2) Сервер закрывает соединение, поскольку поддерживает только TLS 1.3
3) Клиент повторяет попытку при рукопожатии TLS 1.1с резервным SCSV (см. RFC 7507)
4) Сервер отправляет сообщение об ошибке: неуместное аварийное восстановление

Исходное соединение не устанавливается (шаг 2), поскольку клиент запрашивает 1.2, а сервер его не поддерживает.Клиент повторяет попытку с 1.1, если сервер может поддерживать эту версию.Резервный SCSV отправляется, чтобы указать, что 1.1 не является самой высокой версией, которую поддерживает клиент.

В соответствии с RFC SCSV (7507):

Если TLS_FALLBACK_SCSV появляется в ClientHello.cipher_suites и самом высоком протоколеверсия, поддерживаемая сервером, выше, чем версия, указанная в ClientHello.client_version, сервер ДОЛЖЕН ответить фатальным предупреждением о неприемлемом падении.

Чтобы ответить на ваш вопрос, я полагаю, что специальные байты, которые вы упоминаете, - это SCSV, но этоотправляется клиентом и обрабатывается сервером, поэтому на стороне клиента ничего не нужно делать.Я полагаю, что сбой происходит из-за того, что клиент и сервер не имеют общей версии TLS для связи.Если клиент поддерживает только 1.2, а сервер поддерживает только 1.3, он не сможет договориться о версии, и соединение не будет установлено.Включение TLS 1.2 на сервере или 1.3 на клиенте должно позволить им обмениваться данными.

...