Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Генерация ключевой пары ГОСТ Р 34.10-2001

openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt key_id:50 -pkeyopt paramset:A -pkeyopt pin:12345678   
  • key_id - ID ключа на токене
  • paramset - используемые параметры эллиптической кривой:
    • A - набор параметров с OID 1.2.643.2.2.35.1;

    • B - набор параметров с OID 1.2.643.2.2.35.2;

    • C  - набор параметров с OID 1.2.643.2.2.35.3;

    • XA - набор параметров с OID 1.2.643.2.2.36.0;

    • XB - набор параметров с OID 1.2.643.2.2.36.1;

  • pin - PIN-код токена

Формирование запроса PKCS#10 

openssl req -engine pkcs11_gost -new -key 50 -keyform engine -out req.csr 
В процессе работы команда попросит ввести PIN-код. После этого потребуется указать данные для сертификата:
  • State or Province []: Moscow
  • Locality []:  RU
  • Organization Name []: Aktiv Company
  • Organizational Unit Name []: development
  • Common Name []: tester
  • Email []: tester@rutoken.ru

Набор вводимой информации при формировании запроса определяется конфигурационным файлом openssl.cfg.

Выпуск самоподписанного сертификата CA

Самоподписанный корневой сертификат нам нужен для того, чтобы выдать пользовательский сертификат по запросу, полученному ранее.

Сначала создадим ключ CA:

openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt key_id:1000 -pkeyopt paramset:A -pkeyopt pin:12345678

Затем выпустим самоподписанный сертификат:

openssl req -engine pkcs11_gost -x509 -new -key 1000 -keyform engine -out ca.crt 

Выпуск пользовательского сертификата по запросу

  • в папке установки OpenSSL/bin создадим папку demoCA
  • в папке demoCA создадим папку newcerts
  • в папке demoCA создадим пустой файл index.txt и файл serial (без расширения)
  • в файле serial напишем 01. Это позволит нам вести учет выданных сертификатов.

Затем выпустим сертификат:

openssl ca -engine pkcs11_gost -keyfile 1000 -keyform engine -cert ca.crt -in req.csr -out tester.crt

Выработка "присоединенной" подписи данных в различных форматах

в формате S/MIME:

openssl smime -engine pkcs11_gost -sign -in data.file -out data.sig -nodetach -binary -signer tester.crt -inkey 50 -keyform engine

в формате PKCS#7:

openssl smime -engine pkcs11_gost -sign -in  data.file -out data.sig -nodetach -binary -signer tester.crt -inkey 50 -keyform engine -outform PEM

в формате CMS:

openssl cms -engine pkcs11_gost -sign -in data.file -out data.sig -nodetach -binary -signer tester.crt -inkey 50 -keyform engine -outform PEM

Для того, чтобы подписать файл “отсоединенной” подписью уберите ключ -nodetach.

Проверка "присоединенной" подписи в различных форматах

в формате S/MIME:

openssl smime -engine pkcs11_gost -verify -in data.sig -inform SMIME -CAfile ca.crt -out data.file

в формате PKCS#7:

openssl smime -engine pkcs11_gost -verify -in data.sig -inform PEM -CAfile ca.crt -out data.file

в формате CMS:

openssl cms -engine pkcs11_gost -verify -in data.sig -inform PEM -CAfile ca.crt -out data.file

"Сырая" подпись данных по ГОСТ Р 34.10-2001

openssl dgst -engine pkcs11_gost -md_gost94 -sign 50 -keyform engine data.file 

Шифрование в формате CMS

При шифровании производится выработка эфемерной ключевой пары на токене, поэтому требуется авторизоваться на устройстве. Для этой цели в секцию конфигурационного файла:

[pkcs11_section]
engine_id = dynamic
dynamic_path = C:/openssl/engines/pkcs11_gost.dll
MODULE_PATH = C:/openssl/engines/rtPKCS11ECP.dll
PIN = 12345678
init = 0
default_algorithms = ALL
следует добавить опцию PIN, в которой указать PIN-код к устройству.

 

openssl smime -engine pkcs11_gost -encrypt -binary -gost89 -in data.file -out data.enc respondent_gost.crt

Здесь respondent_gost.crt - сертификат адресата, для которого шифруется сообщение.

Расшифрование на стороне адресата:

openssl smime -decrypt -engine gost -in data.enc -recip respondent_gost.crt -inkey respondent_gost.key -out data.file

  • Нет меток