
Предварительная подготовка
Подключите устройств семейства Рутокен ЭЦП к компьютеру. |
Перед началом работы, установите следующие пакеты:
sudo yum update
sudo yum install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit
sudo yum update
sudo yum install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit openssl-pkcs11
sudo apt-get update
sudo apt-get install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit
sudo dnf --auto-update
sudo dnf install ccid opensc pam_pkcs11 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/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa: 2048 -l --id 45
|
Параметр id задает идентификатор ключевой пары.
Проверим сгенерированный ключ:
pkcs11-tool --module /usr/lib/librtpkcs11ecp .so -O
|
Создание сертификата и импорт его на токен через OpenSSL 1.1.x
Теперь нужно получить сертификат:
- создайте самоподписанный сертификат:
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\openssl\samples\tool\
предоставлены настройки удостоверяющего центра OpenSSL, который позволяет выпускать сертификаты.
Скопируйте папку sdk\openssl\samples\tool\demoCA
и конфигурационный файл openssl.cnf
в папку с OpenSSL и выполните:
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
|