В данной статье делается попытка ответить на вопрос: возможно ли использовать OpenSource библиотеки для работы с ГОСТовыми сертификатами?
Если коротко, то да.
Для проверки использовалась последняя на данный момент версия OpenSSL (1.0.1с), собранная из исходников с поддержкой gost engine
Для начала нужно установить КриптоПро CSP 3.6 R3, поскольку в нем реализована поддержка экспорта сертификатов в формате pfx. Эту часть работ нужно делать в операционной системе Windows. Не буду описывать подробно этот процесс, скажу лишь, что нужно сохранить приватный ключ в формате CryptoPro на флэшку и импортировать его в хранилище "Реестр". Выгрузив сертификат в файл, например store.pfx (включая приватный ключ), можно вывести приватный ключ в stdout командой
Если коротко, то да.
Для проверки использовалась последняя на данный момент версия OpenSSL (1.0.1с), собранная из исходников с поддержкой gost engine
Для начала нужно установить КриптоПро CSP 3.6 R3, поскольку в нем реализована поддержка экспорта сертификатов в формате pfx. Эту часть работ нужно делать в операционной системе Windows. Не буду описывать подробно этот процесс, скажу лишь, что нужно сохранить приватный ключ в формате CryptoPro на флэшку и импортировать его в хранилище "Реестр". Выгрузив сертификат в файл, например store.pfx (включая приватный ключ), можно вывести приватный ключ в stdout командой
/usr/local/ssl/bin/openssl pkcs12 -info -engine gost -nodes -in ~/store.pfx
- -info вывести информацию о содержимом файла в формате pkcs12 (.pfx)
- -engine использовать указанный криптографический модуль
- -nodes не нужно шифровать приватный ключ
- -in входной файл
Enter Import Password:
MAC Iteration 2000
MAC verified OK
PKCS7 Data
Shrouded Keybag: undefined, Iteration 2000
Bag Attributes
Microsoft Local Key set: <No Values>
localKeyID: 01 00 00 00
friendlyName: REGISTRY\\1ba6dcf8-b953-4774-8a9e-de98de071f24
Microsoft CSP Name: Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Error outputting keys and certificates
140669637789344:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:evp_pbe.c:167:TYPE=1.2.840.113549.1.12.1.80
140669637789344:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:83:
140669637789344:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:130:
MAC Iteration 2000
MAC verified OK
PKCS7 Data
Shrouded Keybag: undefined, Iteration 2000
Bag Attributes
Microsoft Local Key set: <No Values>
localKeyID: 01 00 00 00
friendlyName: REGISTRY\\1ba6dcf8-b953-4774-8a9e-de98de071f24
Microsoft CSP Name: Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Error outputting keys and certificates
140669637789344:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:evp_pbe.c:167:TYPE=1.2.840.113549.1.12.1.80
140669637789344:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:83:
140669637789344:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:130:
То это означает, что вам потребуется другое средство для получения pfx файла, утилитка P12FromGostCSP.exe
Enter Import Password:
MAC Iteration 2048
Mac verify error: invalid password?
140572666472096:error:2306B076:PKCS12 routines:PKCS12_gen_mac:unknown digest algorithm:p12_mutl.c:88:
140572666472096:error:2307E06D:PKCS12 routines:PKCS12_verify_mac:mac generation error:p12_mutl.c:122:
то скорее всего в вашем openssl нет поддержки ГОСТовых алгоритмов либо вы используете не ту копию openssl.
Если все прошло без ошибок, то в консоли вы получите приватный ключ и сертификат. Скопировав выведенный в консоль приватный ключ (вместе со словами -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY-----) в отдельный файл private.key мы сможем с его помощью создавать ЭЦП.
Команда для генерации примерно следующая:
К сожалению, Bouncy Castle (версии 1.46), хоть в нем и декларируется поддержка ГОСТовых алгоритмов, не может разобрать формат приватного ключа, так что использовать его для генерации ЭЦП на данный момент не представляется возможным.
UPD:
Bouncy Castle 1.55 уже умеет работать с такими приватными ключами
Enter Import Password:
MAC Iteration 2048
Mac verify error: invalid password?
140572666472096:error:2306B076:PKCS12 routines:PKCS12_gen_mac:unknown digest algorithm:p12_mutl.c:88:
140572666472096:error:2307E06D:PKCS12 routines:PKCS12_verify_mac:mac generation error:p12_mutl.c:122:
то скорее всего в вашем openssl нет поддержки ГОСТовых алгоритмов либо вы используете не ту копию openssl.
Если все прошло без ошибок, то в консоли вы получите приватный ключ и сертификат. Скопировав выведенный в консоль приватный ключ (вместе со словами -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY-----) в отдельный файл private.key мы сможем с его помощью создавать ЭЦП.
Команда для генерации примерно следующая:
/usr/local/ssl/bin/openssl cms -sign -inkey ~/private.key -in ~/file.txt -CAfile ~/CA.cer -signer ~/client.cer -engine gost -out ~/test.sign -outform DER -noattr -binary
- -sign генерация подписи
- -inkey путь к приватному ключу
- -in подписываемый файл
- -CAfile файл УЦ
- -signer файл с сертификатом, которым осуществляется подпись
- -engine использовать указанный криптографический модуль
- -out файл, в который будет записана ЭЦП
- -outform формат подписи
- -noattr не добавлять дополнительных аттрибутов в подпись
- -binary считать подписываемый файл массивом байт, а не текстом
К сожалению, Bouncy Castle (версии 1.46), хоть в нем и декларируется поддержка ГОСТовых алгоритмов, не может разобрать формат приватного ключа, так что использовать его для генерации ЭЦП на данный момент не представляется возможным.
UPD:
Bouncy Castle 1.55 уже умеет работать с такими приватными ключами
На bouncycastle 1.47 проверяли?
ОтветитьУдалитьНет, не проверял.
Удалитьна 1.55 уже работает
Удалить2012 год а сталкиваюсь с такими же проблемами)
ОтветитьУдалитьВ демо версии P12FromGostCSP.exe не хочет экспортировать контейнеры КриптоПРО. Не очень понятно стоит ли покупать ради этого, есть альтернативы? Особенно пугает фраза "Экспорт возможен только для контейнеров с разрешённой операцией экспорта (флаг CRYPT_EXPORT)" – не нашел где посмотреть наличие этого флага и возможность влиять на него (
Не подскажите, есть ли альтернативы?
Поищите старую версию - раньше она была бесплатной и все экспортировала без проблем. Видимо решили немного подзаработать, их право. По идее можно самому попробовать разобрать криптопрошный приватный ключ, весь затык в этом (если не требуется сертификация решения). Например для их казахского аналога - TumarCsp ключ разбирается довольно просто.
УдалитьБлагодарю, старую версию нашел, но она не экспортирует контейнеры Crypto CSP 4+. После выбора контейнера, который нужно экспортировать, выходит без каких либо результатов работы.
УдалитьКакие еще есть варианты? Я не против и купить утилиту экспорта, но натыкаюсь на людей которым она не помогла :( Хочу понять какой у меня случай
https://ibb.co/fRxQaA вот после этого диалога файла не появляется :)
УдалитьДобрый день. Утилита P12FromGostCSP.exe в случае контейнера CryptoPro 4+ и GOST2012 для использования в Bouncy Castle 1.60 не помогла. Видимо, приватный ключ некорректно разбирается, что при дешифровке приводит к ошибке mac mismatch. Общался с поддержкой разработчика утилиты, но решить проблему, к сожалению, не удалось. Буду очень признателен, если поделитесь соображениями.
Удалитьopenssl pkcs12 -in xxx.pfx -out xxx.pem -nodes -clcerts -nomacver
УдалитьДанной командой приватный ключ экспортируется без проблем. Ошибка "mac mismatch" возникает именно на этапе дешифрации. Поэтому тут 2 варианта: либо P12FromGostCSP некорректно формирует контейнер p12 для ГОСТ-2012, либо есть проблема в BC. Последние раз тестировал на версии 1.61 - ошибка осталась.
Удалить-nomacver напиши
ОтветитьУдалить