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

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

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

Основные возможности:

  • Поддержка алгоритмов электронной подписи (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 и выпустим тестовый сертификат по ГОСТ.

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

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

apt-get install g++ gcc make pkg-config git curl libssl-dev -y

Установка CMake

Для сборки GOST-engine нужна версия CMake 3.0 или новее. Выполним установку актуального релиза.

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

git clone https://github.com/Kitware/CMake.git CMake
cd CMake

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

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

Выполняем сборку CMake:

./bootstrap --prefix=/usr

make -j$(nproc)
make install

cd ..

Для проверки, выведем информация об установленной версии:

cmake --version

OpenSSL

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

openssl version -v
OpenSSL 3.0.15 3 Sep 2024 (Library: OpenSSL 3.0.15 3 Sep 2024)

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

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

git clone https://github.com/gost-engine/engine.git gost-engine
cd gost-engine/

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

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

Сборка

Выполняем сборку и установку gost-engine:

git submodule update --init
mkdir build && cd build

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build . --config Release
cmake --build . --target install --config Release

Настройка

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

/etc/ssl/openssl.cnf
openssl_conf=openssl_def

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

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

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/gost.so
default_algorithms = ALL

Проверка

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

openssl engine
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(gost) Reference implementation of GOST engine

Выведем список доступных шифров GOST:

openssl ciphers | tr ':' '\n' | grep GOST
GOST2012-MAGMA-MAGMAOMAC
GOST2012-KUZNYECHIK-KUZNYECHIKOMAC
LEGACY-GOST2012-GOST8912-GOST8912
IANA-GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

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

openssl engine -c | grep gost | tr -d '[]' | tr ',' '\n'
(gost) Reference implementation of GOST engine
 gost89
 gost89-cnt
 gost89-cnt-12
 gost89-cbc
 kuznyechik-ecb
 kuznyechik-cbc
 kuznyechik-cfb
 kuznyechik-ofb
 kuznyechik-ctr
 magma-ecb
 kuznyechik-mgm
 magma-cbc
 magma-ctr
 magma-ctr-acpkm
 magma-ctr-acpkm-omac
 magma-mgm
 kuznyechik-ctr-acpkm
 kuznyechik-ctr-acpkm-omac
 magma-kexp15
 kuznyechik-kexp15
 md_gost94
 gost-mac
 md_gost12_256
 md_gost12_512
 gost-mac-12
 magma-mac
 kuznyechik-mac
 kuznyechik-ctr-acpkm-omac
 gost2001
 id-GostR3410-2001DH
 gost-mac
 gost2012_256
 gost2012_512
 gost-mac-12
 magma-mac
 kuznyechik-mac
 magma-ctr-acpkm-omac
 kuznyechik-ctr-acpkm-omac

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

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

openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout key.pem -out cert.pem -md_gost12_256

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

openssl x509 -in cert.pem -text -noout

Вывод:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            6b:e9:a1:34:89:77:3a:80:6d:fb:7d:15:f7:46:2b:27:e5:f7:47:e0
        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
        Validity
            Not Before: Mar 10 11:23:30 2025 GMT
            Not After : Apr  9 11:23:30 2025 GMT
        Subject: C = RU, ST = Moscow, L = Moscow, O = Internet Widgits Pty Ltd, CN = gost.jakondo.ru
        Subject Public Key Info:
            Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
                Public key:
                   X:5F6B78DF32D5CFCEB349076D8532A1365308CBD15A7523B5B826A1F6AB440DC1
                   Y:AE32622F9789D29C11F8CEA06A78F999E0807389C2A338D1A26FCB0F744A7E0A
                Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                F3:16:33:E4:8D:E2:4E:7F:42:27:91:1B:85:F6:08:11:76:A3:C7:06
            X509v3 Authority Key Identifier:
                F3:16:33:E4:8D:E2:4E:7F:42:27:91:1B:85:F6:08:11:76:A3:C7:06
            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
    Signature Value:
        19:07:10:f0:02:5d:35:2f:8c:79:64:6f:09:db:25:f1:d9:89:
        85:9f:26:3d:16:92:ec:1a:59:1e:74:d8:b6:69:49:fd:84:a7:
        19:5f:cc:e5:df:74:c5:89:2d:0b:69:72:1b:62:7e:f8:df:0b:
        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 и напишу статью