Рукопожатие TLS внутри слоя записи SSLv3 - PullRequest
4 голосов
/ 10 марта 2012

Мой сервер настроен на прием протоколов 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, но не могу найти никаких ссылок. Кроме того, как я могу производить такие запросы?

РЕДАКТИРОВАТЬ : Я не заинтересован в устранении неполадок и устранении проблемы, я просто хочу знать, как я могу отправлять такие пакеты? Любая команда? И как мне назвать этот метод? то есть я могу использовать curl или openssl для использования ssl3 или tls1, но при этом будет отправлена ​​одна и та же версия как на уровне записи, так и на уровне рукопожатия:

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

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

Wireshark

РЕДАКТИРОВАТЬ2: Это даже законно? Я гуглил вокруг и не могу найти ни одного примера. Это нарушает какие-либо стандарты RFC?

Спасибо

Ответы [ 2 ]

3 голосов
/ 05 сентября 2013

Да, это законно (по крайней мере, это было разъяснено в последних спецификациях 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
1 голос
/ 12 марта 2012

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

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

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

...