Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

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

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

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

КомпонентОписание
manufacturerID производителя токена
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?pin-value=12345678

Если Если подключен только один Рутокен с единственной ключевой парой, для идентификации можно использовать только модель:

pkcs11:model=Rutoken%20ECP

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

Формат команды:

openssl genpkey -algorithm alg -pkeyopt opt:value [-pkeyopt opt:value]... -out filename.pem

Описание параметров:

ПараметрОписание
-algorithmАлгоритм шифрования
-pkeyopt
Параметры

Настройки алгоритма (размер ключа, тип эллиптической кривой, и т.д.). Задает для параметра алгоритма opt значение value.

Может быть использован несколько раз, если у алгоритма есть несколько изменяемых параметров. Например:

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3


-out

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

Чтобы сохранить файл в другой каталог, укажите в параметре -out  полный путь к этому каталогу, включая название файла:

-out /путь/к/файлу.pem


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

Пример:

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

Значения параметров:

ПараметрВозможные значения
-algorithm
  • gost2001;
  • gost2012_256;
  • gost2012_512
-pkeyopt

paramset:<value> 

Поддерживаемые значения value в зависимости от алгоритма:

  • gost2001A, B, C, XA, XB;
  • gost2012_256: A, B, C, XA, XB;
  • gost2012_512: A, B

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

...

openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp256r1 -out privatekey.pem 

Значения параметров:

ПараметрВозможные значения
-algorithm 

EC

-pkeyopt
 
  • ec_
param_enc:<encoding> —
  • param_enc:<encoding>  — определение параметров кривой. Может принимать значение named_curve (используется существующая кривая) или explicit (параметры кривой задаются вручную; не рекомендуется с точки зрения безопасности и совместимости).
    Значение encoding по умолчанию: named_curve.
  • ec_param_curve:<curve> название эллиптической кривой.
    Чтобы посмотреть список эллиптических кривых, поддерживаемых установленной версией OpenSSL, выполните команду:
    openssl ecparam -list_curves

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

...

ПараметрВозможные значения
--module

Для Windows:

путь/к/

Для Linux:

путь/к/librtpkcs11ecp.eso
--key-type

Для Рутокен ЭЦП 3.0 3110 и 3220:

  • EC:secp256r1;
  • EC:secp256k1.

Для Рутокен ЭЦП 3.0 3120:

  • EC:secp256r1;
  • EC:secp256k1;
  • EC:secp384r1;
  • EC:secp521r1.
--idНужна конвертация в ASCII?

...

ПараметрВозможные значения
--module

Для Windows:

/путь/к/

Для Linux:

/путь/к/librtpkcs11ecp.so
--key-type

Для Рутокен ЭЦП 2.0:

  • RSA:1024 (небезопасно);
  • RSA:2048.

Для Рутокен ЭЦП 3.0:

  • RSA:1024 (небезопасно);
  • RSA:2048;
  • RSA:4096.
--idНужна конвертация в ASCII?

...

Посмотреть записанные на токен объекты можно с помощью команды:

pkcs11-tool --module rtPKCS11ECP.dll -Ol

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

...

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

  • с помощью ключа в файле:

    openssl

    req

    -utf8

    -x509

    -key

    /путь/к/файлу/privatekey.pem

    -out

    cert.cer 

  • с помощью ключа на Рутокене:

    openssl

    req

    -utf8

    -x509

    -keyform

    engine

    -key

    "pkcs11:your_pkcs11_uri"

    -engine

    rtengine

    -out

    cert.cer

    -subj

    "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=devNN/CN=testuser/emailAddress=testuser@mail.com" 

Параметры сертификата:

ПараметрОписание

C

 

CountryName

Страна

ST

StateOrProvinceName

Регион или область

L

Locality

Населенный пункт (город, село, поселок и т.д.)

O

Organization

Название организации

OU

OrganizationalUnit

Название отдела в организации

CN

CommonName

Имя владельца сертификата

emailAddressПочтовый адрес владельца сертификата

Работа с подписью в формате CMS

Создание подписи

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

Для того, чтобы создать CMS-подпись с помощью предоставленного УЦ:

  1. Скачайте Рутокен SDK и распакуйте архив.
  2. Из распакованного архива скопируйте
  3. Скопируйте
  4. папку sdk\openssl\samples\tool\demoCA и конфигурационный файл openssl.cnf в папку с OpenSSL.
  5. Выполните команду:
    openssl ca -batch -in req.csr -out cert.cer

  6. Создайте CMS подпись: 
    • с помощью ключа в файле:
      openssl cms -sign -binary -nosmimecap -in data_to_sign -out signed_cms -outform PEM -inkey
      seckey
      privatekey.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 пакета.

Проверка подписи

...

Чтобы проверить подпись, выполните команду:

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.

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

Зашифрование

Info
titleШифрование на ключах с Рутокена

При расшифровании сообщения вырабатывается общий симметричный ключ, который непосредственно и используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на не извлекаемых закрытых ключах с опцией 'derive' в поле key usage. Для того чтобы указать эту опцию, при генерации ключа используйте флаг  --usage-derive. Например:


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

 

  openssl openssl cms -encrypt -binary -<alg> -in test_data -out encrypted_cms -outform PEM respondent.cer

...

  • с помощью ключа в файле:

    openssl cms -decrypt -binary -in encrypted_cms -inform PEM -recip respondent.cer -inkey privatekey.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

Работа с «сырыми» подписями

...

Подписать данные «сырой» подписью можно:

  • с помощью ключа в файле:

    openssl dgst -sign privatekey.pem -out file_to_sign.signature file_to_sign.txt

  • с помощью ключа на Рутокене:

    openssl dgst -keyform engine -sign "pkcs11:your_pkcs11_uri" -engine rtengine -out file_to_sign.signature file_to_sign.txt


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

...

  1. Получите открытый ключ из закрытого:

    openssl pkey -in privatekey.pem -pubout -out publickey.pem

  2. Проверьте подпись:
    • с помощью ключа в файле:

      openssl dgst -verify publickey.pem -signature signed_file.signature signed_file.txt

    • с помощью ключа на Рутокене:

      openssl dgst -keyform engine -verify "pkcs11:your_pkcs11_uri" -engine rtengine -signature signed_file.signature signed_file.txt

Запуск SSL/TLS сервера

Формат команды:

openssl s_server -key filename|uri [-keyform format] [-engine id] -cert infile -Verify int -CAfile file -accept val -WWW -purpose purpose -4 

Описание параметров:

ПараметрОписание
-key

Название файла или URI закрытого ключа.

Если параметр не задан, будет использован файл сертификата

-keyform

Формат файла закрытого ключа.

Значение по умолчанию: PEM

-engine

Модуль для работы с криптографическими алгоритмами. 

Задается, если задан параметр -keyform engine

-certПуть к сертификату
-VerifyГлубина проверки цепочки сертификатов
-CAfileПуть к доверенному сертификату
-accept

TCP-порт, который будет прослушиваться в ожидании запросов.

Значение по умолчанию: 4433

-WWWЭмуляция простого веб-сервера
-purpose

Назначение сертификата.

Возможные значения:

  • slclient;
  • sslserver;
  • nssslserver;
  • mimesign;
  • mimeencrypt;
  • crlsign;
  • ocsphelper;
  • timestampsign;
  • codesign;
  • any.
-4Использовать только IPv4

Примеры команд:

Code Block
languagepowershell
titleКлюч в файле
openssl s_server -key demoCA/private/cakey.pem -cert demoCA/cacert.pem -Verify 7 -CAfile demoCA/cacert.pem -accept 44330 -WWW -purpose any -4

...