Page tree

Versions Compared

Key

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

...

openssl genpkey -algorithm alg -pkeyopt opt:value [-pkeyopt opt:value]... -out filename.pem

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

ПараметрОписание
algorithmАлгоритм шифрования
-pkeyopt

Настройки алгоритма (размер ключа, тип эллиптической кривой, и т.д.). Задает для параметра алгоритма opt значение value.

Может быть использован несколько раз, если у алгоритма есть несколько изменяемых параметров. Например:

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3
-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 в зависимости от алгоритма:

  • gost2001
    • A;
    • B;
    • C;
    • XA;
    • XB.
  • gost2012_256:
    • A;
    • B;
    • C;
    • id-GostR3410-2001-CryptoPro-A-ParamSet;
    • id-GostR3410-2001-CryptoPro-B-ParamSet;
    • id-GostR3410-2001-CryptoPro-C-ParamSet.
  • gost2012_512:
    • A;
    • B;
    • C.

Параметры кривых, соответствующие значениям, описаны в Приложении 1.

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

Пример: 

openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:secp256r1 -out privatekey.pem 

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

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

EC

-pkeyopt
  • ec_param_enc:<encoding>  — определение параметров кривой. Может принимать значение named_curve (используется существующая кривая) или explicit (параметры кривой задаются вручную; не рекомендуется с точки зрения безопасности и совместимости).
    Значение encoding по умолчанию: named_curve.
  • ec_param_curve:<curve> — название эллиптической кривой.
    Чтобы посмотреть список эллиптических кривых, поддерживаемых установленной версией OpenSSL, выполните команду:
    openssl ecparam ‑list-list_curves

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

Пример:

openssl genpkey ‑algorithm RSA -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> — значение открытой экспоненты. Может быть представлено в десятичной или шестнадцатеричном системе (для этого перед значением нужно поставить 0x).
    Значение value по умолчанию: 65537

...

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

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, --pPIN‑кодPIN-код, который будет использован для подтверждения генерации ключевой пары.
Использование параметра ‑‑pin --pin автоматически включает параметр ‑‑login
--login
--keypairgen, -kТип операции (генерация новой ключевой пары)
--key-type

Тип и параметры алгоритма шифрования (размер ключа, параметры эллиптической кривой, и т.д.).

--id, -d

Идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.

Tip

Чтобы использовать этот ID через OpenSSL, нужно использовать символы, соответствующие этим кодам.
Например, для ключевой пары ГОСТ с ID "‑‑id --id 3132" в PKCS #11 URI нужно указать "pkcs11:id=12". 
Конвертировать ID в формат, подходящий для работы с OpenSSL, можно с помощью онлайн-сервиса конвертации HEX в ASCII.

--usage-derive

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

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

ГОСТ-2001

Пример:

pkcs11-tool ‑‑module--module /путь/к/библиотеке/rtPKCS11ECP ‑‑login ‑‑pin 12345678 ‑‑keypairgen ‑‑key‑type --login --pin 12345678 --keypairgen --key-type GOSTR3410:A ‑‑id 3132 ‑‑usage‑derive --id 3132 --usage-derive

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

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

Для Windows:

/путь/к/файлу/rtPKCS11ECP.dll

Для Linux:

/путь/к/файлу/librtpkcs11ecp.so

--key-type
  • GOSTR3410-2001:A;
  • GOSTR3410-2001:B;
  • GOSTR3410-2001:C.

Более подробно значения описаны в Приложении 1.

...

Tip

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

Пример:

pkcs11-tool ‑‑module--module /путь/к/библиотеке/rtPKCS11ECP ‑‑login ‑‑pin 12345678 ‑‑keypairgen ‑‑key‑type GOSTR3410‑2012‑256:B ‑‑id 3132 ‑‑usage‑derive --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:B --id 3132 --usage-derive 

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

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

Для Windows:

/путь/к/файлу/rtPKCS11ECP.dll

Для Linux:

/путь/к/файлу/librtpkcs11ecp.so

--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.

Более подробно значения описаны в Приложении 1.

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

Пример:

