Шифрование по ГОСТ Р 34.10-2012 в OpenSSL 1.1.1 на Debian 10 Buster

Опишу для памятки как реализовать поддержку шифрования по ГОСТ Р 34.10-2012 (GOST2012) в OpenSSL 1.1.1 на Debian 10 Buster.

Реализация криптоалгоритмов российского ГОСТа для OpenSSL — https://github.com/gost-engine/engine

 

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

apt-get install g++ gcc make

 

Установка OpenSSL

Скачиваем исходники, распаковываем их:

wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz
tar -zxvf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p

Собираем пакет и устанавливаем его:

./config --prefix=/usr/ssl --openssldir=/usr/ssl
make all
make install
cd ..

Вносим изменения чтобы по умолчанию использовалась установленная версия:

rm /usr/bin/openssl
ln -s /usr/ssl/bin/openssl /usr/bin/openssl
echo "/usr/ssl/lib" >> /etc/ld.so.conf.d/ssl.conf
ldconfig

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

openssl version -v
OpenSSL 1.1.1p  21 Jun 2022

 

Установка Cmake

Для корректной сборки gost-engine, установим последнюю (на момент написания статьи) версию cmake.

 

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

apt-get install git libssl-dev

Скачиваем исходники, распаковываем их:

wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz
tar -zxvf cmake-3.23.2.tar.gz
cd cmake-3.23.2

Собираем пакет и устанавливаем его:

./bootstrap --prefix=/usr
make
make install
cd ..

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

cmake --version
cmake version 3.23.2

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

Скачиваем исходники gost-engine, переключаем на коммит для версии openssl 1.1.1*:

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

Создаем каталог для размещения библиотеки gost и выполняем сборку и установку gost-engine:

mkdir -p /usr/lib/ssl/engines-3

cmake -DCMAKE_BUILD_TYPE=Release -DOPENSSL_ROOT_DIR=/usr/ssl -DOPENSSL_LIBRARIES=/usr/ssl/lib -DOPENSSL_ENGINES_DIR=/usr/ssl/lib/engines-3
cmake --build . --config Release
cmake --build . --target install --config Release

 

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

openssl_conf = openssl_def

В конец файла добавляем:

# GOST section
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/ssl/lib/engines-3/gost.so
GOST_PK_FORMAT = LEGACY_PK_WRAP

 

Для проверки доступности gost-engine в openssl, выполним команды:

openssl engine
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(gost) Reference implementation of GOST engine
openssl ciphers | tr ':' '\n' | grep GOST
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

 

Для проверки сгенерируем сертификат по алгоритму GOST2012:

openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout key.pem -out cert.pem
openssl x509 -outform der -in cert.pem -out cert.crt

В полученном сертификате смотрим алгоритм подписи, если он 1.2.643.7.1.1.3.2, то сертификат сгенерирован по ГОСТ Р 34.10-2012. Если на ПК установлен КриптоПро, то в Алгоритме подписи будет отображаться ГОСТ Р 34.11-2012/34.10-2012 256 бит.

 

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

Оставьте комментарий

двенадцать − 2 =