SCROLL
Среднее время на прочтение: 3 мин.

Установка OpenSSL GOST Engine на Debian 12

GOST-engine – это модуль для OpenSSL, реализующий поддержку российских криптографических алгоритмов в соответствии с ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 и другими стандартами. Он позволяет использовать ГОСТ-алгоритмы для цифровых подписей, хэширования, симметричного и асимметричного шифрования.

JUQwJTlFJUQxJTgxJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUJEJUQxJThCJUQwJUI1JTIwJUQwJUIyJUQwJUJFJUQwJUI3JUQwJUJDJUQwJUJFJUQwJUI2JUQwJUJEJUQwJUJFJUQxJTgxJUQxJTgyJUQwJUI4JTNB

  • Поддержка алгоритмов электронной подписи (GOST R 34.10-2001, GOST R 34.10-2012).
  • Реализация хэш-функций (GOST R 34.11-94, GOST R 34.11-2012).
  • Симметричное шифрование (GOST 28147-89, Кузнечик, Магма).
  • Использование ГОСТ-алгоритмов в TLS-соединениях.
Официальная страница GOST-engine на Github — https://github.com/gost-engine/engine

Ниже пошагово разберем как собрать и установить GOST-engine самой актуальной версии на Debian 12 и выпустим тестовый сертификат по ГОСТ.

Установка зависимостей

Устанавливаем необходимые пакеты зависимостей:

YXB0LWdldCUyMGluc3RhbGwlMjBnJTJCJTJCJTIwZ2NjJTIwbWFrZSUyMHBrZy1jb25maWclMjBnaXQlMjBjdXJsJTIwbGlic3NsLWRldiUyMC15

Установка CMake

JUQwJTk0JUQwJUJCJUQxJThGJTIwJUQxJTgxJUQwJUIxJUQwJUJFJUQxJTgwJUQwJUJBJUQwJUI4JUMyJUEwR09TVC1lbmdpbmUlQzIlQTAlRDAlQkQlRDElODMlRDAlQjYlRDAlQkQlRDAlQjAlMjAlRDAlQjIlRDAlQjUlRDElODAlRDElODElRDAlQjglRDElOEYlQzIlQTBDTWFrZSVDMiVBMDMuMCUyMCVEMCVCOCVEMCVCQiVEMCVCOCUyMCVEMCVCRCVEMCVCRSVEMCVCMiVEMCVCNSVEMCVCNS4lMjAlRDAlOTIlRDElOEIlRDAlQkYlRDAlQkUlRDAlQkIlRDAlQkQlRDAlQjglRDAlQkMlMjAlRDElODMlRDElODElRDElODIlRDAlQjAlRDAlQkQlRDAlQkUlRDAlQjIlRDAlQkElRDElODMlMjAlRDAlQjAlRDAlQkElRDElODIlRDElODMlRDAlQjAlRDAlQkIlRDElOEMlRDAlQkQlRDAlQkUlRDAlQjMlRDAlQkUlMjAlRDElODAlRDAlQjUlRDAlQkIlRDAlQjglRDAlQjclRDAlQjAuJTIw

Клонируем репозиторий CMake с GitHub и переходим в клонированный репозиторий:

Z2l0JTIwY2xvbmUlMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZLaXR3YXJlJTJGQ01ha2UuZ2l0JTIwQ01ha2U=
Y2QlMjBDTWFrZQ==

Переключаемся на актуальный релиз выполнив команду:

LATEST_TAG=$(curl -s curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | grep -oP '"tag_name": "\K[^"]+')
git checkout $LATEST_TAG

JUQwJTkyJUQxJThCJUQwJUJGJUQwJUJFJUQwJUJCJUQwJUJEJUQxJThGJUQwJUI1JUQwJUJDJTIwJUQxJTgxJUQwJUIxJUQwJUJFJUQxJTgwJUQwJUJBJUQxJTgzJUMyJUEwQ01ha2UlM0E=

./bootstrap --prefix=/usr

bWFrZSUyMC1qJTI0KG5wcm9jKQ==
make install

Y2QlMjAuLg==

JUQwJTk0JUQwJUJCJUQxJThGJTIwJUQwJUJGJUQxJTgwJUQwJUJFJUQwJUIyJUQwJUI1JUQxJTgwJUQwJUJBJUQwJUI4JTJDJTIwJUQwJUIyJUQxJThCJUQwJUIyJUQwJUI1JUQwJUI0JUQwJUI1JUQwJUJDJTIwJUQwJUI4JUQwJUJEJUQxJTg0JUQwJUJFJUQxJTgwJUQwJUJDJUQwJUIwJUQxJTg2JUQwJUI4JUQxJThGJTIwJUQwJUJFJUQwJUIxJTIwJUQxJTgzJUQxJTgxJUQxJTgyJUQwJUIwJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUJCJUQwJUI1JUQwJUJEJUQwJUJEJUQwJUJFJUQwJUI5JTIwJUQwJUIyJUQwJUI1JUQxJTgwJUQxJTgxJUQwJUI4JUQwJUI4JTNB

