Сервер отправляет зашифрованное рукопожатие сразу после приветствия сервера
Во время исследования проблемы взаимной аутентификации SSL для веб-сервиса я проследил с помощью wireshark рабочее поведение клиента 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, так как я не понимаю, как клиент и сервер мог обменяться достаточным количеством данных, чтобы зашифровать что-нибудь так скоро
Сервер шифров, используемый сервером, называется TLS_RSA_WITH_AES_128_CBC_SHA.
Любое понимание того, как это может быть зашифровано так рано, может помочь мне решить проблему, которую я исследую, поскольку нерабочий клиент отправляет TCP RST сразу после получения сообщения Encrypted Handshake.
1 ответ
После глубокого изучения, на самом деле похоже, что реального Зашифрованного сообщения о рукопожатии нет: wireshark не может перегруппировать записи рукопожатия, когда они разделены. Сообщение зашифрованного рукопожатия фактически является артефактом из-за этой проблемы.
Поскольку максимальная длина записи составляет 2^14 байт, всякий раз, когда рукопожатие длиннее, оно разделяется на несколько записей.
Wireshark, как и мой "сбойный клиент", похоже, не могут восстановить эти разделенные записи. Похоже на известную нефиксированную ошибку в wirehak: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3303