В данной статье описаны следующие сценарии использования Рутокена с OpenSSL:
Для использования ключей с токена необходимо специальным образом указывать идентификатор ключа. Подробнее этот идентификатор описан в разделе Использование ключей на Рутокене.
Перед тем, как приступить к выполнению описанных ниже сценариев, установите и настройте OpenSSL и rtengine:
Для генерации ключевых пар на токене также понадобится pkcs11-tool из состава OpenSC.
rtengine
позволяет использовать ключи, расположенные на токене. В зависимости от операции будет выбран открытый или закрытый ключ соответственно.
Оба ключа пары должны иметь одинаковый идентификатор объекта и/или имя объекта. Ключевая пара идентифицируется с помощью pkcs11 uri.
Этот идентификатор соответствует аргументу |
Возможные компоненты идентификатора пути:
Компонент | Описание | |
---|---|---|
manufacturer | ID производителя токена | |
model | Модель токена | |
serial | Серийный номер токена | |
token | Метка токена( поле "label") | |
object | Имя объекта(CKA_LABEL) | |
id | Идентификатор объекта
|
Пример идентификатора ключевой пары на токене:
|
Если подключен только один Рутокен с единственной ключевой парой, для идентификации можно использовать только модель:
pkcs11:model=Rutoken%20ECP |
Формат команды:
|
Описание параметров:
Параметр | Описание | |
---|---|---|
‑algorithm | Алгоритм шифрования | |
‑pkeyopt | Настройки алгоритма (размер ключа, тип эллиптической кривой, и т.д.). Задает для параметра алгоритма Может быть использован несколько раз, если у алгоритма есть несколько изменяемых параметров. Например:
| |
‑out | Название файла, в который будет записана ключевая пара. По умолчанию создается в том же каталоге, откуда была вызвана команда. Чтобы сохранить файл в другой каталог, укажите в параметре
|
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
‑algorithm |
|
‑pkeyopt |
Параметры кривых, соответствующие значениям, описаны в Приложении 1. |
Пример:
|
Значения параметров:
Параметр | Возможные значения | |
---|---|---|
‑algorithm |
| |
‑pkeyopt |
|
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
‑algorithm |
|
‑pkeyopt |
|
Через 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, ‑‑p | PIN‑код, который будет использован для подтверждения генерации ключевой пары. Использование параметра ‑‑pin автоматически включает параметр ‑‑login | |
‑‑keypairgen, ‑k | Тип операции (генерация новой ключевой пары) | |
‑‑key‑type | Тип и параметры алгоритма шифрования (размер ключа, параметры эллиптической кривой, и т.д.). | |
‑‑id, ‑d | Идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
| |
‑‑usage‑derive | Параметр указывает на то, что на сгенерированном ключе можно вырабатывать общий симметричный ключ, который может использоваться, например, для расшифрования CMS-сообщений. Если шифрование сообщений на генерируемой ключевой паре не планируется, этот параметр можно не использовать. |
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
‑‑module | Для Windows:
Для Linux:
|
‑‑key‑type |
Более подробно значения описаны в Приложении 1. |
Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012 или используйте релиз OpenSC 0.20.0 или новее. |
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
‑‑module | Для Windows:
Для Linux:
|
‑‑key‑type | Для алгоритма
Для алгоритма
Более подробно значения описаны в Приложении 1. |
Пример:
|
Значения параметров:
Параметр | Возможные значения | ||
---|---|---|---|
‑‑module | Для Windows:
Для Linux:
| ||
‑‑key‑type | Для Рутокен ЭЦП 3.0 3110 и 3220:
Для Рутокен ЭЦП 3.0 3120:
|
Пример:
|
Значения параметров:
Параметр | Возможные значения | ||
---|---|---|---|
‑‑module | Для Windows:
Для Linux:
| ||
‑‑key‑type |
Для Рутокен ЭЦП 2.0:
Для Рутокен ЭЦП 3.0:
|
Посмотреть записанные на токен объекты можно с помощью команды:
|
Сформировать запрос можно:
|
|
В процессе работы команда попросит ввести PIN-код. После этого потребуется указать данные для сертификата.
Набор вводимой информации при формировании запроса определяется конфигурационным файлом openssl.cnf
. По умолчанию нужно заполнить следующие поля:
Поле | Описание |
---|---|
| CountryName Страна |
ST | StateOrProvinceName Регион или область |
L | Locality Населенный пункт (город, село, поселок и т.д.) |
O | Organization Название организации |
OU | OrganizationalUnit Название отдела в организации |
CN | CommonName Имя владельца сертификата |
emailAddress | Почтовый адрес владельца сертификата |
Самоподписанный сертификат можно выпустить:
|
|
Подробнее параметры сертификата описаны в предыдущем разделе.
По умолчанию команда
|
Для создания CMS-подписи необходимо иметь сертификат. В тестовых целях в Рутокен SDK предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
Для того, чтобы создать CMS-подпись с помощью предоставленного УЦ:
/sdk/openssl/samples/tool/demoCA
и конфигурационный файл openssl.cnf
в папку с OpenSSL.openssl ca ‑batch ‑in req.csr ‑out cert.cer |
openssl cms ‑sign ‑binary ‑nosmimecap ‑in data_to_sign ‑out signed_cms ‑outform PEM ‑inkey 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 |
Чтобы проверить подпись, выполните команду:
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 cms ‑encrypt ‑binary ‑<cipher> ‑in data_to_encrypt ‑out encrypted_cms ‑outform DER|PEM|SMIME respondent.cer |
Описание параметров:
Параметр | Описание |
---|---|
‑encrypt | Тип операции (зашифрование) |
‑binary | По умолчанию, входное сообщение конвертируется в канонический формат, который использует CR и LF в качестве знака перевода строки (в соответствии со по спецификацией S/MIME). Параметр |
‑<cipher> | Алгоритм шифрования. Возможные значения зависят от типа ключа. Для ключей ГОСТ и rtengine версии 0.7:
Для ключей ГОСТ и rtengine версии 0.7 и выше:
Для RSA и ECDSA ключей:
|
‑in | Входное сообщение, которое нужно зашифровать |
‑out | Название файла, в который будет сохранено зашифрованное сообщение |
‑outform | Формат CMS-структуры. Значение по умолчанию: SMIME |
respondent.cer | Cертификат адресата, для которого шифруется сообщение |
Расшифровать данные можно:
|
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 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 | Модуль для работы с криптографическими алгоритмами. Задается, если задан параметр |
‑cert | Путь к сертификату |
‑Verify | Глубина проверки цепочки сертификатов |
‑CAfile | Путь к доверенному сертификату |
‑accept | TCP-порт, который будет прослушиваться в ожидании запросов. Значение по умолчанию: 4433 |
‑WWW | Эмуляция простого веб-сервера |
‑purpose | Назначение сертификата. Возможные значения:
|
‑4 | Использовать только IPv4 |
Примеры команд:
Ключ в файле |
---|
|
Ключ на токене |
---|
|
Формат команды:
openssl s_client -key filename|uri [‑keyform format] [‑engine id] ‑cert filename ‑host hostname ‑port port |
Описание параметров:
Параметр | Описание |
---|---|
‑key | Название файла или URI закрытого ключа. Если параметр не задан, будет использован файл сертификата |
‑keyform | Формат файла закрытого ключа. Значение по умолчанию: PEM |
‑engine | Модуль для работы с криптографическими алгоритмами. Задается, если задан параметр |
‑cert | Путь к сертификату |
‑host | Адрес сервера, с которым нужно установить соединение |
‑port | Порт сервера, с которым нужно установить соединение |
Примеры команд:
Ключ в файле |
---|
|
Ключ на токене |
---|
|
ГОСТ 34.10-2001 | ||
---|---|---|
Алгоритм | OID парамсета | Допустимое значение аргумента |
| 1.2.643.2.2.35.1 |
|
1.2.643.2.2.35.2 |
| |
1.2.643.2.2.35.3 |
| |
1.2.643.2.2.36.0 |
| |
1.2.643.2.2.36.1 |
| |
ГОСТ 34.10-2012-256 | ||
Алгоритм | OID парамсета | Допустимое значение аргумента |
| 1.2.643.7.1.2.1.1.1 |
|
1.2.643.7.1.2.1.1.2 |
| |
1.2.643.7.1.2.1.1.3 |
| |
1.2.643.7.1.2.1.1.4 |
| |
1.2.643.2.2.35.1 | id-GostR3410-2001-CryptoPro-A-ParamSet | |
1.2.643.2.2.35.2 | id-GostR3410-2001-CryptoPro-B-ParamSet | |
1.2.643.2.2.35.3 | id-GostR3410-2001-CryptoPro-C-ParamSet | |
1.2.643.2.2.36.0 | id-GostR3410-2001-CryptoPro-XchA-ParamSet | |
1.2.643.2.2.36.1 | id-GostR3410-2001-CryptoPro-XchB-ParamSet | |
ГОСТ 34.10-2012-512 | ||
Алгоритм | OID парамсета | Допустимое значение аргумента |
| 1.2.643.7.1.2.1.2.1 |
|
1.2.643.7.1.2.1.2.2 |
| |
1.2.643.7.1.2.1.2.3 |
|
ГОСТ 34.10-2001 | |||
---|---|---|---|
Алгоритм | OID парамсета | Допустимое значение аргумента | Название парамсета |
GOSTR3410-2001 | 1.2.643.2.2.35.1 | A | id-GostR3410-2001-CryptoPro-A-ParamSet |
1.2.643.2.2.35.2 | B | id-GostR3410-2001-CryptoPro-B-ParamSet | |
1.2.643.2.2.35.3 | C | id-GostR3410-2001-CryptoPro-C-ParamSet | |
ГОСТ 34.10-2012-256 | |||
Алгоритм | OID парамсета | Допустимое значение аргумента | Название парамсета |
| 1.2.643.7.1.2.1.1.2 | B | id-tc26-gost-3410-12-256-paramSetB |
1.2.643.7.1.2.1.1.3 | C | id-tc26-gost-3410-12-256-paramSetC | |
1.2.643.7.1.2.1.1.4 | D | id-tc26-gost-3410-12-256-paramSetD | |
ГОСТ 34.10-2012-512 | |||
Алгоритм | OID парамсета | Допустимое значение аргумента | Название парамсета |
| 1.2.643.7.1.2.1.2.1 | A | id-tc26-gost-3410-12-512-paramSetA |
1.2.643.7.1.2.1.2.2 | B | id-tc26-gost-3410-12-512-paramSetB |