Почему я получаю ошибку рукопожатия между клиентом TLS 1.0 и сервером SSL 3.0? - PullRequest
3 голосов
/ 26 марта 2011

Существует проект, который широко использует JSSE.

В зависимости от параметра конфигурации SSLContext инициализируется для SSLv3.Это означает, что если параметр не установлен, то это SSLv3, в противном случае это TLS.

Я иногда замечал некоторые ошибки при рукопожатии и отслеживал его: если клиент согласовал TLS и сервер ответил SSLv3рукопожатие не удалось

Почему это происходит?Я думал, что TLS и SSLv3 в значительной степени взаимозаменяемы.Они нет?Если я изменю сторону сервера, чтобы всегда отвечать TLS есть ли вероятность, что я что-нибудь сломаю?

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

TLS 1.0 - это внутренний протокол SSL 3.1. Клиент и сервер могут принять использование одного или обоих; во время рукопожатия клиент отправляет самую высокую версию протокола, которую он знает, и сервер должен выбрать самую высокую версию, которую он поддерживает, которая не всегда новее, чем отправленная клиентом.

Я предполагаю, что когда вы настраиваете свой клиент для использования TLS, клиент понимает его как «используйте только TLS 1.0»: клиент отправляет «3.1», и если сервер настроен на ответ с «3.0» клиент вполне логично отклонит соединение.

Что вам нужно сделать, так это найти способ настроить сервер на прием как 3.0 , так и 3.1 и, таким образом, использовать любую версию протокола, объявленную клиентом. В качестве альтернативы, настройте клиент так, чтобы он объявил, что он знает 3.1, но так, что он также принимает «понижение» до 3.0, если сервер так говорит.

1 голос
/ 26 марта 2011

Вы не говорите, чего пытаетесь достичь, изменяя параметр протокола. SSLv3 и TLS1.0 очень похожи, но, тем не менее, разные протоколы. Механизм согласования протоколов, представленный в SSLv3, также используется в последующих протоколах. Суть в том, что в SSLContext.getInstance("proto"); вы должны установить proto на самую раннюю версию протокола SSL, которую вы готовы поддерживать. После этого одноранговые узлы будут договариваться об использовании новейшей версии протокола, который они оба поддерживают.

...