Table of Contents |
---|
Общая информация
В данной статье описаны следующие сценарии использования Рутокена с OpenSSL:
- генерация ключевой пары в файл с помощью алгоритмов ГОСТ, ECDSA, RSA;
- генерация ключевой пары на токене с помощью алгоритмов ГОСТ, ECDSA, RSA;
- просмотр записанных на токен объектов;
- формирование запроса PKCS #10;
- выпуск самоподписанного сертификата по запросу;
- зашифрование и расшифрование в формате CMS;
- подпись «сырой» подписью;
- проверка «сырой» подписи;
- запуск SSL/TLS клиента/сервера.
Для использования ключей с токена необходимо специальным образом указывать идентификатор ключа. Подробнее этот идентификатор описан в разделе Использование ключей на Рутокене.
Начало работы
Для выполнения описанных ниже сценариев понадобятся OpenSSL 3.0 и pkcs11-tool из состава OpenSC версии 0.25.0 или выше. pkcs11-tool используется для генерации ключевых пар на токене.
Перед тем, как приступить к работе, настройте OpenSSL и rtengine:
- Установка и настройка OpenSSL для работы с rtengine 1.4.0 и новее;
- Установка и настройка OpenSSL для работы с rtengine 0.7.x.
Использование ключей на Рутокене Anchor on-token on-token
on-token | |
on-token |
rtengine
позволяет использовать ключи, расположенные на токене. В зависимости от операции будет выбран открытый или закрытый ключ соответственно.
Оба ключа пары должны иметь одинаковый идентификатор объекта и/или имя объекта. Ключевая пара идентифицируется с помощью pkcs11 uri.
Tip |
---|
Этот идентификатор соответствует аргументу |
Возможные компоненты идентификатора пути:
Компонент | Описание | ||
---|---|---|---|
manufacturer | ID производителя токена | ||
model | Модель токена | ||
serial | Серийный номер токена | ||
token | Метка токена( поле "label") | ||
object | Имя объекта(CKA_LABEL) | ||
id | Идентификатор объекта
|
Пример идентификатора ключевой пары на токене:
|
Если подключен только один Рутокен с единственной ключевой парой, для идентификации можно использовать только модель:
pkcs11:model=Rutoken%20ECP |
Генерация ключевой пары в файл
Формат команды:
|
Описание параметров:
Параметр | Описание | |
---|---|---|
‑algorithm | Алгоритм шифрования | |
-pkeyopt | Настройки алгоритма (размер ключа, тип эллиптической кривой, и т.д.). Задает для параметра алгоритма Может быть использован несколько раз, если у алгоритма есть несколько изменяемых параметров. Например:
| |
-out | Название файла, в который будет записана ключевая пара. По умолчанию создается в том же каталоге, откуда была вызвана команда. Чтобы сохранить файл в другой каталог, укажите в параметре
|
Генерация ключевой пары ГОСТ в файл
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
‑algorithm |
|
-pkeyopt |
Параметры кривых, соответствующие значениям, описаны в Приложении 1. |
Генерация ключевой пары ECDSA в файл
Пример:
|
Значения параметров:
Параметр | Возможные значения | |
---|---|---|
‑algorithm |
| |
-pkeyopt |
|
Генерация ключевой пары RSA в файл
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
‑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-сообщений. Если шифрование сообщений на генерируемой ключевой паре не планируется, этот параметр можно не использовать. |
ГОСТ-2001
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
--module | Для Windows:
Для Linux:
|
--key-type |
Более подробно значения описаны в Приложении 1. |
ГОСТ-2012
Tip |
---|
Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012 или используйте релиз OpenSC 0.20.0 или новее. |
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
--module | Для Windows:
Для Linux:
|
--key-type | Для алгоритма
Для алгоритма
Более подробно значения описаны в Приложении 1. |
Генерация ключевой пары ECDSA
Пример:
|
Значения параметров:
Параметр | Возможные значения | ||
---|---|---|---|
--module | Для Windows:
Для Linux:
| ||
--key-type | Для Рутокен ЭЦП 3.0 3110 и 3220:
Для Рутокен ЭЦП 3.0 3120:
|
Генерация ключевой пары RSA
Пример:
|
Значения параметров:
Параметр | Возможные значения | ||
---|---|---|---|
--module | Для Windows:
Для Linux:
| ||
--key-type |
Для Рутокен ЭЦП 2.0:
Для Рутокен ЭЦП 3.0:
|
Просмотр объектов на токене
Посмотреть записанные на токен объекты можно с помощью команды:
|
Формирование запроса 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
В процессе работы команда попросит ввести PIN-код. После этого потребуется указать данные для сертификата.
Набор вводимой информации при формировании запроса определяется конфигурационным файлом openssl.cnf
. По умолчанию нужно заполнить следующие поля: Anchor cert cert
Поле | Описание |
---|---|
| CountryName Страна |
ST | StateOrProvinceName Регион или область |
L | Locality Населенный пункт (город, село, поселок и т.д.) |
O | Organization Название организации |
OU | OrganizationalUnit Название отдела в организации |
CN | CommonName Имя владельца сертификата |
emailAddress | Почтовый адрес владельца сертификата |
Выпуск самоподписанного сертификата по запросу
Самоподписанный сертификат можно выпустить:
- с помощью ключа в файле:
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=<страна>/ST=<регион>/L=<населенный_пункт>/O=<организация>/OU=<отдел>/CN=<ФИО>/emailAddress=<email>"
Подробнее параметры сертификата описаны в предыдущем разделе.
Работа с подписью в формате CMS
Создание подписи
Tip |
---|
По умолчанию команда
|
Для создания CMS-подписи необходимо иметь сертификат. В тестовых целях в Рутокен SDK предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
Для того, чтобы создать CMS-подпись с помощью предоставленного УЦ:
- Скачайте Рутокен SDK и распакуйте архив.
- Из распакованного архива скопируйте папку
/sdk/openssl/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 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.
Шифрование в формате CMS
Зашифрование
Info | ||
---|---|---|
| ||
При расшифровании сообщения вырабатывается общий симметричный ключ. Этот же ключ используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на неизвлекаемых закрытых ключах с опцией
|
Формат команды:
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 -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.sig file_to_sign.txt
- с помощью ключа на Рутокене:Алгоритм хеша будет зависеть от алгоритма ключа.
openssl dgst -keyform engine -sign "pkcs11:your_pkcs11_uri" -engine rtengine -out file_to_sign.sig file_to_sign.txt
Проверка «сырой» подписи
- Получите открытый ключ из закрытого:
openssl pkey -in privatekey.pem -pubout -out publickey.pem
- Проверьте подпись:
- с помощью ключа в файле:
openssl dgst -verify publickey.pem -signature signed_file.sig signed_file.txt
- с помощью ключа на Рутокене:
openssl dgst -keyform engine -verify "pkcs11:your_pkcs11_uri" -engine rtengine -signature signed_file.sig 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 | Модуль для работы с криптографическими алгоритмами. Задается, если задан параметр |
-cert | Путь к сертификату |
-Verify | Глубина проверки цепочки сертификатов |
-CAfile | Путь к доверенному сертификату |
-accept | TCP-порт, который будет прослушиваться в ожидании запросов. Значение по умолчанию: 4433 |
-WWW | Эмуляция простого веб-сервера |
-purpose | Назначение сертификата. Возможные значения:
|
-4 | Использовать только IPv4 |
Примеры команд:
Ключ в файле |
---|
|
Ключ на токене |
---|
|
Запуск SSL/TLS клиента
Формат команды:
openssl s_client -key filename|uri [-keyform format] [-engine id] -cert filename -host hostname -port port |
Описание параметров:
Параметр | Описание |
---|---|
-key | Название файла или URI закрытого ключа. Если параметр не задан, будет использован файл сертификата |
-keyform | Формат файла закрытого ключа. Значение по умолчанию: PEM |
-engine | Модуль для работы с криптографическими алгоритмами. Задается, если задан параметр |
-cert | Путь к сертификату |
-host | Адрес сервера, с которым нужно установить соединение |
-port | Порт сервера, с которым нужно установить соединение |
Примеры команд:
Ключ в файле |
---|
|
Ключ на токене |
---|
|
Приложение 1. Парамсеты ГОСТ в OpenSSL и pkcs11-tool Anchor gost gost
gost | |
gost |
Таблица значений -pkeyopt для OpenSSL
ГОСТ 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 |
|
Таблица значений --key-type для pkcs11-tool
ГОСТ 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.1 | A | id-tc26-gost-3410-12-256-paramSetA
| ||
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 | |||
1.2.643.7.1.2.1.2.3 | C | id-tc26-gost-3410-12-512-paramSetC
|
Использование ключей на Рутокене
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?pin-value=12345678
Если подключен только один Рутокен с единственной ключевой парой:
...
В зависимости от операции будет выбран открытый или закрытый ключ соответственно. Оба ключа пары должны иметь одинаковый идентификатор объекта и/или имя объекта.
Генерация ключевой пары ГОСТ в файл
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
Генерация ключевой пары ECDSA в файл
openssl genpkey -algorithm EC -out seckey.pem -pkeyopt ec_paramgen_curve:prime256v1
Укажите алгоритм, используя опцию -algorithm.
Укажите параметры эллиптической кривой (парамсет) с помощью -pkeyopt.
Чтобы посмотреть список доступных эллиптических кривых, поддерживаемых вашей версией OpenSSLopenssl ecparam -list_curves
Генерация ключевой пары RSA в файл
openssl genpkey -algorithm RSA -out rsakey.pem -pkeyopt rsa_keygen_bits:2048
Укажите алгоритм, используя опцию -algorithm.
Укажите параметры эллиптической кривой (парамсет) с помощью -pkeyopt.
Генерация ключевой пары ГОСТ на Рутокене
Через OpenSSL пока не поддерживается. Для генерации на Рутокене используйте pkcs11-tool из состава OpenSC.
Генерация ключевой пары ГОСТ-2001 на Рутокене
pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen --key-type GOSTR3410:A --id 3132 --usage-derive
pin
: PIN-код Рутокенаid
: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам. Например: для ‘--id 3132
’ в OpenSSL надо указывать "pkcs11:id=12
".
Есть удобный онлайн-сервис конвертации строки в ASCII-коды
usage-derive
: флаг указывающей, что на сгенерированном ключе можно вырабатывать общий симметричный ключ, который может использоваться, например, для расшифрования cms сообщений.
Если вы не планируйте шифровать сообщения на генерируемой ключевой паре, то этот флаг можно убрать.
...
Генерация ключевой пары ГОСТ-2012 на Рутокене
Info |
---|
Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012, или используйте релиз OpenSC 0.20.0 или новее |
pkcs11-tool.exe --module rtPKCS11ECP.dll --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:B --id 3132 --usage-derive
pin
: PIN-код Рутокена
id
: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам.
Например: для ‘--id 3132
’ в OpenSSL надо указывать "pkcs11:id=12
".
Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку.
usage-derive
: флаг указывающей, что на сгенерированном ключе можно вырабатывать общий симметричный ключ, который может использоваться, например, для расшифрования cms сообщений.
Если вы не планируйте шифровать сообщения на генерируемой ключевой паре, то этот флаг можно убрать.
GOSTR3410-2012-512:A
: ‘A’ - парамсет, может быть так же B или С,
GOSTR3410-2012-256:B
: ‘B’ - парамсет, может быть так же C или D
или
...
Для просмотра объектов на токене:
pkcs11-tool.exe --module rtPKCS11ECP.dll -Ol
Генерация ключевой пары ECDSA на Рутокене
Генерация ключевой пары ECDSA на Рутокене
pkcs11-tool --module /path/to/librtpkcs11ecp.so --keypairgen --key-type EC:prime256v1 -l --id 3132 --usage-derive
pin
: PIN-код Рутокенаid
: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам. Например: для ‘--id 3132
’ в OpenSSL надо указывать "pkcs11:id=12
".
Есть удобный онлайн-сервис конвертации строки в ASCII-коды
Генерация ключевой пары RSA на Рутокене
Генерация ключевой пары RSA на Рутокене
pkcs11-tool --module /path/to/librtpkcs11ecp.so --keypairgen --key-type RSA:2048 -l --id 3132
pin
: PIN-код Рутокенаid
: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.
Чтобы использовать этот id через OpenSSL надо использовать символы, соответствующие этим кодам. Например: для ‘--id 3132
’ в OpenSSL надо указывать "pkcs11:id=12
".
Есть удобный онлайн-сервис конвертации строки в ASCII-коды
Формирование запроса 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 -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=devNN/CN=testuser/emailAddress=testuser@mail.com"
Создание подписи в формате CMS
Для создания CMS подписи необходимо иметь сертификат. В тестовых целях в папке sdk\openssl\samples\tool\
предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
Скопируйте папку 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 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
...
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 cms -encrypt -binary -<gost28147-xxx-alg> -in test_data -out encrypted_cms -outform PEM respondent.cer
respondent.cer:
сертификат адресата, для которого шифруется сообщение.
Где gost28147-xxx-alg:
gost28147-paramset_a-cfb (для rtengine 0.7):
алгоритм, работает в режиме гаммирования с обратной связью с набором параметров А.
...
Расшифрование на стороне адресата:
Используя ключ в файле:
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 "pkcs11: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
Клиент, ключ на токене:
...