Предварительная подготовка
Перед началом работы, установите следующие пакеты:
# для ubuntu |
Загрузите модуль librtpkcs11ecp.so и установите:
|
Проверьте наличие libpkcs11.so по пути: /usr/lib64/engines-1.1/
. Если ее нет, то для начала установите libpkcs11.so для того, чтобы OpenSSL смог общаться к Рутокеном.
Для этого соберите библиотеку libp11 из репозитория. Вместе с ней идет libpkcs11.so начиная с версии 0.4.
Создание ключей
Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда для их созданию:
|
Параметр id задает идентификатор ключевой пары.
Проверим сгенерированный ключ:
|
Создание сертификата и импорт его на токен через OpenSSL 1.1.x
Теперь нужно получить сертификат:
- создайте самоподписанный сертификат:
|
- или создайте запрос на сертификат для передачи его в УЦ:
|
Создание сертификата и импорт его на токен через OpenSSL 3.x
Настраиваем конфигурационный файл по инструкции
Формируем самоподписанный сертификат или заявку на сертификат:
|
Сохраните сертификат на токене:
|
Создание подписи в формате CMS
Для создания CMS подписи необходимо иметь сертификат. В тестовых целях можно воспользоваться нашим SDK.
В папке sdk\openssl\samples\tool\
предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
Скопируйте папку sdk\openssl\samples\tool\demoCA
и конфигурационный файл openssl.cnf
в папку с OpenSSL (она может находится по пути /usr/lib/ssl/)
И выполните:
|
Затем создайте CMS подпись используя ключ в файле:
|
Или используя ключ на Рутокене:
|
Используя -nodetach
подписываемые данные включаются в состав CMS пакета — присоединенная подпись. Без этой опции подпись будет «отсоединенной».
Используя -nocerts
сертификат подписанта не включается в состав CMS пакета.
Проверка подписи в формате CMS
|
Файл, указанный в -CAfile
, является доверенным сертификатом удостоверяющего
центра и используется для проверки сертификата подписанта.
В опцию -content
передается файл с подписанными данными, если он не был включен в состав CMS пакета.
Если сертификат подписанта не был включен в CMS пакет (отсоединенная подпись), он указывается в опции -certfile.
«Сырая» подпись данных
Используя ключ в файле:
|
Используя ключ на Рутокене:
|
Алгоритм хеша будет зависеть от алгоритма ключа.
Проверка «сырой подписи»
Получить открытый ключ из закрытого можно следующей командой:
|
Проверка используя ключ в файле:
|
Используя ключ на Рутокене:
|
Шифрование в формате CMS
Шифрование на ключах с Рутокена
При расшифровании сообщения вырабатывается общий симметричный ключ, который непосредственно и используется при расшифровке. Рутокен позволяет генерировать такой общий ключ только на не извлекаемых закрытых ключах с опцией '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):
алгоритм, работает в режиме гаммирования с обратной связью с набором параметров А.
gost28147-cfb (для rtengine новее 0.7):
алгоритм, работает в режиме гаммирования с обратной связью с набором параметров Z.
Расшифрование на стороне адресата:
Используя ключ в файле:
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