Введение
Недавно мне понадобился консольный клиент для отладки сайта, который закрыт TLS 1.3 на ГОСТ-алгоритмах. Из доступных у меня были варианты:
curl в составе дистрибутива от известного крипто-провайдера.
собрать самому нативный curl из исходников, с openssl + ручной патч ГОСТ TLS 1.3.
Ни тот, ни другой вариант не были удобными для повседневной автоматизации для разных ОС. В итоге я написал на Java урезанный аналог curl, который умеет работать с TLS 1.3 на ГОСТ.
Данный инструмент может быть полезен разработчикам, devops-инженерам, QA и администраторам. gost-curl самодостаточен, не требует установки openssl или каких-то крипто-провайдеров, работает в разных ОС.
Исходные тексты и бинарные файлы для Linux и Macos доступны по ссылке. Для остальных ОС есть jar-файл.
Основные возможности
gost-curl — предназначен для работы только по TLS 1.3 и только с использованием ГОСТ-алгоритмов. Для всего остального есть нативный curl, доступный в любой ОС.
Поддерживается только алгоритм "Кузнечик", российские OID-кривые и форматы сертификатов, "Магма" не поддерживается.
Важной особенностью инструмента является поддержка PEM/DER/PKCS12 форматов, поэтому пользователям не придется заниматься конвертацией ключей.
Доступные опции:
-> % ./gost-curl -h gost-curl — консольный HTTP-клиент с поддержкой ГОСТ TLS 1.3 v0.1.0. Red Stars Systems 2026. Использование: gost-curl [опции] <url> Опции: -X, --request <метод> HTTP-метод (по умолчанию: GET) -d, --data <тело> Тело запроса (меняет метод на POST) -H, --header <Имя:Знч> Заголовок запроса (можно повторять) -v, --verbose Показать заголовки запроса и ответа -o, --output <файл> Сохранить ответ в файл (по умолчанию: stdout) -L, --location Следовать перенаправлениям (3xx) -k, --insecure Отключить проверку сертификата и hostname (только разработка) -I, --head Получить только заголовки (HEAD-запрос) -C, --continue-at <N|-> Докачка: -C - (авто) или -C <оффсет> -u, --user <user:pass> Basic-аутентификация (user:pass или запрос пароля) -x, --proxy <url> HTTP/SOCKS5-прокси (http://user:pass@host:port) -r, --range <N-N|N-|-N> Диапазон байт -T, --upload-file <ф> Загрузить файл (PUT) -F, --form <n=v|n=@ф> Multipart form-data (можно повторять) --ca, --cacert <файл> CA-сертификат(ы) (PEM или DER) для проверки сервера. PEM-файл может содержать цепочку доверенных CA --cert <файл>[:<пароль>] Клиентский сертификат для mTLS. PEM — цепочка сертификатов (leaf + промежуточные). PKCS12/PFX — сертификат + ключ. Пароль опционально. --key <файл> Закрытый ключ клиента (PEM или DER) для mTLS. Поддерживаются зашифрованные PEM-ключи. --passin <spec> Источник пароля для PKCS12 или зашифрованного ключа. Форматы: pass:xxx, file:путь, env:VAR, stdin --connect-timeout с Таймаут соединения (по умолчанию: 10) --read-timeout с Таймаут чтения (по умолчанию: 30) --tlsv1.3 Использовать TLS 1.3 (всегда включён) --progress-bar Показать прогресс-бар со скоростью и ETA --speed-limit <байт/с> Отмена при скорости ниже лимита --speed-time <сек> Время замера скорости (по умолч. 30) --retry <N> Повтор при ошибке до N раз --retry-delay <сек> Задержка между повторами (по умолч. 1) --limit-rate <скорость> Ограничить скорость (500K, 2M, 1G) --no-verify-hostname Отключить проверку совпадения имени хоста (CN/SAN) с сертификатом (по умолчанию включена) -h, --help Показать эту справку Примеры: gost-curl --ca ca.pem https://gost-server.example/api gost-curl --ca ca-chain.pem --cert client.pem --key client-key.pem \ https://mtls-server.example/api gost-curl --cert client.p12:secret https://mtls-server.example/api gost-curl --cert client.p12 --passin file:pass.txt https://mtls-server.example/api gost-curl --cert encrypted.pem --key encrypted-key.pem --passin pass:secret \ https://mtls-server.example/api gost-curl -k -X POST -d '{"key":"value"}' -H "Content-Type: application/json" \ --ca ca.pem https://gost-server.example/api gost-curl -k -L -o page.html https://gost-server.example/redirect
Не стоит ожидать от клиента большой скорости, т.к. у ГОСТ-алгоритмов нет аппаратного ускорения, какие есть у AES. Но от 30-50 МБ/c он выдает, что вполне приемлемо для повседневных задач.
Лицензия свободная и разрешает использование в любых сферах.