Работа с Kaztoken

Добрый день! Подскажите, работаю с kalkanCryptCOM. Необходимо реализовать следующую процедуру:

  1. Получить все ключи с токена
  2. Сохранить наименование ключа, чтобы потом при перезагрузке программы подписывать им автоматически при наличии токена в USB
  3. Подписывать

Раньше я работал с PKCS12 и тут всё просто, сохраняешь путь до сертификата и ключ доступа к нему. Тут же я получаю с помощью kalkanCryptCOM.GetTokens(storage, out var tokens, out var tokenCounts); все токены, тут встречаю проблему номер 1. Сколько бы не было подключено токенов к системе - показывается всегда токен с наибольшим номером. Допустим KAZTOKEN 2.

Дальше, получив нужный токен я вызываю kalkanCryptCOM.GetCertAliases(out var certAliasesString, out var certCount); чтобы пользователю позволить выбрать нужный алиас сертификата. Именно этот выбранный алиас я сохраню в настройки программы и буду дальше его передавать в другие функции и там я столкнусь с второй проблемой.

Я беру и пробую провалидировать алиас: _kalkanCryptCOM.X509ExportCertificateFromStore(alias, 0, out var cert); но получаю проблему 2. Ошибка, невозможно загрузить сертификат. Соответственно cert тоже null.

Саму подпись _kalkanCryptCOM.SignWSSE(alias, 0, soapBodyWithoutNewLineAndSpace, parameters.SignNodeId, out var outSign); тоже попробовал и тут такая же проблема, что невозможно загрузить сертификат.

В чем могут быть эти две проблемы? Как их можно решить? Библиотека 3.0.0.3 версии, красивая, тестовая :slight_smile: На 2.8.0.3 аналогичное поведение.

Нашёл проблему, дело в том, что даже если ты раньше уже получил алиасы сертификатов, сохранил эту строку в конфиг, то в любом случае перед использованием после загрузки хранилища необхлодимо получить оттуда алиасы kalkanCryptCOM.GetCertAliases(out var certAliasesString, out var certCount); тогда можно буде продолжить работать с алиасом. Если не вызывать этого метода - будет ошибка, что невозможно загрузить сертификат.

1 Симпатия