Статус: Новичок
Группы: Участники
Зарегистрирован: 11.12.2018(UTC) Сообщений: 5  Откуда: Рязань Сказал(а) «Спасибо»: 5 раз
|
Добрый день!Извините меня за мое ламерство и руки из задницы. Уже не знаю,у кого и как спрашивать.Осталось спросить только у данного сообщества и именно в этой ветке,так моя тема вскользь касается данного раздела. Мне поставлена задача,имея на руках сертификат КриптоПРО (ГОСТ-2012): сформировать *.pem-файл.
Данные манипуляции я провожу на Windows 7 x64 SP1. Почитав,кучу форумов,в том числе и этот я работу по воплощении задачи:
1.скачал отсюда https://www.cryptopro.ru/products/csp/downloads#latest_csp50 и установил КриптоПРО 5.0 (так как читая разные форумы,я остановил выбор на данной версии КриптоПРО). 2.скачал отсюда https://www.softpedia.com/get/Programming/Components-Libraries/OpenSSL.shtml и установил openSSL 1.1.1a (читая данный форум https://www.cryptopro.ru/forum2;/default.aspx?g=posts&t=8544 понял для того чтобы заработала библиотека ГОСТ-2012 необходимо именно версиюболше,чем 1.1.0,другие форумы советовали устанавливать именно 1.1.1); 3.скачал отсюда https://update.cryptopro.ru/support/nginx-gost/bin/185515/win64/ и положил в папку bin (C:\Program Files\OpenSSL\bin) с установленной программой openSSL библиотеку gostengy.dll для ГОСТ-2012. 4.Как описано на форуме https://habr.com/post/187574/ открываю и дополняю два файла C:\Program Files\OpenSSL\bin\openssl.cfg и C:\Program Files\OpenSSL\bin\cnf\openssl.cnf следующими строками: в начало добавляю
openssl_conf = openssl_def
в конец добавляю
# OpenSSL default section
[openssl_def]
engines=engine_section
# Engine scetion
[engine_section]
gost=gost_section
# Engine gost section
[gost_section]
engine_id=gost dynami c_path = C:\\Program Files\\OpenSSL\\bin\\gostengy.dll
default_algorithms=ALL
#CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
p.s. путь к ГОСТовой библиотеки gostengy.dll c_path = C:\\Program Files\\OpenSSL\\bin\\gostengy.dll прописываю через двойные слэши, как написано в комментарии к статье http://ali47802.blogspot.com/2012/07/openssl-gost.html, правда где-то встречал и что можно написать с одинарным обратным слэшем,но не проверял,то есть в моем случае: c_path = C:/Program Files/OpenSSL/bin/gostengy.dll
p.p.s в параметре default_algorithms указывю default_algorithms=ALL ,то есть использование движком всех алгоритмов, которые есть в движке,но совсем не ясно так это или не так,проверить не смог,так как нет нормальных знаний в данной области. Но здесь https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=93644 нашёл описание параметра немного по-другому (думаю,что это одно и то же написано только по-разному):
default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1
p.p.p.s параметр CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet закомментировал,так как непонятно как его использовать в свете ГОСТ-2012,так как здесь https://kirill-zak.ru/2015/08/13/298 написано, что параметр CRYPT_PARAMS нужен только для библиотеки gostengy.dll,которая позволяет пользователю выбирать наборы параметров симметричного алгоритма шифрования. Без этой опции не будет работать опция -gost89, что в свою очередь ведёт к тому, что при шифровании данных вместо GOST 28147-89 используется rc2-cbc.Так как мне ламеру не понятно,как это может мне помочь в моем случае,плюсом с данной настройкой ни чего не работает,то я её закоментил.
Хотя,здесь https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=12090 написано,какие настоящее время в КриптоПро CSP поддерживаются следующие параметры ключей ГОСТ Р 34.10-2012 (предложены варианты параметра CRYPT_PARAMS,но не один из этих параметров в моем случае правильно не работает,хотя подпись выпущена, как ГОСТ Р 34.11-2012/34.10-2012 256 бит): Для 256-битной подписи: id-GostR3410-2001-CryptoPro-A-ParamSet id-GostR3410-2001-CryptoPro-XchA-ParamSet id-GostR3410-2001-CryptoPro-B-ParamSet id-GostR3410-2001-CryptoPro-XchB-ParamSet id-GostR3410-2001-CryptoPro-C-ParamSet id-tc26-gost-3410-2012-256-paramSetA
Для 512-битной подписи: id-tc26-gost-3410-12-512-paramSetA id-tc26-gost-3410-12-512-paramSetB id-tc26-gost-3410-12-512-paramSetC
5.Как описано на форуме https://habr.com/post/187574/ добавляю новый параметр OPENSSL_CONF в "Переменные среды" (Панель управления-Система-Дополнительные парамтеры системы-Дополнительно-Переменные среды) и подставляю значение перменной C:\Program Files\OpenSSL\bin\openssl.cfg, и в PATH через "точку с запятой" дописываю путь к каталогу C:\Program Files\OpenSSL\bin\
6.Импортирую с помощью КриптоПРО сертификат в формате *.pfx, следующим образом: Панель управления-КриптоПРО CSP- Сервис-Просмотреть сертификаты в контейнере-Обзор-выбираю закрытый контейнер-Свойства-Состав-Копировать в файл-Далее-Да,экспортировать закрытый ключ-Далее-выбираю Файл обмена личной информацией -PKCS #12 (.PFX) и выбираю опцию "Включить по возможности все сертификаты в путь сертификакации"-Далее-ввожу пин-код от контейнера и выбираю куда выгружать файл (например,выгружаю в bin -C:\Program Files\OpenSSL\bin\) и получаю файл *.pfx
7.Далее прехожу к openSSL. Перехожу к папке с установленной программой:
C:\Users\User>cd C:\Program Files\OpenSSL\bin\
далее даю следующую команду (прочитал в коментарии здесь https://toster.ru/q/221880)
C:\Program Files\OpenSSL\bin> set OPENSSL_CONF=C:\Program Files\OpenSSL\bin\openssl.cfg
вывожу доступные алгоритмы для обеспечения уровня безопасности
C:\Program Files\OpenSSL\bin>openssl ciphers
но алгоритмы ГОСТ в списке отсутствуют:
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE -ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:E CDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY13 05:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM- SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:E CDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECD SA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECD HE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:RSA-PSK-AES256-GCM-SHA384:DHE-PSK-AES256-GC M-SHA384:RSA-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20- POLY1305:AES256-GCM-SHA384:PSK-AES256-GCM-SHA384:PSK-CHACHA20-POLY1305:RSA-PSK-A ES128-GCM-SHA256:DHE-PSK-AES128-GCM-SHA256:AES128-GCM-SHA256:PSK-AES128-GCM-SHA2 56:AES256-SHA256:AES128-SHA256:ECDHE-PSK-AES256-CBC-SHA384:ECDHE-PSK-AES256-CBC- SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:RSA-PSK-AES256-CBC-SHA384:DHE-PS K-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA:DHE-PSK-AES256-CBC-SHA:AES256-SHA:PSK -AES256-CBC-SHA384:PSK-AES256-CBC-SHA:ECDHE-PSK-AES128-CBC-SHA256:ECDHE-PSK-AES1 28-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:RSA-PSK-AES128-CBC-SHA256 :DHE-PSK-AES128-CBC-SHA256:RSA-PSK-AES128-CBC-SHA:DHE-PSK-AES128-CBC-SHA:AES128- SHA:PSK-AES128-CBC-SHA256:PSK-AES128-CBC-SHA
где-то прочитал,что нужно немного модернизировать команду set и делаю её вот в этом ключе:
C:\Program Files\OpenSSL\bin>Set OPENSSL_CONF=C:\Program Files\OpenSSL\bin\cnf\openssl.cnf
проверяю алгоритмы ГОСТ (и о чудо они появились):
C:\Program Files\OpenSSL\bin>openssl ciphers
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE -ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:E CDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY13 05:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM- SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:E CDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECD SA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECD HE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:RSA-PSK-AES256-GCM-SHA384:DHE-PSK-AES256-GC M-SHA384:RSA-PSK-CHACHA20-POLY1305:DHE-PSK-CHACHA20-POLY1305:ECDHE-PSK-CHACHA20- POLY1305:AES256-GCM-SHA384:PSK-AES256-GCM-SHA384:PSK-CHACHA20-POLY1305:RSA-PSK-A ES128-GCM-SHA256:DHE-PSK-AES128-GCM-SHA256:AES128-GCM-SHA256:PSK-AES128-GCM-SHA2 56:AES256-SHA256:AES128-SHA256:ECDHE-PSK-AES256-CBC-SHA384:ECDHE-PSK-AES256-CBC- SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:RSA-PSK-AES256-CBC-SHA384:DHE-PS K-AES256-CBC-SHA384:RSA-PSK-AES256-CBC-SHA:DHE-PSK-AES256-CBC-SHA:GOST2012-GOST8 912-GOST8912:GOST2001-GOST89-GOST89:AES256-SHA:PSK-AES256-CBC-SHA384:PSK-AES256- CBC-SHA:ECDHE-PSK-AES128-CBC-SHA256:ECDHE-PSK-AES128-CBC-SHA:SRP-RSA-AES-128-CBC -SHA:SRP-AES-128-CBC-SHA:RSA-PSK-AES128-CBC-SHA256:DHE-PSK-AES128-CBC-SHA256:RSA -PSK-AES128-CBC-SHA:DHE-PSK-AES128-CBC-SHA:AES128-SHA:PSK-AES128-CBC-SHA256:PSK- AES128-CBC-SHA
причем появились и алгоритмы ГОСТ-2001 и ГОСТ-2012, также руками переписал в параметре OPENSSL_CONF значение перменной на C:\Program Files\OpenSSL\bin\cnf\openssl.cnf, а в PATH изменения не вносил далее проверяю подключена ли библиотека ГОСТ
C:\Program Files\OpenSSL\bin>openssl engine (dynamic) Dynamic engine loading support (gostengy) CryptoPro GostEngy ($Revision: 185515 $)
далее пытаюсь выполнить конвертацию (взял отсюда http://pyatilistnik.org/crt-to-pfx/) сделанного ранее файла 123.pfx в файл key.pem
C:\Program Files\OpenSSL\bin>openssl.exe pkcs12 -in 123.pfx -nocerts -out key.pem Enter Import Password: Error outputting keys and certificates 6920:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe alg orithm:crypto\evp\evp_pbe.c:95:TYPE=1.2.840.113549.1.12.1.80 6920:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit err or:crypto\pkcs12\p12_decr.c:41: 6920:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt err or:crypto\pkcs12\p12_decr.c:94:
получаю следующие ошибки и самое неполнятное файл key.pem все же формируется и если его открыть Notepad++,то внутри файла key.pem получается следующая конструкция:
Bag Attributes localKeyID: 01 00 00 00 friendlyName: TEST1811TEST Microsoft CSP Name: Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider
Делаю проверку выгруженнгого с помощью КриптоПРО файла 123.pfx (взял отсюда )
c:\Program Files\OpenSSL\bin>openssl pkcs12 -info -in 123.pfx Enter Import Password: MAC: sha1, Iteration 2000 MAC length: 20, salt length: 20 PKCS7 Data Shrouded Keybag: undefined, Iteration 2000 Bag Attributes localKeyID: 01 00 00 00 friendlyName: TEST1811TEST Microsoft CSP Name: Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provi der Error outputting keys and certificates 7160:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe alg orithm:crypto\evp\evp_pbe.c:95:TYPE=1.2.840.113549.1.12.1.80 7160:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit err or:crypto\pkcs12\p12_decr.c:41: 7160:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt err or:crypto\pkcs12\p12_decr.c:94:
У меня к форумчанам вопрос,что и где я сделал неправильно? Я пришёл только к нескольким выводам: -или УЦ выпустил сертифкат с контейнером,который априори нельзя сконвертнуть в PEM (зашифрован или стоит некий признак,что контейнер нельзя конвертить); -или я что-то упустил в настройках openssl; -или полследняя версия openssl не может работать с ГОСТ-2012.
Сразу оговорюсь,что я параллельно пробывал широко разрекламированные на форумах (в том числе здеь https://habr.com/post/275039/ ) утилиты P12FromGostCSP (производитель ООО "Лисси-Софт") и privkey.exe (неизвестный производитель)
Прочитал много хвалебных слов про чудоутилиту, скачал P12FromGostCSP.exe и P12FromGostCSP_demo.exe c http://ftp.lissi.ru/Utils/P12FromGOSTCSP/ . Попробовал P12FromGostCSP.exe и на сколько я понял,но она с ГОСТ-2012 не работает в принципе(так как контейнер,выпущенный с использованием ГОСТ-2001, она подхватывает, а контейнер,выпущенный с использованием ГОСТ-2012, он на не воспримает).Утилита P12FromGostCSP_demo.exe подхватывает контейнер,выпущенный с использованием ГОСТ-2012,но выгрузка в файл возможна только в платной версии. Главное я не вычитал ни где,а какой файл *.pfx создаст: есть ли смысл её использовать,так как она может сгенерить файл,аналогичный КриптоПРО и с ним опять нельзя выполнять конвертацию.
Утилита privkey.exe у меня не заработала.
Отредактировано модератором 12 декабря 2018 г. 16:47:23(UTC)
| Причина: Не указана
|