Пост

Подключаем алгоритмы ГОСТ к openssl на Linux

На одном из проектов для согласования работы нескольких сервисов необходимо было обмениваться сообщениями, подписанными алгоритмом ГОСТ 34.10-2012.

🔶 Формирование сообщений и их подпись производим на сервере на базе Debian 11.

🔶 Для подписи сообщений используем openssl с поддержкой алгоритмов ГОСТ.


➡️ Установка

1
2
3
4
5
# ставим / обновляем криптографическую библиотеку
sudo apt install openssl

# добавляем поддержку алгоритмов шифрования ГОСТ
sudo apt install libengine-gost-openssl1.1

➡️ Настройка

  • Ищем установленную ранее библиотеку поддержки ГОСТ
1
2
# find / -name gost.so
/usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
  • Идем в конфигурационный файл openssl (/etc/ssl/openssl.cnf)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# в начале файла находим и меняем конфигурацию,
# которую будет использовать openssl
openssl_conf = openssl_def

# в конец файла добавляем следующие секции
# (в dynamic_path указываем путь до найденной ранее библиотеки gost.so)
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet

➡️ Проверка

  • Проверяем поддержку установленных алгоритмов
1
2
3
4
# openssl ciphers | tr ':' '\n' | grep GOST

GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
  • Проверяем подключенный движок gost
1
2
3
4
5
# openssl engine gost -c -t

(gost) Reference implementation of GOST engine
 [gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, grasshopper-ecb, grasshopper-cbc, grasshopper-cfb, grasshopper-ofb, grasshopper-ctr, md_gost94, gost-mac, md_gost12_256, md_gost12_512, gost-mac-12, gost2001, gost-mac, gost2012_256, gost2012_512, gost-mac-12]
     [ available ]
  • Подписываем документ с использованием закрытого ключа key.pem
1
openssl dgst -sign key.pem -engine gost test.txt | base64 | tr -d "\n"
Больше полезной информации в Telegram-канале