...
С 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: |
...
Для начала нужно установить пакет с gost engine:
Блок кода | ||||
---|---|---|---|---|
| ||||
apt install libengine-gost-openssl1.1 |
...
В начало файла добавить:
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
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 |
...
Для выполнения этого пункта потребуется наличие всех составляющих, экспортированных из КриптоПРО:
Блок кода | ||||
---|---|---|---|---|
| ||||
header.key masks2.key masks.key name.key primary2.key primary.key |
...
Выполняем команду:
Блок кода | ||||
---|---|---|---|---|
| ||||
./get-cpcert <PATH> <PASSWORD> > result.pem |
...
Теперь можно создать PKCS#12 контейнер, который понимает Конструктор Порталов:
Блок кода | ||||
---|---|---|---|---|
| ||||
openssl pkcs12 -engine gost -export -in result.pem -out result.pfx |
...