Во время исследования проблемы взаимной проверки подлинности 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 сразу после получения сообщения с зашифрованным письмом.
(1) Вы уверены, что 61 является частью этого соединения, а не другим, что происходило ранее? Учитывая одну пару адресов, а сервер обычно находится на фиксированном порту, порт клиента меняется. (2) Протокол фактически не говорит «зашифрован», поэтому Wireshark предполагает, что он не может декодировать, зашифрован. Вы правы, что то, что должно быть там (для этого согласованного ciphersuite), это CertReq и ServerHelloDone, и оба из них * должны быть легко декодированы, но посмотрите на байты (в байт-панели, обычно внизу или вправо, в зависимости от компоновки вы выбрали). –
Сообщение сертификата будет присутствовать только по запросу CertificateRequest. – EJP
После более глубокого поиска: wirehark, похоже, не расшифровывает сервер -> Клиентское сообщение с несколькими сообщениями: строка 54. больше, чем сервер Hello + Certificate, но «Длина» установлена в 16 384 (максимальная длина на основе RFC 5246). Я буду копать глубже, но похоже, что это раннее сообщение с зашифрованным рукопожатием - это просто побочный эффект для wirehark, чтобы сказать, что он ничего не понимает в содержании сообщений. –