Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »



Предварительная подготовка

Подключите устройств семейства Рутокен ЭЦП к компьютеру.


Перед началом работы, установите следующие пакеты:

# для ubuntu
sudo apt-get update
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl

# для red os
sudo yum update
sudo yum install ccid opensc gdm-plugin-smartcard p11-kit
 
# для alteros
sudo yum update
sudo yum install ccid opensc gdm-plugin-smartcard p11-kit openssl-pkcs11
 
# для astra и alt linux
sudo apt-get update
sudo apt-get install ccid opensc gdm-plugin-smartcard p11-kit
 
# для rosa
sudo dnf --auto-update
sudo dnf install ccid opensc gdm-plugin-smartcard p11-kit


Загрузите модуль librtpkcs11ecp.so и установите:

sudo rpm -i librtpkcs11ecp-X.X.X.X-X.x86_64.rpm

Проверьте наличие  libpkcs11.so по пути: /usr/lib64/engines-1.1/. Если ее нет, то для начала установите libpkcs11.so для того, чтобы OpenSSL смог общаться к Рутокеном.

Для этого соберите библиотеку libp11 из репозитория. Вместе с ней идет libpkcs11.so начиная с версии 0.4.


Создание ключей

Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда для их созданию:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45

Параметр id задает идентификатор ключевой пары.

Проверим сгенерированный ключ:

pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O

Создание сертификата и импорт его на токен через OpenSSL 1.1.x


Теперь нужно получить сертификат (путь до библиотеки pkcs11 может отличаться в зависимости от ОС):

  • создайте самоподписанный сертификат:

openssl
 
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
 
OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -x509 -out cert.crt -outform DER


  • или создайте запрос на сертификат для передачи его в УЦ:

openssl
 
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
 
OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -out request.req


Создание сертификата и импорт его на токен через OpenSSL 3.x

Настраиваем конфигурационный файл по инструкции
Формируем самоподписанный сертификат или заявку на сертификат:

$ OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out client.pem -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"


Сохраните сертификат на токене:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45

Создание подписи в формате CMS

Для создания CMS подписи необходимо иметь сертификат. В тестовых целях можно воспользоваться нашим SDK.
В папке
sdk\openssl\samples\tool\ предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.

Скопируйте папку sdk\openssl\samples\tool\demoCA и конфигурационный файл openssl.cnf в папку с OpenSSL (она может находится по пути /usr/lib/ssl/)
И выполните:

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 seckey.pem -signer cert.cer


Или используя ключ на Рутокене:

openssl cms -sign -binary -nosmimecap -in data_to_sign -out signed_cms -outform PEM -keyform engine -inkey 0:45 -engine pkcs11 -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 0:45 -engine pkcs11 -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 0:45 -engine pkcs11 -signature signature test_data


Шифрование в формате 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 -RSA -in test_data -out encrypted_cms -outform PEM respondent.cer

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

Расшифрование на стороне адресата: 

Используя ключ в файле:

   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 0:45 -engine rtengine -out decrypted_cms_data



  • No labels