Y21ha2UlMjAtLXZlcnNpb24=

OpenSSL

Проверяем установленную версию OpenSSL, она должна быть выше 3.0:

openssl version -v
T3BlblNTTCUyMDMuMC4xNSUyMDMlMjBTZXAlMjAyMDI0JTIwKExpYnJhcnklM0ElMjBPcGVuU1NMJTIwMy4wLjE1JTIwMyUyMFNlcCUyMDIwMjQp

Установка GOST-engine

Клонируем репозиторий GOST-engine с GitHub и переходим в клонированный репозиторий:

git clone https://github.com/gost-engine/engine.git gost-engine
Y2QlMjBnb3N0LWVuZ2luZSUyRg==

JUQwJTlGJUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJBJUQwJUJCJUQxJThFJUQxJTg3JUQwJUIwJUQwJUI1JUQwJUJDJUQxJTgxJUQxJThGJTIwJUQwJUJEJUQwJUIwJTIwJUQwJUIwJUQwJUJBJUQxJTgyJUQxJTgzJUQwJUIwJUQwJUJCJUQxJThDJUQwJUJEJUQxJThCJUQwJUI5JTIwJUQxJTgwJUQwJUI1JUQwJUJCJUQwJUI4JUQwJUI3JTIwJUQwJUIyJUQxJThCJUQwJUJGJUQwJUJFJUQwJUJCJUQwJUJEJUQwJUI4JUQwJUIyJTIwJUQwJUJBJUQwJUJFJUQwJUJDJUQwJUIwJUQwJUJEJUQwJUI0JUQxJTgzJTNB

