В соответствии с RFC 5246 (который определяет TLS протокол версии 1.2)Каков правильный способ разобрать расширенные приветственные сообщения в протоколе TLS?
Page 18:
Запись слой фрагментов информационных блоков в TLSPlaintext записи, несущие данные в куски 2^14 байт или меньше. Клиентские границы не сохраняются на уровне записи (то есть несколько клиентских сообщений одного и того же ContentType МОГУТ быть объединены в одну запись TLSPlaintext или одно сообщение МОЖЕТ быть , фрагментированное на нескольких записях).
На странице 40 написано:
TLS позволяет расширениям следовать за полем compression_methods В одном из расширений блока. Наличие расширений может быть обнаружено , определяющим, есть ли байты после методов сжатия_в конце ClientHello. Обратите внимание, что этот способ определения необязательных данных отличается от обычного TLS-метода наличием поля переменной длины , но он используется для совместимости с TLS до того, как были определены расширения.
То, что я понял из этого отрывка, когда я сделал разбор ClientHello
сообщения, я должен сравнить его размер в TlsPlaintext.length
поле сообщения инкапсулирующей записи слоя, чтобы увидеть, если есть какие-либо дополнительные байты в конце записывать слой messsage, а если есть, интерпретировать их как структуры Extension
.
Это действительно корректно работает для некоторых проб трафика TLS, с которыми я тестирую свое приложение, но не работает для некоторых других (то есть он не может обнаружить сообщения, которые могут использовать проводники). Когда я смотрю на проблемный пакет с помощью wirehark, он выглядит как несколько сообщений для рукопожатия, объединенных в одно сообщение подтверждения. Это ServerHello
(который выглядит точно так же, как ClientHello
) с расширениями, Certificate
и ServerHelloDone
.
Обнаружение Hello расширений легко, когда сообщение Hello инкапсулировано внутри одного сообщения подтверждения, но я не могу понять, как можно обнаружить присутствие и границы части расширения после приветственного сообщения, когда есть другие сообщения подтверждения то же сообщение после них.
Любая помощь или предложение о том, как разбирать эти пакеты, будут оценены.
Не используйте код форматирования для текста, который не код, а используйте форматирование цитаты для цитируемого текста. – EJP