Page tree

Versions Compared

Key

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

...

pki-core-cpp позволяет работать с токенами, доступными через библиотеку rtPKCS11ECP. Для перечисления подключенных устройств необходимо использовать функцию rutoken::pkicore::Pkcs11Device::enumerate, которая возвращает список объектов класса rutoken::pkicore::Pkcs11Device. Вызов этой функции делает объекты Pkcs11Device, полученные в предыдущем вызове, недействительными. Также недействительными становятся объекты ключей и сертификатов, хранящихся на устройствах.

Для перечисления и использования ключевых пар на токене требуется предварительно авторизоваться, используя функцию rutoken::pkicore::Pkcs11Device::login. Чтобы сбросить права доступа на токене, необходимо вызвать функцию rutoken::pkicore::Pkcs11Device::logout.

Большинство операций, связанных с PKI, используют объекты классов rutoken::pkicore::ExternalCert, rutoken::pkicore::Pkcs11Cert, rutoken::pkicore::Pkcs11UserCert. Объекты класса ExternalCert используются, когда необходимо передать какой-либо сертификат, не хранящийся на токене. Используя метод rutoken::pkicore::Pkcs11Device::enumerateCerts, можно получить все сертификаты, хранящиеся на устройстве. Метод rutoken::pkicore::Pkcs11Device::enumerateUserCerts возвращает пользовательские сертификаты на устройстве, которые могут использоваться в операциях, требующих наличия соответствующей ключевой пары.

...

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

  • Сгенерировать на устройстве ключевую пару, которая будет использоваться для подписи, с помощью метода rutoken::pkicore::Pkcs11Device::generateKeyPair.
  •  Заполнить необходимые поля PKCS#10 запроса на сертификат, используя класс rutoken::pkicore::Pkcs10RequestInfo.
  •  Сформировать PKCS#10 запрос, вызвав функцию rutoken::pkicore::createPkcs10Request.
  •  Получить сертификат в центре сертификации на основании запроса, полученного на предыдущем шаге.
  •  Импортировать полученный сертификат на токен, используя метод rutoken::pkicore::Pkcs11Device::importCert.

 

Code Block
using namespace rutoken::pkicore;

auto key = device.generateKeyPair(Pkcs11Device::Gost34102001KeyGenParams());

X500Dn subject;
subject.setRdn(X500Dn::RdnId::commonName, "Ivanov Ivan Ivanovich");

Pkcs10RequestInfo info;
info.setSubject(subject);

auto request = createPkcs10Request(key, info);

// Вызов request.toPem() вернет PKCS#10 запрос на сертификат в формате PEM, который можно передать в центр сертификации для получения пользовательского сертификата.

device.importCert(ExternalCert(pemCert));

Подпись и проверка подписи в формате CMS

...