Status | ||||||
---|---|---|---|---|---|---|
|
Table of Contents |
---|
Общая информация
В данной статье описаны следующие сценарии использования Рутокена с OpenSSL:
...
Для использования ключей с токена необходимо специальным образом указывать идентификатор ключа. Подробнее этот идентификатор описан в разделе Использование ключей на Рутокене.
Начало работы
Для выполнения описанных ниже сценариев понадобятся OpenSSL 3.0 и pkcs11-tool из состава OpenSC версии 0.25.0 или выше. pkcs11-tool используется для генерации ключевых пар на токене.
Перед тем, как приступить к выполнению описанных ниже сценариев, установите и работе, настройте OpenSSL и rtengine:
- Установка и настройка OpenSSL для работы с rtengine 1.4.0 и новее;
- Установка и настройка OpenSSL для работы с rtengine 0.7.x.
Для генерации ключевых пар на токене также понадобится pkcs11-tool из состава OpenSC.
...
Использование ключей на Рутокене
Anchor on-token on-token
on-token | |
on-token |
rtengine
позволяет использовать ключи, расположенные на токене. В зависимости от операции будет выбран открытый или закрытый ключ соответственно.
...
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 --login --pin pin --keypairgen --key-type specification --id id --usage-derive |
Описание параметров:
Параметр | Описание |
---|
--module | Модуль или библиотека PKCS #11, которая будет использована для генерации ключевой пары |
--login, |
-l | Параметр используется, чтобы потребовать аутентификацию на токене перед выполнением операции. Параметр |
‑‑login
--login не обязателен, если используется параметр |
‑‑pin
‑‑ --pin |
--pin, |
--p |
PIN-код, который будет использован для подтверждения генерации ключевой пары. Использование параметра |
‑‑pin
--pin автоматически включает параметр |
‑‑login
‑‑--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--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 -utf8 -new -key privatekey.pem ‑out -out req.csr
- с помощью ключа на Рутокене:
openssl req ‑utf8 ‑new ‑keyform engine ‑key -utf8 -new -keyform engine -key "pkcs11:your_pkcs11_uri" ‑engine -engine rtengine ‑out -out req.csr
В процессе работы команда попросит ввести PIN-код. После этого потребуется указать данные для сертификата.
...
Поле | Описание |
---|---|
| CountryName Страна |
ST | StateOrProvinceName Регион или область |
L | Locality Населенный пункт (город, село, поселок и т.д.) |
O | Organization Название организации |
OU | OrganizationalUnit Название отдела в организации |
CN | CommonName Имя владельца сертификата |
emailAddress | Почтовый адрес владельца сертификата |
Выпуск самоподписанного сертификата по запросу
Самоподписанный сертификат можно выпустить:
- с помощью ключа в файле:
openssl req ‑utf8 ‑x509 ‑key -utf8 -x509 -key /путь/к/файлу/privatekey.pem ‑out -out cert.cer
- с помощью ключа на Рутокене:
openssl req ‑utf8 ‑x509 ‑keyform engine ‑key -utf8 -x509 -keyform engine -key "pkcs11:your_pkcs11_uri" ‑engine -engine rtengine ‑out -out cert.cer ‑subj -subj "/C=<страна>/ST=<регион>/L=<населенный_пункт>/O=<организация>/OU=<отдел>/CN=<ФИО>/emailAddress=<email>"
Подробнее параметры сертификата описаны в предыдущем разделе.
Работа с подписью в формате CMS
Создание подписи
Tip |
---|
По умолчанию команда
|
...
- Скачайте Рутокен SDK и распакуйте архив.
- Из распакованного архива скопируйте папку
/sdk/openssl/samples/tool/demoCA
и конфигурационный файлopenssl.cnf
в папку с OpenSSL. - Выполните команду:
openssl ca ‑batch ‑in-batch -in req.csr ‑out -out cert.cer
- Создайте CMS-подпись:
- с помощью ключа в файле:
openssl cms ‑sign ‑binary ‑nosmimecap ‑in-sign -binary -nosmimecap -in data_to_sign ‑out -out signed_cms ‑outform -outform PEM ‑inkey -inkey privatekey.pem ‑signer -signer cert.cer
- с помощью ключа на Рутокене:
openssl cms ‑sign ‑binary ‑nosmimecap ‑in -sign -binary -nosmimecap -in data_to_sign ‑out -out signed_cms ‑outform -outform PEM ‑keyform -keyform engine ‑inkey -inkey "pkcs11:your_pkcs11_uri" ‑engine -engine rtengine ‑signer -signer cert.cer
- с помощью ключа в файле:
Проверка подписи
Чтобы проверить подпись, выполните команду:
openssl cms ‑verify ‑binary ‑in-verify -binary -in signed_cms ‑inform -inform PEM ‑out -out verified_data ‑CAfile -CAfile demoCA/cacert.pem ‑content -content data_to_sign |
Файл, указанный в ‑CAfile
-CAfile
, является доверенным сертификатом удостоверяющего центра и используется для проверки сертификата подписанта.
В опцию ‑content
-content
передается файл с подписанными данными, если он не был включен в состав CMS пакета.
Если сертификат подписанта не был включен в CMS пакет (отсоединенная подпись), он указывается в опции ‑certfile-certfile.
Шифрование в формате CMS
Зашифрование
Info | ||
---|---|---|
| ||
При расшифровании сообщения вырабатывается общий симметричный ключ. Этот же ключ используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на неизвлекаемых закрытых ключах с опцией
|
Формат команды:
openssl cms ‑encrypt ‑binary ‑<cipher> ‑in -encrypt -binary -<cipher> -in data_to_encrypt ‑out -out encrypted_cms ‑outform -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-decrypt -binary -in encrypted_cms ‑inform -inform PEM ‑recip -recip respondent.cer ‑inkey -inkey privatekey.pem ‑out -out decrypted_cms_data
- с помощью ключа на Рутокене:
openssl cms ‑decrypt ‑binary ‑in -decrypt -binary -in encrypted_cms ‑inform -inform PEM ‑recip -recip respondent.cer ‑keyform -keyform engine ‑inkey -inkey "pkcs11:your_pkcs11_uri" ‑engine -engine rtengine ‑out -out decrypted_cms_data
Работа с «сырыми» подписями
Подпись данных
Подписать данные «сырой» подписью можно:
- с помощью ключа в файле:
openssl dgst ‑sign-sign privatekey.pem ‑out -out file_to_sign.sig file_to_sign.txt
- с помощью ключа на Рутокене:Алгоритм хеша будет зависеть от алгоритма ключа.
openssl dgst ‑keyform-keyform engine ‑sign -sign "pkcs11:your_pkcs11_uri" ‑engine -engine rtengine ‑out -out file_to_sign.sig file_to_sign.txt
Проверка «сырой» подписи
- Получите открытый ключ из закрытого:
openssl pkey -in privatekey.pem ‑pubout ‑out -pubout -out publickey.pem
- Проверьте подпись:
- с помощью ключа в файле:
openssl dgst ‑verify-verify publickey.pem ‑signature -signature signed_file.sig signed_file.txt
- с помощью ключа на Рутокене:
openssl dgst ‑keyform-keyform engine ‑-verify "pkcs11:your_pkcs11_uri" ‑engine -engine rtengine ‑signature -signature signed_file.sig signed_file.txt
- с помощью ключа в файле:
Запуск SSL/TLS сервера
Формат команды:
openssl s_server ‑key-key filename|uri [‑keyform -keyform format] [‑engine -engine id] ‑cert -cert infile ‑Verify -Verify int ‑CAfile -CAfile file ‑accept val ‑WWW ‑purpose purpose ‑4-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 -keyform format] [‑engine -engine id] ‑cert -cert filename ‑host -host hostname ‑port -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 | idid-tc26-gost-3410-12-512-paramSetB | |||
1.2.643.7.1.2.1.2.3 | C | id-tc26-gost-3410-12-512-paramSetC
|