OpenSSL с двигателем ГОСТ
Я хочу использовать OpenSSL для создания private/public/(Certificate Signing Request) и подписать некоторые данные позже. Но я хочу использовать OpenSSL GOST engine.
Я загрузил OpenSSL 1.0.0 и изменил файл openssl.cfg:
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = ./gost.dll
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
Я могу сгенерировать закрытый ключ и CSR (строка с одиночной строкой):
openssl req -newkey gost2001 -pkeyopt paramset:A -passout pass:aofvlgzm \
-subj "/C=RU/ST=Moscow/L=Moscow/O=foo_bar/OU=foo_bar/CN=developer/ \
[email protected]" \
-new > certificate_signing_request.csr
Я получаю 2 файла:
- certificate_signing_request.csr
- privkey.pem
Я знаю, что могу сделать (печатает (незашифрованное) текстовое представление закрытых и открытых ключей):
openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -text
Я использую GOST вместо RSA, поэтому я не могу просто сделать:
openssl rsa -in privkey.pem -pubout -out pubkey.pem
Enter pass phrase for privkey.pem:
6132:error:0607907F:digital envelope routines:EVP_PKEY_get1_RSA:expecting an rsa key:.\crypto\evp\p_lib.c:288:
Мой вопрос: как я могу генерировать/получать открытый ключ (mabye из частного ключа или из csr) с помощью gost?
Я использую:
- Windows 7 Professional x64;
- OpenSSL 1.0.0;
- Двигатель Gost.
Спасибо за любую помощь.
Ответы
Ответ 1
Я решил свою проблему.
Пошаговое руководство для всех, кто хочет альтернативу КРИПТО-ПРО
Запрос подписи сертификата (CSR) + закрытый ключ
./openssl req -newkey gost2001 -pkeyopt paramset:A -passout pass:aofvlgzm -subj "/C=RU/ST=Moscow/L=Moscow/O=foo_bar/OU=foo_bar/CN=developer/[email protected]" -keyout private.key.pem -out csr.csr
Подписать CSR (csr.csr) с private.key.pem(!!! КОМАНДА АДМИНИСТРИРОВАТЬ ТОЛЬКО!!!)
if not admin: "невозможно записать" случайное состояние "
./openssl x509 -req -days 365 -in csr.csr -signkey private.key.pem -out crt.crt
Получить открытый ключ
./openssl x509 -inform pem -in crt.crt -pubkey -noout > public.key.pem
Получить GOST2001-md_gost94 hex
./openssl.exe dgst -hex -sign private.key.pem message.xml
Получить приложение MIME/x-pkcs7-signature
./openssl smime -sign -inkey private.key.pem -signer crt.crt -in message.xml