Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Next »

Использование ключей на Рутокене

rtengine позволяет использовать ключи, расположенные на токене.

Ключевая пара идентифицируется с помощью pkcs11 uri.

Возможные компоненты идентификатора:

   manufacturer: ID производителя токена

   model: модель токена

   serial: серийный номер токена

   token: метка токена (поле "label")

   object: имя объекта (CKA_LABEL)

   id: идентификатор объекта (CKA_ID)


Пример идентификатора ключевой пары на токене:

pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=2adc8d87;object=my%20label;id=%aa%bb%cc%dd

Если подключен только один Рутокен с единственной ключевой парой:

pkcs11:model=Rutoken%20ECP

В зависимости от операции будет выбран открытый или закрытый ключ соответственно. Оба ключа пары должны иметь одинаковый идентификатор объекта и/или имя объекта.

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

openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out seckey.pem

Укажите алгоритм, используя опцию -algorithm.

Укажите параметры эллиптической кривой (парамсет) с помощью -pkeyopt.

Поддерживаются следующие значения алгоритмов и соответствующих им парамсетов:

   gost2001: A,B,C,XA,XB

   gost2012_256: A,B,C,XA,XB

   gost2012_512: A,B

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

Через OpenSSL пока не поддерживается. Для генерации на Рутокене используйте pkcs11-tool из состава OpenSC.

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

   pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen  --key-type GOSTR3410:A --id 3132

pin: PIN-код Рутокена

id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам. Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12".  
Есть удобный онлайн-сервис конвертации строки в ASCII-коды

GOSTR3410:A : ‘A’ - парамсет, может быть так же B или С

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

Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012 из нашего GitHub-а, пока не выпущен релиз OpenSC новее чем 0.19.0.
Или можно собирать утилиту из ветки master OpenSC взяв коммит 8cf1e6f

   pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:B --id 3132

pin: PIN-код Рутокена

id:  идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132’ в OpenSSL надо указывать "pkcs11:id=12". 
Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку.


GOSTR3410-2012-512:A : ‘A’ - парамсет, может быть так же B или С,

GOSTR3410-2012-256:B : ‘B’ - парамсет, может быть так же C или D

или

используйте веб-сервис "Центр регистрации Рутокен"

Для просмотра объектов на токене:

    pkcs11-tool.exe --module rtPKCS11ECP.dll -Ol

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

Используя ключ в файле:

openssl req -utf8 -new -key seckey.pem -out req.csr

Используя ключ на Рутокене:

openssl req -utf8 -new -keyform engine -key "pkcs11:your_pkcs11_uri" -engine rtengine -out req.csr

Формат параметра -key описан в разделе "Использование ключей на Рутокене"

В процессе работы команда попросит ввести PIN-код. После этого потребуется указать данные для сертификата:

  • State or Province []: Moscow

  • Locality []:  RU

  • Organization Name []: Aktiv Company

  • Organizational Unit Name []: development

  • Common Name []: tester

  • Email []: tester@rutoken.ru

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

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

Используя ключ в файле:

openssl req -utf8 -x509 -key seckey.pem -out cert.cer

Используя ключ на Рутокене:

openssl req -utf8 -x509 -keyform engine -key "pkcs11:your_pkcs11_uri" -engine rtengine -out cert.cer

Создание подписи в формате CMS

Для создания CMS подписи необходимо иметь сертификат. В тестовых целях в папке sdk\openssl\rtengine\samples\tool\ предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.

Скопируйте папке sdk\openssl\rtengine\samples\tool\demoCA и конфигурационный файл openssl.cnf в папку с OpenSSL и выполните:

openssl ca -batch -in req.csr -out cert.cer


Затем создайте CMS подпись используя ключ в файле:

openssl cms -sign -binary -nosmimecap -in data_to_sign -out signed_cms -outform PEM -inkey seckey.pem -signer cert.cer


Или используя ключ на Рутокене:

openssl cms -sign -binary -nosmimecap -in data_to_sign -out signed_cms -outform PEM -keyform engine -inkey "pkcs11:your_pkcs11_uri" -engine rtengine -signer cert.cer

 Используя -nodetach подписываемые данные включаются в состав CMS пакета — присоединенная подпись. Без этой опции подпись будет «отсоединенной».

 Используя -nocerts сертификат подписанта не включается в состав CMS пакета.

Проверка подписи в формате CMS

 openssl cms -verify -binary -in signed_cms -inform PEM -out verified_data -CAfile demoCA/cacert.pem -content data_to_sign

Файл, указанный в -CAfile, является доверенным сертификатом удостоверяющего

центра и используется для проверки сертификата подписанта.

В опцию -content передается файл с подписанными данными, если он не был включен в состав CMS пакета.

Если сертификат подписанта не был включен в CMS пакет (отсоединенная подпись), он указывается в опции -certfile.

«Сырая» подпись данных

 Используя ключ в файле:

openssl dgst -sign seckey.pem -out signature data_to_sign

 Используя ключ на Рутокене:

openssl dgst -keyform engine -sign "pkcs11:your_pkcs11_uri" -engine rtengine -out signature data_to_sign

 Алгоритм хеша будет зависеть от алгоритма ключа.

Проверка «сырой подписи»

 Получить открытый ключ из закрытого можно следующей командой:

   openssl pkey -in seckey.pem -pubout -out pubkey.pem

 Проверка используя ключ в файле:

   openssl dgst -verify pubkey.pem -signature signature data_to_sign

 Используя ключ на Рутокене:

   openssl dgst -keyform engine -verify "pkcs11:your_pkcs11_uri" -engine rtengine -signature signature test_data

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

   openssl cms -encrypt -binary -gost28147-paramset_a-cfb -in test_data -out encrypted_cms -outform PEM respondent.cer

respondent.cer: сертификат адресата, для которого шифруется сообщение.

gost28147-paramset_a-cfb: единственный доступный алгоритм, работает в режиме гаммирования с обратной связью с набором параметров А.

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

 Используя ключ в файле:

   openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -inkey seckey.pem -out decrypted_cms_data

 Используя ключ на Рутокене:

   openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -keyform engine -inkey "pkcs11:your_pkcs11_uri" -engine rtengine -out decrypted_cms_data

Запуск SSL/TLS сервера/клиента

Сервер, программный ключ:

openssl s_server -key demoCA/private/cakey.pem -cert demoCA/cacert.pem -Verify 7 -CAfile demoCA/cacert.pem -accept 44330 -WWW -purpose any -4

Сервер, аппаратный ключ:

openssl s_server -keyform engine -key "server_key_pkcs11_uri" -engine rtengine -cert demoCA/cacert.pem -Verify 7 -CAfile demoCA/cacert.pem -accept 44330 -WWW -purpose any -4

Клиент, программный ключ:

openssl s_client -host 127.0.0.1 -port 44330 -cert cert.cer -key seckey.pem

Клиент, аппаратный ключ:

openssl s_client -host 127.0.0.1 -port 44330 -cert cert.cer -keyform engine -key "client_key_pkcs11_uri" -engine rtengine

  • No labels