Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Введение

С 1 апреля 2020 года ЕСИА запрещает использование RSA-шифрования. В качестве замены предлагается  ГОСТ Р 34.10-2012. Это требует получения ГОСТ-сертификата от аккредитованного удостоверяющего центра.
В большинстве такие сертификаты сгенерированы с помощью ПО КриптоПРО и открытие их с помощью любых других утилит (openssl, bouncycastle) не представляется возможным. Попытки открыть экспортированный из КриптоПРО PKCS#12 контейнер с помощью OpenSSL завершаются подобной ошибкой:

$ openssl pkcs12 -in container.pfx
Enter Import Password:
Bag Attributes
    localKeyID: 01 00 00 00
    friendlyName: 20200313-114830-#  ! (/) " &▒""-!" 2012
    Microsoft CSP Name: Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider
Error outputting keys and certificates
140403870810560:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:../crypto/evp/evp_pbe.c:95:TYPE=1.2.840.113549.1.12.1.80
140403870810560:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:../crypto/pkcs12/p12_decr.c:41:
140403870810560:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:../crypto/pkcs12/p12_decr.c:94:

Для решения этой проблемы потребуется дополнительное ПО, а также по отдельности экспортированные компоненты сертификата.

Настройка OpenSSL

В статье рассматривается OpenSSL 1.1.1  11 Sep 2018 и Ubuntu 18.04. 

Для упрощения работы с ГОСТ шифрованием существует готовый Docker контейнер с OpenSSL + Gost engine.

Можно воспользоваться готовыми docker-образами с OpennSSL + Gost engine: https://hub.docker.com/r/rnix/openssl-gost/


Для начала нужно установить пакет с gost engine:

apt install libengine-gost-openssl1.1


После этого для включения поддержки требуется отредактировать файл конфигруации openssl: /etc/ssl/openssl.cnf:

В начало файла добавить:

openssl_conf = openssl_def


Затем добавить в конец:

[openssl_def] 
engines = engine_section 
[engine_section] 
gost = gost_section 
[gost_section] 
default_algorithms = ALL 
engine_id = gost 
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet


После этого можно проверить наличие ГОСТ-шифров командой:

openssl ciphers | tr ":" "\n" | grep -i gost


Если в выводе команды присутствует GOST2012, значит можно продолжать.

Конвертация экспортированных из КриптоПРО составляющих в PKCS#12 контейнер

Для выполнения этого пункта потребуется наличие всех составляющих, экспортированных из КриптоПРО:

header.key
masks2.key
masks.key
name.key
primary2.key
primary.key


А также утилита https://github.com/kov-serg/get-cpcert. В статье не будет рассматриваться сборка утилиты. Уже готовые скомпилированные двоичные файлы можно найти в указанном репозитории на вкладке «releases».

Утилита позволяет сконвертировать составляющие сертфиката, понятные лишь КриптоПРО, в понятный OpenSSL, а значит и BouncyCastle, формат. Результат будет выведен в stdout, поэтому мы его сразу направим в файл.

Выполняем команду:

./get-cpcert <PATH> <PASSWORD> > result.pem

Где <PATH> — папка с файлами, экспортированными из КриптоПРО, а <PASSWORD> — пароль к ним. В результате выполнения команды будет получен файл result.pem, содержащий сертификат и приватный ключ.


Теперь можно создать PKCS#12 контейнер, который понимает Конструктор Порталов:

openssl pkcs12 -engine gost -export -in result.pem -out result.pfx


После этого result.pfx можно загружать в Конструктор Порталов. Поддержка ГОСТ в КП и Портале обеспечена в версиях 1.11 и 1.15+.

  • Нет меток