pkcs11-tool ‑‑module --module /путь/к/библиотеке/rtPKCS11ECP ‑‑login ‑‑pin 12345678 ‑‑keypairgen ‑‑key‑type --login --pin 12345678 --keypairgen --key-type EC:secp256r1 ‑‑id 3132 ‑‑usage‑derive--id 3132 --usage-derive

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

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

Для Windows:

/путь/к/файлу/rtpkcs11ecp.dll

Для Linux:

/путь/к/файлу/librtpkcs11ecp.so
key‑type--key-type

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

  • EC:secp256r1;
  • EC:secp256k1.

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

  • EC:secp256r1;
  • EC:secp256k1;
  • EC:secp384r1;
  • EC:secp521r1.

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

Пример:

pkcs11-tool ‑‑module--module /путь/к/библиотеке/rtPKCS11ECP ‑‑login ‑‑pin 12345678 ‑‑keypairgen ‑‑key‑type --login --pin 12345678 --keypairgen --key-type RSA:2048 ‑‑id --id 3132

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

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

Для Windows:

/путь/к/файлу/rtpkcs11ecp.dll

Для Linux:

/путь/к/librtpkcs11ecp.so

--key-type
Warning

Использовать 1024-битные ключи RSA небезоспано.
Рекомендуем использовать как минимум 2048-битные ключи.

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

  • RSA:1024;
  • RSA:2048.

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

  • RSA:1024;
  • RSA:2048;
  • RSA:4096.

...

Посмотреть записанные на токен объекты можно с помощью команды:

pkcs11-tool ‑‑module--module /путь/к/библиотеке/rtPKCS11ECP ‑Ol -Ol

Формирование запроса 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-код. После этого потребуется указать данные для сертификата. 

...

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

    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>" 

...

Tip

По умолчанию команда openssl cms ‑sign-sign создает открепленную подпись (подпись, которая сохраняется в отдельный файл), а сертификат подписанта включается в состав CMS-пакета. Изменить это поведение можно с помощью двух опциональных параметров:

  • ‑nodetach -nodetach включает подписываемые данные в состав CMS-пакета и создает присоединенную подпись:
  • ‑nocerts -nocerts исключает сертификат подписанта из состава CMS-пакета.

...

  1. Скачайте Рутокен SDK и распакуйте архив.
  2. Из распакованного архива скопируйте папку /sdk/openssl/samples/tool/demoCA и конфигурационный файл openssl.cnf в папку с OpenSSL.
  3. Выполните команду:
    openssl ca ‑batch ‑in-batch -in req.csr ‑out -out cert.cer
  4. Создайте 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
titleШифрование на ключах с Рутокена

При расшифровании сообщения вырабатывается общий симметричный ключ. Этот же ключ используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на неизвлекаемых закрытых ключах с опцией derive в поле key usage. Для того, чтобы указать эту опцию, при генерации ключа используйте флаг  ‑‑usage‑derive--usage-derive. Например:

pkcs11‑toolpkcs11-tool.exe ‑‑module --module /путь/к/библиотеке/rtPKCS11ECP ‑‑login ‑‑pin 12345678 ‑‑keypairgen ‑‑key‑type GOSTR3410‑2012‑256:B ‑‑id 3132 ‑‑usage‑derive--login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:B --id 3132 --usage-derive

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

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). Параметр ‑binary -binary отключает эту конвертацию. 

-<cipher>

Алгоритм шифрования. Возможные значения зависят от типа ключа.

Для ключей ГОСТ и rtengine версии 0.7:

  • gost28147‑paramset_a‑cfbgost28147-paramset_a-cfb - алгоритм, который работает в режиме гаммирования с обратной связью с набором параметров А.

Для ключей ГОСТ и rtengine версии 0.7 и выше:

  • gost28147-cfb — алгоритм, который работает в режиме гаммирования с обратной связью с набором параметров Z.

Для RSA и ECDSA ключей:

  • aes128 — AES-128;
  • aes192 — AES-192;
  • aes256 — AES-256;
  • des — DES;
  • des3 — Triple DES (3DES)
-inВходное сообщение, которое нужно зашифровать
-outНазвание файла, в который будет сохранено зашифрованное сообщение
-outform

Формат CMS-структуры.

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

respondent.cerCертификат адресата, для которого шифруется сообщение

...

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

    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

    Алгоритм хеша будет зависеть от алгоритма ключа.

