...
Параметр | Описание | |
---|---|---|
-algorithm | Алгоритм шифрования | |
-pkeyopt | Настройки алгоритма (размер ключа, тип эллиптической кривой, и т.д.). Задает для параметра алгоритма Может быть использован несколько раз, если у алгоритма есть несколько изменяемых параметров. Например:
| |
-out | Название файла, в который будет записана ключевая пара. По умолчанию создается в том же каталоге, откуда была вызвана команда. Чтобы сохранить файл в другой каталог, укажите в параметре
|
...
|
Значения параметров:
Параметр | Возможные значения | |
---|---|---|
-algorithm |
| |
-pkeyopt |
|
Генерация ключевой пары RSA в файл
...
|
Значения параметров:
Параметр | Возможные значения |
---|---|
-algorithm |
|
-pkeyopt |
|
Генерация ключевой пары на Рутокене
...
Tip |
---|
Собирайте ветку pkcs11-tool с поддержкой ГОСТ-2012, или используйте релиз OpenSC OpenSC 0.20.0 или новее. |
Пример:
|
Значения параметров:
Параметр | Возможные значения |
---|---|
--key-type | Для алгоритма
Для алгоритма
|
--id | Для удобства, можно воспользоваться онлайн-сервисом конвертации ACSII-кодов в строку. Почему выше (и ниже) конвертация строки в коды, а тут кодов в строку? |
...
Параметр | Возможные значения | ||
---|---|---|---|
--module | Для Windows:
Для Linux:
| ||
--key-type | Для Рутокен ЭЦП 3.0 3110 и 3220:
Для Рутокен ЭЦП 3.0 3120:
| ||
--id | Нужна конвертация в ASCII? |
...
Параметр | Возможные значения | ||
---|---|---|---|
--module | Для Windows:
Для Linux:
| ||
--key-type | Для Рутокен ЭЦП 2.0:
Для Рутокен ЭЦП 3.0:
| ||
--id | Нужна конвертация в ASCII? |
...
Создание подписи
Для создания CMS-подписи необходимо иметь сертификат. В тестовых целях в Рутокен SDK предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
...
- Скачайте Рутокен SDK и распакуйте архив.
- Из распакованного архива скопируйте папку
sdk\openssl\samples\tool\demoCA
и конфигурационный файлopenssl.cnf
в папку с OpenSSL. - Выполните команду:
openssl ca -batch -in req.csr -out cert.cer
- Создайте CMS-подпись:
Tip По умолчанию создается открепленная подпись (подпись, которая сохраняется в отдельный файл), а сертификат подписанта включается в состав CMS-пакета. Изменить это поведение можно с помощью двух опциональных параметров:
-nodetach
включает подписываемые данные в состав CMS-пакета и создает присоединенную подпись:-nocerts
исключает сертификат подписанта из состава CMS-пакета.
- с помощью ключа в файле:с помощью ключа в файле:
openssl cms -sign -binary -nosmimecap -
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
...
Используя -nocerts
сертификат подписанта не включается в состав CMS пакета.
Проверка подписи
Чтобы проверить подпись, выполните команду:
openssl cms -verify -binary -in signed_cms -inform PEM -out verified_data -CAfile demoCA/cacert.pem -content data_to_sign |
Файл, указанный в -CAfile
, является доверенным сертификатом удостоверяющего центра и используется для проверки сертификата подписанта.
...
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ертификат адресата, для которого шифруется сообщение |
-binary -<alg> -in test_data -out encrypted_cms -outform PEM respondent.cerrespondent.cer:
сертификат адресата, для которого шифруется сообщение.
Где alg
может принимать значения:
...
gost28147-cfb (для rtengine новее 0.7):
алгоритм, работает в режиме гаммирования с обратной связью с набором параметров Z.`
Для RSA и ECDSA ключей:
-aes128 — AES-128.
-aes192 — AES-192.
-aes256 — AES-256.
-des — DES.
-des3 — Triple DES (3DES).
...
- с помощью ключа в файле:
openssl dgst -sign privatekey.pem -out file_to_sign.signature sig file_to_sign.txt
- с помощью ключа на Рутокене:
openssl dgst -keyform engine -sign "pkcs11:your_pkcs11_uri" -engine rtengine -out file_to_sign.signature sig file_to_sign.txt
Алгоритм хеша будет зависеть от алгоритма ключа.
...
- Получите открытый ключ из закрытого:
openssl pkey -in privatekey.pem -pubout -out publickey.pem
- Проверьте подпись:
- с помощью ключа в файле:
openssl dgst -verify publickey.pem -signature signed_file.signature sig signed_file.txt
- с помощью ключа на Рутокене:
openssl dgst -keyform engine -verify "pkcs11:your_pkcs11_uri" -engine rtengine -signature signed_file.signature sig signed_file.txt
- с помощью ключа в файле:
Запуск SSL/TLS сервера
...
Запуск 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 | Порт сервера, с которым нужно установить соединение |
Примеры команд:
Code Block | ||||
---|---|---|---|---|
| ||||
openssl s_client -key privatekey.pem -cert cert.cer -host 127.0.0.1 -port 44330 |
...