Шифрование по ГОСТ Р 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 бит.
Обсуждение
Нет комментариев.