Я пишу сервер, который принимает входящие TCP-соединения. Предположим, что сервер принял TCP-соединение и уже получил 16 (или так) байтов от клиента. Зная эти 16 байт, как сервер может определить, хочет ли клиент инициировать SSL-квитирование?
Я сделал эксперимент, который показал, что на моей Linux-системе, подключающейся к localhost (127.0.0.1 или AF_UNIX) через SSL, клиент отправляет следующее рукопожатие (hexdump), за которым следуют 16 кажущихся случайными байты:
8064010301004b0000001000003900003800003500001600001300000a07
00c000003300003200002f03008000000500000401008000001500001200
0009060040000014000011000008000006040080000003020080
Как сервер должен проверять эти первые несколько байтов, только чтобы определить, отправляет ли клиент SSL-квитирование? Зонд должен возвращать значение true для всех действительных SSL-кодов, и он должен с высокой вероятностью возвращать значение false для сообщения, отправленного клиентом, который не является квитированием SSL. Запрещается использовать любые библиотеки (например, OpenSSL) для зонда. Зонд должен быть простым кодом (например, несколько десятков строк на C или Python).