Включение поддержки ГОСТ в OpenSSL на Ubuntu

Поддержка ГОСТ в OpenSSL может нам понадобиться для создания сертификатов безопасности на основе российских алгоритмов шифрования. В данной инструкции мы рассмотрим настройку OpenSSL на Linux Ubuntu.
Предварительные действия
Настройка OpenSSL для включения поддержки ГОСТ
Создание сертификата на основе алгоритма gost
Подготовка системы
Для включения поддержки ГОСТ нам нужен пакет OpenSSL версии 1.1.1 и выше. Проверить текущую версию можно командой:
openssl version
Мы должны увидеть что-то на подобие:
OpenSSL 1.1.1n 15 Mar 2022
Если версия ниже, обновляем пакет. Для этого переходим к инструкции Как обновить OpenSSL на Linux.
Также нам нужно установить пакет, включающий библиотеки для поддержки алгоритмов шифрования ГОСТ:
apt install libengine-gost-openssl1.1
Мы готовы к настройке OpenSSL.
Настройка OpenSSL
После установки пакета libengine-gost-openssl в системе появляется файл gost.so. Его местоположение может быть разным, в зависимости от версий. Найдем данный файл командой:
find / -name gost.so
В моем примере данный файл находился в корне системы. Это не очень правильно. Перенесем его в каталог, где должны находиться библиотеки в Ubuntu:
mv /gost.so /usr/lib/x86_64-linux-gnu/
Теперь откроем конфигурационный файл openssl:
vi /etc/ssl/openssl.cnf
В начало файла добавим:
openssl_conf = openssl_def
* файл может содержать описание нескольких конфигураций. Директива openssl_conf указывает, какую конфигурацию должен использовать OpenSSL.
Убедитесь, что ниже нет другой директивы openssl_conf. В противном случае, будет использоваться не наша, а так, что ниже.
В конец файла добавим:
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/gost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
* обратите внимание на опцию dynamic_path, в которой мы указываем полный путь до файла gost.so. Его мы переносили в каталог /usr/lib/x86_64-linux-gnu.
Проверим, что openssl поддерживает новые алгоритмы — для этого вводим команду:
openssl ciphers | tr ':' '\n' | grep GOST
Мы должны увидеть что-то на подобие:
LEGACY-GOST2012-GOST8912-GOST8912
IANA-GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
Поддержка ГОСТ в OpenSSL добавлена.
Создание ГОСТ-сертификата
Создадим сертификат на основе алгоритма шифрования ГОСТ. Вводим такую команду:
openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout cert.key -out cert.pem
* это простая команда, которая сформирует открытый ключ cert.pem и закрытый cert.key с российским алгоритмом безопасности gost2012_256.
Система задаст несколько вопросов, после чего будут сформированы ключи.
Посмотрим на открытый ключ:
openssl x509 -text -in cert.pem
Мы увидим что-то на подобие:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:51:9c:34:ba:d9:70:51:35:1f:9a:b6:a4:12:9a:0f:61:4d:2e:f2
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
* Обратите внимание на Signature Algorithm.