У меня есть клиент Python. Используя ssl.SSLContext()
(документация здесь) и set_ciphers(myciphers)
(где myciphers - мой список наборов шифров, которые я изменяю при каждом рукопожатии, т. Е. При каждом соединении с сокетом). Я могу контролировать список клиентских шифров. SSLContext
по умолчанию в python отключает SSL 2.0 и SSL 3.0 по умолчанию, и я не изменяю версии в коде моего клиента.
Я отправляю 3 рукопожатия на сайт, используя разные списки шифров в каждом. Я не меняю версию.
В Wireshark ClientHello в столбце "протокол" я вижу разные версии? Я связываюсь с тем же сайтом. Клиент не меняет версию.
1) Можете ли вы объяснить мне, почему я вижу другую версию протокола TLS? 2) Если это не фактическая версия, предложенная клиентом (которая должна быть TLS 1.2), где я могу получить реальную версию TLS, предложенную клиенту?
Вот скриншот для пояснения (пожалуйста, извините за его форму, но для анонимности сайтов и имен ПК):
РЕДАКТИРОВАТЬ: Хотя в столбце ClientHello отображается TLSv1, когда я нажимаю на кнопку записи и вижу расширенную область. Я вижу это:
> Secure Socket Layer
> TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Я сбит с толку. Для меня очень важно убедиться, что мой клиент всегда пробует TLS 1.2. Я оставил Python по умолчанию, который должен делать это в соответствии с их документацией.
РЕДАКТИРОВАТЬ 2: Я делаю просмотр фильтра, чтобы увидеть TLS 1.0 (как показано на экране, там ClientHellos отправляет TLSv1). Но с этим фильтром просмотра:
ssl.handshake.version==0x0301
Нет ClientHell
o сообщения не появляются для меня. Только какой-то ServerHello
. Пожалуйста, объясните мне. Это довольно запутанно.