2015-03-13 2 views
1

Во время исследования проблемы взаимной проверки подлинности SSL для webservice я отслеживал с помощью wirehark рабочее поведение между клиентом SOAP UI и сервером, чтобы понять, как он себя ведет, поскольку я заметил что-то странно.Сервер отправляет зашифрованное рукопожатие сразу после сервера Привет

Я по-прежнему замечаю одно и то же странное поведение, когда между клиентом и сервером правильное установление связи и обмен данными; который является следующим:

37. Client -> Server: Client Hello 
54. Server -> Client: Server Hello, Certificate 
61. Server -> Client: Encrypted Handshake Message 
62. Client -> Server: Certificate, Client Key Exchange 
64. Client -> Server: Certificate Verify 
65. Client -> Server: Change Cipher Spec 
66. Client -> Server: Encrypted Handshake Message 
69. Server -> Client: Change Cipher Spec 
74. Server -> Client: Encrypted Handshake Message 
75. Client -> Server: Application Data 
... 
434. Server -> Client: Application Data 
686. Server -> Client: Encrypted Alert 

Все кажется мне нормальным для меня, кроме строки 61, которая зашифрована. Он, безусловно, содержит «Запрос сертификата» и «Сервер Hello Done», поскольку все работает нормально (и клиент предоставляет свою собственную строку сертификата 62), но я совершенно не понимаю, как можно использовать шифрование строки 61 сообщения, так как я не понимаю, как клиент и сервер мог бы обменять достаточные данные, чтобы зашифровать все так быстро.

Cipher Suite, используемый сервером, - TLS_RSA_WITH_AES_128_CBC_SHA.

Любое понимание того, как оно может быть зашифровано так рано, может помочь мне решить проблему, которую я изучаю, поскольку нерабочий клиент отправляет TCP RST сразу после получения сообщения с зашифрованным письмом.

+0

(1) Вы уверены, что 61 является частью этого соединения, а не другим, что происходило ранее? Учитывая одну пару адресов, а сервер обычно находится на фиксированном порту, порт клиента меняется. (2) Протокол фактически не говорит «зашифрован», поэтому Wireshark предполагает, что он не может декодировать, зашифрован. Вы правы, что то, что должно быть там (для этого согласованного ciphersuite), это CertReq и ServerHelloDone, и оба из них * должны быть легко декодированы, но посмотрите на байты (в байт-панели, обычно внизу или вправо, в зависимости от компоновки вы выбрали). –

+0

Сообщение сертификата будет присутствовать только по запросу CertificateRequest. – EJP

+0

После более глубокого поиска: wirehark, похоже, не расшифровывает сервер -> Клиентское сообщение с несколькими сообщениями: строка 54. больше, чем сервер Hello + Certificate, но «Длина» установлена ​​в 16 384 (максимальная длина на основе RFC 5246). Я буду копать глубже, но похоже, что это раннее сообщение с зашифрованным рукопожатием - это просто побочный эффект для wirehark, чтобы сказать, что он ничего не понимает в содержании сообщений. –

ответ

1

После глубокого расследования, на самом деле это выглядит так, как будто нет реального сообщения зашифрованного рукопожатия. Провода не могут перегруппировать записи рукопожатия, когда они разделены. Из-за этой проблемы на самом деле это артефакт Зашифрованное сообщение подтверждения.

Поскольку максимальная длина записи составляет 2^14 байт, всякий раз, когда сообщение об установлении связи длиннее, оно разделяется на несколько записей.

Wireshark, а также мой «неудачный клиент», похоже, не реконструируют эти разделенные записи. Похоже, что известная ошибка нефиксированной прошивки: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3303

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