Page tree

Versions Compared

Key

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

...

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

КомпонентОписание
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 -out filename.pem

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

ПараметрОписание
-algorithmАлгоритм шифрования
-pkeyoptПараметры алгоритма (размер ключа, тип эллиптической кривой, и т.д.)
-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> — .
    Значение encoding по умолчанию: named_curve.
  • ec_param_curve:<curve> — .
    Чтобы посмотреть список эллиптических кривых, поддерживаемых установленной версией OpenSSL, выполните команду:
    openssl ecparam -list_curves

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

Пример:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out rsakey.pem

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

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

RSA

-pkeyopt 
  • rsa_keygen_bits:<numbits> — .
    Значение numbits по умолчанию: 2048
  • rsa_keygen_primes:<numprimes> — .
    Значение numprimes по умолчанию: 2

  • rsa_keygen_pubexp:<value> — .
    Значение value по умолчанию: 65537

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

...

Через OpenSSL генерация ключевой пары ГОСТ на Рутокене пока не поддерживается. Используйте для этого pkcs11-tool из состава OpenSC.

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

pkcs11-tool --module mod --login --pin pin --keypairgen --key-type specification --id id --usage-derive

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

ПараметрОписание
--moduleМодуль или библиотека PKCS #11, которая будет использована для генерации ключевой пары
--login, -lПараметр используется, чтобы потребовать аутентификацию на токене перед выполнением операции. Параметр --login не обязателен, если используется параметр --pin
--pin, -pPIN-код, который будет использован для подтверждения генерации ключевой пары. Использование параметра --pin автоматически включает параметр --login
--keypairgen, -kТип операции (генерация новой ключевой пары)
--key-typeТип и параметры алгоритма шифрования (размер ключа, параметры эллиптической кривой, и т.д.)
--id, -d

Откуда берётся ID? Или он задаётся пользователем самостоятельно? Зачем нужна часть про «использовать этот id через OpenSSL», если тут мы используем pkcs11-tool?

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

--usage-derive

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

Если шифрование сообщений на генерируемой ключевой паре не планируется, этот параметр можно не использовать. 

ГОСТ-2001

Пример:

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

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

ПараметрВозможные значения
--key-type
  • GOSTR3410:A;
  • GOSTR3410:B;
  • GOSTR3410:C
--idНужна ли конвертация в ASCII?

ГОСТ-2012

Tip

Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012, или используйте релиз OpenSC 0.20.0 или новее.

Пример:

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

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

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

Для алгоритма GOSTR3410-2012-256:

  • GOSTR3410-2012-256:B;
  • GOSTR3410-2012-256:C;
  • GOSTR3410-2012-256:D.

Для алгоритма GOSTR3410-2012-512:

  • GOSTR3410-2012-512:A;
  • GOSTR3410-2012-512:B;
  • GOSTR3410-2012-512:C.
--id

Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку.

Почему выше (и ниже) конвертация строки в коды, а тут кодов в строку? 



или

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

...

Code Block
pkcs11-tool --module /путь/к/librtpkcs11ecp.so --login --pin 12345678 --keypairgen --key-type EC:secp256r1 --id 3132 --usage-derive

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

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

Для Windows:


Для Linux:


--key-type

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

  • EC:secp256r1;
  • EC:secp256k1.

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

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

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

...

Code Block
pkcs11-tool --module /путь/к/librtpkcs11ecp.so --login --pin 12345678 --keypairgen --key-type RSA:2048 --id 3132 

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

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

Для Windows:


Для Linux:


--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 -new -key privatekey.pem -out req.csr
  • с помощью ключа на Рутокене:
    openssl req -utf8 -new -keyform engine -key "pkcs11:your_pkcs11_uri" -engine rtengine -out req.csr
    Tip

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

...

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

  • с помощью ключа в файле:
    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

...

Расшифровать данные можно:

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

    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

...

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

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

openssl s_client -key filename|uri [-keyform format] [-engine id] -cert filename-host hostname -port port

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

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

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

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

-keyform

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

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

-engine

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

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

-certПуть к сертификату
-hostАдрес сервера, с которым нужно установить соединение
-portПорт сервера, с которым нужно установить соединение

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

Code Block
languagepowershell
titleКлиент, ключ в файле
openssl s_client -key privatekey.pem -cert cert.cer -host 127.0.0.1 -port 44330

...