2016-08-03 3 views
0

Скажем, моя сторона как клиент поддерживает TLS V1.0,1.1 и 1.2. Удаленный сайт поддерживает TLS V1.0 и 1.1. Обе стороны поддерживают одни и те же шифры.Несоответствие версии TLS (?)

Мои вопросы:

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

2 - Ниже представлен захват Wireshark CLIENT HELLO между клиентом и сервером, описанным выше.

TLSv1.1 Record Layer: Handshake Protocol: Client Hello 
    Content Type: Handshake (22) 
    Version: TLS 1.2 (0x0303) 
    Length: 172 
    Handshake Protocol: Client Hello 
     Handshake Type: Client Hello (1) 
     Length: 168 
     Version: TLS 1.2 (0x0303) 
     Random 
     Session ID Length: 0 
     Cipher Suites Length: 52 
     Cipher Suites (26 suites) 
     Compression Methods Length: 1 
     Compression Methods (1 method) 
     Extensions Length: 75 
     Extension: server_name 
     Extension: elliptic_curves 
     Extension: ec_point_formats 
     Extension: signature_algorithms 
     Extension: SessionTicket TLS 
     Extension: renegotiation_info 

Эта попытка подключения в конечном итоге дает «Не удалось создать безопасный канал SSL/TLS». Я подозреваю, что это имеет какое-то отношение к тому, что описано как «TLSV1.1 Record Layer» и «Версия: TLS 1.2 (0x0303)». Может ли это быть причиной отказа соединения?

ответ

2

Клиент начинает рукопожатие с помощью ClientHello, где он показывает лучшую версию, которую он поддерживает, то есть TLS 1.2 в этом случае. Затем сервер отвечает сервером ServerHello с лучшей версией, поддерживаемой сервером, которая равна или меньше клиентской версии (т. Е. TLS 1.1 в вашем случае). Если клиент не желает принимать эту версию (то есть клиент, настроенный только для поддержки TLS 1.2 и не менее), он закроет соединение.

+0

Но почему он говорит «TLSV1.1 Record Layer», а затем «Version: TLS 1.2»? – JustAGuy

+0

Только что захватил этот, который еще БОЛЕЕ путается: http://imgur.com/hasn6rs – JustAGuy

+0

@gilfalko: Я не знаю, почему он говорит «TLSv1.1 Record Layer» в вашей версии Wireshark - по моему это говорит «Уровень записи TLSv1.2», который подходит, поскольку протокол уровня записи - TLS 1.2 в вашем первоначальном примере. А во втором примере протокол уровня записи - TLS 1.0, а версия протокола ClientHello - TLS 1.2. Тем не менее эта строка представляет собой только краткое изложение следующих данных, то есть истинная информация представлена ​​только в деталях. –

0

Угадай, что у вас установлена ​​более старая версия Wireshark, так как она сообщает TLSv1.1, но в последующем пакете как Record, так и ClientHello четко указывают TLSv1.2. Сохраните захват, обновите Wireshark, а затем повторно загрузите захват.

ОБНОВЛЕНИЕ: Важно обеспечить, чтобы ваше подтверждение SSL \ TLS ПОЛНОЕ; иначе по какой-то причине Wireshark сообщит неверную версию протокола TLS в поле «протокол».

0

Есть две версии TLS, отправленные с сообщением клиента Hello. Первая - это версия уровня записи, в которой описывается версия TLS, которую вы используете для связи. Вторая версия - это значение Hello клиента, которое указывает максимальную версию, поддерживаемую клиентом.

Я вижу три версии TLS в вашем захвате Wireshark. Я думаю, что ссылка на версию 1.1 в «TLSv1.1 Record Layer: Handshake Protocol: Client Hello» неверна.

Похоже, что ваш клиент отправляет клиента Hello с версией 1.2, указанной в версии уровня записи 1.2. Сервер, так как он не поддерживает версию 1.2, отклоняется на уровне записи. Чтобы обойти это, клиент мог отправить версию Client Client версии 1.2 в запись версии 1.0. Это позволит серверу общаться с использованием версии 1.0, поддерживая версию 1.1, а последующая связь будет использовать версию 1.1.

Смежные вопросы