Согласование TLS внутри уровня записи SSLv3

Мой сервер настроен на прием протоколов SSLv3 и TLS1.0. Но несколько клиентов отправляются ниже параметров установления связи и после приветствия сервера клиент отключает соединение и отправляет предупреждение о сбое (40), не уверен, что это ошибка клиента или сервер.

Здесь исходный клиентский пакет приветствия:

Secure Socket Layer
 SSLv3 Record Layer: Client Hello
 Content Type: Handshake (22)
 Version: SSL 3.0 (0x0300) <-----------------
 Length: 103
 Handshake Protocol: Client Hello
 Handshake Type: Client Hello (1)
 Length: 78
 Version: TLS 1.0 (0x0301) <-------------
 Random
 Session ID Length: 0
 Cipher Suites Length: 18
 Cipher Suites (9 suites)

Уровень записи - SSL 3.0, но внутренний протокол установления связи - TLS 1.0. Мой вопрос в том, правильно ли это сделать, то есть использовать разные версии для каждого слоя? если это какой метод? Я не могу найти его нигде, я просмотрел RFC, но не могу найти ссылки. Кроме того, как я могу создавать такие запросы?

EDIT: меня не интересует устранение неполадок и устранение проблемы, я просто хочу знать, как я могу отправить такие пакеты? Любая команда? И что я должен назвать этим методом? то есть я могу использовать curl или openssl для использования ssl3 или tls1, но это будет отправлять одну и ту же версию как на уровне записи, так и на уровне рукопожатия:

curl -v -ssl3 https://www.mywebserver.com

Выше команды curl будет выглядеть на wirehark:

EDIT2: Является ли это даже законным? Я искал поисковые запросы и не мог найти ни одного примера. Это нарушение каких-либо стандартов rfc?

Спасибо

2 ответа

Да, это законно (по крайней мере, это было выяснено в последних спецификациях TLS).

Вы можете посмотреть это в rfc5246 (TLS 1.2) или в rfc6101 (SSL 3.0) или другой rfc относительно SSL/TLS. Проблема заключается в первоначальной версии протокола записи и с протоколом подтверждения:

rfc5246:

Earlier versions of the TLS specification were not fully clear on
 what the record layer version number (TLSPlaintext.version) should
 contain when sending ClientHello (i.e., before it is known which
 version of the protocol will be employed). Thus, TLS servers
 compliant with this specification MUST accept any value {03,XX} as
 the record layer version number for ClientHello.
 TLS clients that wish to negotiate with older servers MAY send any
 value {03,XX} as the record layer version number. Typical values
 would be {03,00}, the lowest version number supported by the client,
 and the value of ClientHello.client_version.

Что касается протокола установления связи, клиент будет согласовывать самую высокую версию, которую он выполнил:

client_version: The version of the TLS protocol by which the client wishes to
 communicate during this session. This SHOULD be the latest
 (highest valued) version supported by the client


Я просто хочу знать, как я могу отправить такие пакеты? Любая команда?

openssl s_client -connect www.myserver.com:443 -no_ssl2

должен создать нечто похожее на трассировку, которую вы предоставили.

licensed under cc by-sa 3.0 with attribution.