У меня какая-то странная проблема
Я пытался реализовать свою собственную реализацию tls, чтобы иметь возможность подключиться к серверу, который не на 100% соответствует спецификации TLSv1.2 (client_random и server_random не случайны, а сгенерированы из отметки времени, а сервер заставляет клиента иметь версию уровня записи tls 1.2 для выполнения рукопожатия)
Кроме того, мне нужно было отправить некоторые данные в открытом тексте по протоколу, подобному http, но не http (sts / 1.0), прежде чем я смог запустить рукопожатие tls
поэтому я взломал реализацию обеих вещей, но я столкнулся с чем-то, что, как я не знал, могло произойти
при получении сертификата сервера в рукопожатии tls, байты, которые я вижу в буфере, который я создал с Buffer.from(data, "ascii")
(да, кодировка сокета также ascii) (и я также пытался с кодировкой utf-8) были not
те, что я видел в wireshark и которые приводят к сбою моего анализатора x509 (если он работает, если я создаю буфер из вставленного в копию шестнадцатеричного потока сертификата из wireshark). Я считаю, что это проблема кодирования, но тогда какую кодировку я могу использовать для получения необработанных байтов в data
без необходимости его кодирования?
пример:
начало сообщения сертификата в Wireskark:
16:03:03:03:52:0b:00:03:4e:00:03:4b
начало сообщения сертификата в nodejs, закодированных в ascii:
16:03:03:00:2a:02:00:00:26:03:03:12
Используется розетка от net.Socket
На момент написания этой статьи мой план состоял в том, чтобы заставить язык низкого уровня выступать в роли прокси, получать необработанные байты, создавать ascii-представление этих байтов, а затем отправлять его в мой сокет nodejs. совсем не лучшее решение, но это все, что я смог найти сам.
PS: если кто-то знает реализацию tls nodejs, которая может принять определенный client_random и / или заставить версию уровня записи tls равной 1.2 во время рукопожатия, вы сэкономите мне десятки часов на разработку всего, что мне нужно.
PS2: я попытался найти «raw» tcp-сокет на nodejs, чтобы получить больше контроля над данными, которые я получаю, и есть пакет «raw-socket» npm. Но из того, что я увидел, нет способа установить порт, к которому вы хотите подключиться, на сервере. Если кто-то использовал этот пакет раньше и знает, как установить порт в tcp-сокете под этим пакетом, я хотел бы понять, как вы это сделали.
спасибо за помощь!