Как определить входящее квитирование SSL (https) (формат провода SSL)?

Я пишу сервер, который принимает входящие TCP-соединения. Предположим, что сервер принял TCP-соединение и уже получил от клиента 16 (или около того) байтов. Зная эти 16 байтов, как сервер может определить, хочет ли клиент инициировать квитирование SSL?

Я провел эксперимент, который показал, что в моей системе Linux, подключающейся к localhost (127.0.0.1 или AF_UNIX) через SSL, создается клиент отправляет следующее рукопожатие (шестнадцатеричный дамп), за которым следуют 16, казалось бы, случайных байтов:

8064010301004b0000001000003900003800003500001600001300000a07
00c000003300003200002f03008000000500000401008000001500001200
0009060040000014000011000008000006040080000003020080

Как серверу следует проверять эти первые несколько байтов, просто чтобы определить, отправляет ли клиент подтверждение SSL? Зонд должен возвращать истину для всех действительных подтверждений SSL, и он должен с высокой вероятностью возвращать false для сообщения, отправленного клиентом, которое не является подтверждением SSL. Запрещается использовать какие-либо библиотеки (например, OpenSSL) для зонда. Зонд должен представлять собой простой код (например, несколько десятков строк на C или Python).

13
задан pts 9 October 2010 в 21:08
поделиться