OpenSSL с ГОСТ движком - PullRequest
       32

OpenSSL с ГОСТ движком

10 голосов
/ 30 августа 2011

Я хочу использовать OpenSSL для генерации private / public / (запроса на подпись сертификата) и подписать некоторые данные позже. Но я хочу использовать OpenSSL GOST движок .

Я скачал 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/ \
           emailAddress=vany.egorov@gmail.com" \
    -new > certificate_signing_request.csr

Я получаю 2 файла:

  • certificate_signing_request.csr
  • privkey.pem

Я знаю, что могу сделать (печатает (незашифрованное) текстовое представление закрытых и открытых ключей):

    openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -text

Я использую ГОСТ вместо 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:

У меня такой вопрос: как я могу сгенерировать / получить открытый ключ (например, из закрытого ключа или из csr), используя гост? Я использую:

  • Windows 7 Professional x64;
  • OpenSSL 1.0.0;
  • Гостевой двигатель .

Спасибо за любую помощь.

1 Ответ

17 голосов
/ 31 августа 2011

Я решил свою проблему.

Пошаговое руководство для всех, кому нужна альтернатива КРИПТО-ПРО

Запрос на подпись сертификата (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/emailAddress=vany.egorov@gmail.com" -keyout private.key.pem -out csr.csr

Подпишите CSR (csr.csr) с private.key.pem (!!! ТОЛЬКО ADMIN COMMAND PROMT !!!)

если не администратор: "невозможно записать" случайное состояние ""

./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

Get GOST2001-md_gost94 hex

./openssl.exe dgst -hex -sign private.key.pem message.xml

Get MIME application / x-pkcs7-подпись

./openssl smime -sign -inkey private.key.pem -signer crt.crt -in message.xml

...