mini-tls
Описание
mini-tls - самодостаточный мини-проект TLS-сервера и TLS-клиента на чистом C/CPP, построенный на библиотеке crypery (TLS 1.2/1.3). Внешних зависимостей нет: все криптоалгоритмы реализованы с нуля внутри библиотеки crypery.
Сервер слушает TCP-порт, при старте генерирует RSA-2048 ключ и самоподписанный X.509-сертификат, проводит TLS-рукопожатие с каждым подключившимся клиентом (автовыбор версии TLS 1.2 или 1.3) и возвращает (эхо) все полученные данные. Клиент подключается к серверу, проводит рукопожатие, выводит согласованные параметры сессии и обменивается сообщениями с сервером в интерактивном или неинтерактивном режиме.
Используемые модули
Примеры используют модуль tls напрямую; при сборке компилируются все модули библиотеки:
- tls - базовый криптографический слой: рукопожатие TLS 1.2/1.3 (клиент/сервер), AES-128-GCM, SHA-256, HMAC-SHA256, RSA-2048, ECDH (P-256, X25519), генерация и разбор X.509-сертификатов
- ssl - OpenSSL-совместимая обёртка над встроенным TLS (API SSL_CTX/SSL, таймауты, проверка сертификата стороны)
- http - HTTP/1.1-сервер поверх TCP/TLS (маршрутизация, статические файлы, WebSocket, SSE)
- url - HTTP/HTTPS-клиент (curl-подобный API, редиректы, chunked-кодирование)
Технологии
- C/CPP, библиотека crypery (TLS 1.2/1.3)
- Криптография: AES-128-GCM, SHA-256, HMAC-SHA256, HKDF, RSA-2048, ECDH (P-256, X25519), X.509
- Windows (MinGW, Winsock) и Unix-подобные системы (BSD-сокеты)
- Лицензия GNU AGPL v3 (Affero GPL)