...

  1. Получите открытый ключ из закрытого:

    openssl pkey -in privatekey.pem ‑pubout ‑out -pubout -out publickey.pem

  2. Проверьте подпись:
    • с помощью ключа в файле:

      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

...

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

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

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

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

-certПуть к сертификату
-VerifyГлубина проверки цепочки сертификатов
-CAfileПуть к доверенному сертификату
-accept

TCP-порт, который будет прослушиваться в ожидании запросов.

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

-WWWЭмуляция простого веб-сервера
-purpose

Назначение сертификата.

Возможные значения:

  • slclient;
  • sslserver;
  • nssslserver;
  • mimesign;
  • mimeencrypt;
  • crlsign;
  • ocsphelper;
  • timestampsign;
  • codesign;
  • any.
-4Использовать только IPv4

...

Ключ в файле

openssl s_server ‑key -key demoCA/private/cakey.pem ‑cert -cert demoCA/cacert.pem ‑Verify -Verify 7 ‑CAfile -CAfile demoCA/cacert.pem ‑accept 44330 ‑WWW ‑purpose any ‑4-accept 44330 -WWW -purpose any -4

Ключ на токене

openssl s_server ‑key -key "pkcs11:server_key_pkcs11_uri" ‑keyform -keyform engine -engine ‑engine rtengine ‑cert -cert demoCA/cacert.pem ‑Verify -Verify 7 ‑CAfile -CAfile demoCA/cacert.pem ‑accept 44330 ‑WWW ‑purpose any ‑4-accept 44330 -WWW -purpose any -4

Запуск 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

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

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

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

...

Ключ в файле

openssl s_client ‑key -key privatekey.pem ‑cert -cert cert.cer ‑host -host 127.0.0.1 ‑port -port 44330

Ключ на токене

openssl s_client ‑key -key "pkcs11:client_key_pkcs11_uri" ‑keyform -keyform engine -engine ‑engine rtengine ‑cert -cert cert.cer ‑host -host 127.0.0.1 ‑port -port 44330

Приложение 1. Парамсеты ГОСТ в OpenSSL и

...

pkcs11-tool 
Anchor
gost
gost

Таблица значений

...

-pkeyopt для OpenSSL

ГОСТ 34.10-2001

АлгоритмOID парамсетаДопустимое значение аргумента

gost2001

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
1.2.643.2.2.36.0
  • XA;
  • id-GostR3410-2001-CryptoPro-XchA-ParamSet
1.2.643.2.2.36.1
  • XB;
  • id-GostR3410-2001-CryptoPro-XchB-ParamSet
ГОСТ 34.10-2012-256
АлгоритмOID парамсетаДопустимое значение аргумента

gost2012_256 

1.2.643.7.1.2.1.1.1

  • A;
  • id-tc26-gost-3410-2012-256-paramSetA

1.2.643.7.1.2.1.1.2

  • B;
  • id-tc26-gost-3410-2012-256-paramSetB

1.2.643.7.1.2.1.1.3

  • C;
  • id-tc26-gost-3410-2012-256-paramSetC

1.2.643.7.1.2.1.1.4

  • D;
  • id-tc26-gost-3410-2012-256-paramSetD
1.2.643.2.2.35.1id-GostR3410-2001-CryptoPro-A-ParamSet
1.2.643.2.2.35.2id-GostR3410-2001-CryptoPro-B-ParamSet
1.2.643.2.2.35.3id-GostR3410-2001-CryptoPro-C-ParamSet
1.2.643.2.2.36.0id-GostR3410-2001-CryptoPro-XchA-ParamSet
1.2.643.2.2.36.1id-GostR3410-2001-CryptoPro-XchB-ParamSet

ГОСТ 34.10-2012-512

АлгоритмOID парамсетаДопустимое значение аргумента

gost2012_512

1.2.643.7.1.2.1.2.1
  • A;
  • id-tc26-gost-3410-2012-512-paramSetA
1.2.643.7.1.2.1.2.2
  • B;
  • id-tc26-gost-3410-2012-512-paramSetB
1.2.643.7.1.2.1.2.3
  • C;
  • id-tc26-gost-3410-2012-512-paramSetC

...