Рассматривается процесс настройки openssl (в Ubuntu), а также создание ключей.
Для поддержки шифрования по ГОСТ в openssl потребуется:
- определить версию openssl
- установить пакет с поддержкой ГОСТ
- добавить конфигурацию
- проверить доступность шифрования
Определения версии openssl
Проверить текущую версию можно командой:
openssl version
Установка пакета с поддержкой ГОСТ
Для OpenSSL 1.0:
apt-get install openssl-engines
Для OpenSSL 1.1:
apt install libengine-gost-openssl1.1
Настройка конфигурации
- После установки пакета в системе появляется файл gost.so. Его местоположение может быть разным, в зависимости от версий. Найдем данный файл командой:
find / -name gost.so
- Открыть конфигурационный файл openssl:
nano /etc/ssl/openssl.cnf
- В начало файла конфигурации добавить (можно самой первой строкой):
openssl_conf = openssl_def
- В конец файла конфигурации добавить:
[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, который был найден ранее.
- Проверим, что 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>