Поддержка шифрования по ГОСТ в openssl

Рассматривается процесс настройки openssl (в Ubuntu), а также создание ключей.

Для поддержки шифрования по ГОСТ в openssl потребуется:

  • определить версию openssl
  • установить пакет с поддержкой ГОСТ
  • добавить конфигурацию
  • проверить доступность шифрования

Определения версии openssl

Проверить текущую версию можно командой:

openssl version

Установка пакета с поддержкой ГОСТ

Для OpenSSL 1.0:

apt-get install openssl-engines

Для OpenSSL 1.1:

apt install libengine-gost-openssl1.1

Настройка конфигурации

  1. После установки пакета в системе появляется файл gost.so. Его местоположение может быть разным, в зависимости от версий. Найдем данный файл командой:

find / -name gost.so

  1. Открыть конфигурационный файл openssl:
nano /etc/ssl/openssl.cnf
  1. В начало файла конфигурации добавить (можно самой первой строкой):
openssl_conf = openssl_def
  1. В конец файла конфигурации добавить:
[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = <path_to_file>/gost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet

Вместо <path_to_file> нужно будет указать путь до файла gost.so, который был найден ранее.

  1. Проверим, что openssl поддерживает новые алгоритмы:
openssl ciphers|tr ':' '\n'|grep GOST

Результат может быть примерно таким:

GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

Если после выполнения команды ничего не найдено, надо:

  • открыть конфигурацию
  • закомментировать строку вида:
openssl_conf = default_conf

Создание сертификата на основе алгоритма шифрования ГОСТ

Создание закрытый ключ с алгоритмом ГОСТ-2012 (ca.key):

openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out ca.key

Создание сертификата на 365 дней (ca.cer), указывая параметры в командной строке:

openssl req -new -x509 -md_gost12_256 -days 365 -key ca.key -out ca.cer \
  -subj "/C=RU/ST=Russia/L=Moscow/O=X/OU=X CA/CN=X CA Root"

Создание сертификата, с указанием параметров в процессе диалога:

openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout ca.key -out ca.cer

Получение публичного ключа их сертификата:

openssl x509 -pubkey -noout -in ca.cer > pubkey.pem

Проверка сертификата (ca.cer):

openssl x509 -in ca.cer -text –noout

Получение контрольной суммы используя алгоритм ГОСТ

openssl dgst -engine gost -md_gost12_256 <file>
openssl dgst -engine gost -md_gost12_512 <file>