LATEST_TAG=$(curl -s https://api.github.com/repos/gost-engine/engine/releases/latest | grep -oP '"tag_name": "\K[^"]+')
git checkout $LATEST_TAG

Сборка

JUQwJTkyJUQxJThCJUQwJUJGJUQwJUJFJUQwJUJCJUQwJUJEJUQxJThGJUQwJUI1JUQwJUJDJTIwJUQxJTgxJUQwJUIxJUQwJUJFJUQxJTgwJUQwJUJBJUQxJTgzJTIwJUQwJUI4JTIwJUQxJTgzJUQxJTgxJUQxJTgyJUQwJUIwJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUJBJUQxJTgzJTIwZ29zdC1lbmdpbmUlM0E=

Z2l0JTIwc3VibW9kdWxlJTIwdXBkYXRlJTIwLS1pbml0
bWtkaXIlMjBidWlsZCUyMCUyNiUyNiUyMGNkJTIwYnVpbGQ=

Y21ha2UlMjAuLiUyMC1EQ01BS0VfQlVJTERfVFlQRSUzRFJlbGVhc2UlMjAtRENNQUtFX0lOU1RBTExfUFJFRklYJTNEJTJGdXNy
Y21ha2UlMjAtLWJ1aWxkJTIwLiUyMC0tY29uZmlnJTIwUmVsZWFzZQ==
cmake --build . --target install --config Release

Настройка

Настроим openssl на работу с gost-engine, для этого в конфигурационный файл /etc/ssl/openssl.cnf в глобальном разделе, перед первым заголовком раздела заключенным в квадратные скобки, добавляем:

/etc/ssl/openssl.cnf
b3BlbnNzbF9jb25mJTNEb3BlbnNzbF9kZWY=

В конец того же файла добавляем следующие параметры:

/etc/ssl/openssl.cnf
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
ZHluYW1pY19wYXRoJTIwJTNEJTIwJTJGdXNyJTJGbGliJTJGeDg2XzY0LWxpbnV4LWdudSUyRmVuZ2luZXMtMyUyRmdvc3Quc28=
default_algorithms = ALL

Проверка

Выведем список доступных криптографических движков, в выводе должен присутствовать GOST:

b3BlbnNzbCUyMGVuZ2luZQ==
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
KGdvc3QpJTIwUmVmZXJlbmNlJTIwaW1wbGVtZW50YXRpb24lMjBvZiUyMEdPU1QlMjBlbmdpbmU=

JUQwJTkyJUQxJThCJUQwJUIyJUQwJUI1JUQwJUI0JUQwJUI1JUQwJUJDJTIwJUQxJTgxJUQwJUJGJUQwJUI4JUQxJTgxJUQwJUJFJUQwJUJBJTIwJUQwJUI0JUQwJUJFJUQxJTgxJUQxJTgyJUQxJTgzJUQwJUJGJUQwJUJEJUQxJThCJUQxJTg1JTIwJUQxJTg4JUQwJUI4JUQxJTg0JUQxJTgwJUQwJUJFJUQwJUIyJTIwR09TVCUzQQ==

openssl ciphers | tr ':' '\n' | grep GOST
R09TVDIwMTItTUFHTUEtTUFHTUFPTUFD
R09TVDIwMTItS1VaTllFQ0hJSy1LVVpOWUVDSElLT01BQw==
LEGACY-GOST2012-GOST8912-GOST8912
IANA-GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

Выведем доступные GOST провайдеры:

b3BlbnNzbCUyMGVuZ2luZSUyMC1jJTIwJTdDJTIwZ3JlcCUyMGdvc3QlMjAlN0MlMjB0ciUyMC1kJTIwJyU1QiU1RCclMjAlN0MlMjB0ciUyMCclMkMnJTIwJyU1Q24n
KGdvc3QpJTIwUmVmZXJlbmNlJTIwaW1wbGVtZW50YXRpb24lMjBvZiUyMEdPU1QlMjBlbmdpbmU=
 gost89
JTIwZ29zdDg5LWNudA==
JTIwZ29zdDg5LWNudC0xMg==
JTIwZ29zdDg5LWNiYw==
JTIwa3V6bnllY2hpay1lY2I=
 kuznyechik-cbc
JTIwa3V6bnllY2hpay1jZmI=
 kuznyechik-ofb
JTIwa3V6bnllY2hpay1jdHI=
JTIwbWFnbWEtZWNi
 kuznyechik-mgm
JTIwbWFnbWEtY2Jj
JTIwbWFnbWEtY3Ry
JTIwbWFnbWEtY3RyLWFjcGtt
JTIwbWFnbWEtY3RyLWFjcGttLW9tYWM=
 magma-mgm
 kuznyechik-ctr-acpkm
 kuznyechik-ctr-acpkm-omac
JTIwbWFnbWEta2V4cDE1
JTIwa3V6bnllY2hpay1rZXhwMTU=
 md_gost94
JTIwZ29zdC1tYWM=
 md_gost12_256
 md_gost12_512
JTIwZ29zdC1tYWMtMTI=
 magma-mac
 kuznyechik-mac
JTIwa3V6bnllY2hpay1jdHItYWNwa20tb21hYw==
 gost2001
JTIwaWQtR29zdFIzNDEwLTIwMDFESA==
JTIwZ29zdC1tYWM=
 gost2012_256
 gost2012_512
 gost-mac-12
 magma-mac
JTIwa3V6bnllY2hpay1tYWM=
JTIwbWFnbWEtY3RyLWFjcGttLW9tYWM=
JTIwa3V6bnllY2hpay1jdHItYWNwa20tb21hYw==

Выпуск сертификата GOST

Сгенерируем закрытый ключ и создадим сертификат с подписью ГОСТ следующей командой:

b3BlbnNzbCUyMHJlcSUyMC14NTA5JTIwLW5ld2tleSUyMGdvc3QyMDEyXzI1NiUyMC1wa2V5b3B0JTIwcGFyYW1zZXQlM0FBJTIwLW5vZGVzJTIwLWtleW91dCUyMGtleS5wZW0lMjAtb3V0JTIwY2VydC5wZW0lMjAtbWRfZ29zdDEyXzI1Ng==

Выведем информацию о выпущенном сертификате:

openssl x509 -in cert.pem -text -noout

Вывод:

Q2VydGlmaWNhdGUlM0E=
    Data:
        Version: 3 (0x2)
        Serial Number:
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwNmIlM0FlOSUzQWExJTNBMzQlM0E4OSUzQTc3JTNBM2ElM0E4MCUzQTZkJTNBZmIlM0E3ZCUzQTE1JTNBZjclM0E0NiUzQTJiJTNBMjclM0FlNSUzQWY3JTNBNDclM0FlMA==
        Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
        Issuer: C = RU, ST = Moscow, L = Moscow, O = Internet Widgits Pty Ltd, CN = gost.jakondo.ru
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwVmFsaWRpdHk=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTm90JTIwQmVmb3JlJTNBJTIwTWFyJTIwMTAlMjAxMSUzQTIzJTNBMzAlMjAyMDI1JTIwR01U
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTm90JTIwQWZ0ZXIlMjAlM0ElMjBBcHIlMjAlMjA5JTIwMTElM0EyMyUzQTMwJTIwMjAyNSUyMEdNVA==
        Subject: C = RU, ST = Moscow, L = Moscow, O = Internet Widgits Pty Ltd, CN = gost.jakondo.ru
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU3ViamVjdCUyMFB1YmxpYyUyMEtleSUyMEluZm8lM0E=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUHVibGljJTIwS2V5JTIwQWxnb3JpdGhtJTNBJTIwR09TVCUyMFIlMjAzNC4xMC0yMDEyJTIwd2l0aCUyMDI1NiUyMGJpdCUyMG1vZHVsdXM=
                Public key:
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwWCUzQTVGNkI3OERGMzJENUNGQ0VCMzQ5MDc2RDg1MzJBMTM2NTMwOENCRDE1QTc1MjNCNUI4MjZBMUY2QUI0NDBEQzE=
                   Y:AE32622F9789D29C11F8CEA06A78F999E0807389C2A338D1A26FCB0F744A7E0A
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUGFyYW1ldGVyJTIwc2V0JTNBJTIwaWQtR29zdFIzNDEwLTIwMDEtQ3J5cHRvUHJvLUEtUGFyYW1TZXQ=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwWDUwOXYzJTIwZXh0ZW5zaW9ucyUzQQ==
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwWDUwOXYzJTIwU3ViamVjdCUyMEtleSUyMElkZW50aWZpZXIlM0E=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwRjMlM0ExNiUzQTMzJTNBRTQlM0E4RCUzQUUyJTNBNEUlM0E3RiUzQTQyJTNBMjclM0E5MSUzQTFCJTNBODUlM0FGNiUzQTA4JTNBMTElM0E3NiUzQUEzJTNBQzclM0EwNg==
            X509v3 Authority Key Identifier:
                F3:16:33:E4:8D:E2:4E:7F:42:27:91:1B:85:F6:08:11:76:A3:C7:06
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwWDUwOXYzJTIwQmFzaWMlMjBDb25zdHJhaW50cyUzQSUyMGNyaXRpY2Fs
                CA:TRUE
JTIwJTIwJTIwJTIwU2lnbmF0dXJlJTIwQWxnb3JpdGhtJTNBJTIwR09TVCUyMFIlMjAzNC4xMC0yMDEyJTIwd2l0aCUyMEdPU1QlMjBSJTIwMzQuMTEtMjAxMiUyMCgyNTYlMjBiaXQp
JTIwJTIwJTIwJTIwU2lnbmF0dXJlJTIwVmFsdWUlM0E=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMTklM0EwNyUzQTEwJTNBZjAlM0EwMiUzQTVkJTNBMzUlM0EyZiUzQThjJTNBNzklM0E2NCUzQTZmJTNBMDklM0FkYiUzQTI1JTNBZjElM0FkOSUzQTg5JTNB
        85:9f:26:3d:16:92:ec:1a:59:1e:74:d8:b6:69:49:fd:84:a7:
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMTklM0E1ZiUzQWNjJTNBZTUlM0FkZiUzQTc0JTNBYzUlM0E4OSUzQTJkJTNBMGIlM0E2OSUzQTcyJTNBMWIlM0E2MiUzQTdlJTNBZjglM0FkZiUzQTBiJTNB
        34:da:72:95:19:f7:1e:a6:68:6e
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

Ответ на комментарий ОлегОтмена ответа
4 комментариев
  • отвечаю сам себе. Да, действительно при малом объеме оперативки сборка падает. Надо проверить swap файл.
    Например, так:
    sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

  • Для проверки установил временно Debian 11 и попробовал пройти по шагам этой инструкции.

    При сбоке CMake (команда ./bootstrap —prefix=/usr) получил сообщение:
    g++ -D_FILE_OFFSET_BITS=64 -DCMAKE_BOOTSTRAP -DCMake_HAVE_CXX_MAKE_UNIQUE=1 -I/root/CMake/Bootstrap.cmk -I/root/CMake/Source -I/root/CMake/Source/LexerParser -I/root/CMake/Utilities/std -I/root/CMake/Utilities -c /root/CMake/Source/cmGeneratorTarget.cxx -o cmGeneratorTarget.o
    g++: fatal error: Killed signal terminated program cc1plus
    compilation terminated.
    gmake: *** [Makefile:208: cmGeneratorTarget.o] Error 1
    ———————————————
    Error when bootstrapping CMake:
    Problem while running gmake
    ———————————————
    Log of errors: /root/CMake/Bootstrap.cmk/cmake_bootstrap.log
    ———————————————

    Может памяти не хватило? Использую для тестирования самый простой VPS с 500 МБ RAM

  • Есть ли подобная инструкция для Debian 12?

    • Это ответ на комментарий Олег

      Нет, возможно если будет время разберу под Debian 12 и напишу статью