-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


TLS своими руками (без тяжёлых библиотек).

Четверг, 05 Августа 2021 г. 16:46 + в цитатник
jcxz: Пытаюсь написать клиента (си), открывающего соединение с каким-либо HTTPS-сервером без использования SSL-библиотек (типа OpenSSL или MbedTLS).
Столкнулся с почти полным отсутствием мануалов по этой теме (в деталях, а не на уровне "вызови функцию такой-то либы, она всё сделает").
Единственное более-менее вменяемое описание, которое удалось найти: The Illustrated TLS Connection
Сделал, руководствуясь им, работает, но: только до шага "Client handshake finished". Здесь наступил затык. В этом месте описано очень поверхностно. К тому же автор использует TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, который в настоящее время объявлен нерекомендуемым. А я бы хотел что-то умеющее работать с публичными HTTPS-серверами сейчас, а по-возможности - как можно дольше в будущем без переделок.
Поэтому я решил использовать TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ну или может быть TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - его все опробованные сайты выбирают при соединении с текущей версией браузера). Они рекомендуемые сейчас и на будущее.
Вобщем - все шаги до "Client handshake finished" проходят нормально (тестовые данные совпадают с теми которые в "The Illustrated TLS Connection"). Но на этом шаге на формируемый мной кадр к серверу, сервер отвечает Alert-ом "Bad record MAC". Подозреваю, что я или неправильно понял описание (которого с гулькин нос), или для TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 кадр нужно формировать как-то иначе, чем для TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA.

RFC всякие по этому делу тоже пытался читать, но там тем более всё описано очень туманно. Без конкретики. Ну или надо перерыть гору материала. А мне нужно всего-лишь как я понимаю - правильно сформировать finished-кадр (расположить нужные данные в нужном порядке до и после шифрования AES128-GCM-SHA256).
Можно конечно расковырять исходники вышеуказанных библиотек, но это дело очень небыстрое в силу их объёма и запутанности.

Цель у меня:
Версия: TLSv1.2
Соединение с HTTPS-сервером с минимальными требованиями.
Только один способ шифрования: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
И один или два алгоритма эллиптических кривых: "secp256r1", "curve25519".
Проверил множество публичных HTTPS-серверов - все они приняли эти соглашения от моего недоклиента. Значит их вполне достаточно для настоящего времени.

Собственно - вопрос: Может кто посоветует вменяемый мануал (описание, пошаговое руководство) по TLS-хэндшейку? По шагам, с примерами и не на базе допотопных методов и алгоритмов? А на актуальных сейчас: с эфемерными ключами, на эллиптических кривых или secp256r1, GCM и т.д.?

https://forum.sources.ru/index.php?showtopic=422279&view=findpost&p=3850408

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку