Ошибка чтения сертификата из файла после попытки получения сертификатов из токена

Коллеги, доброго времени суток.

  1. Запускаю тестовый проект. на c#

  2. Выбираю тип хранилища “eToken 5110”

  3. Получаю список сертификатов на токене или информацию об их отсутствии
    (KalkanCOMTest.GetTokens((int)storage, out tokens, out tokenCount);
    KalkanCOMTest.LoadKeyStore((int)storage, tb_pinCode.Text, tb_keyPath.Text, " "):wink:

  4. выбираю тип хранилища “Файловая система - PKCS#12 (*.p12)”

  5. выбираю путь к файлу

  6. нажимаю на “показать сертификат”
    (KalkanCOMTest.X509ExportCertificateFromStore(alias, (int)kalkanFlags, out outCert):wink:

в итоге получаю ошибку “Попытка чтения или записи в защищенную память”
image

Т.е. независимо от того, был ли получен сертификат из токена, после попытки его получения при считывании сертификата из файла падает такая ошибка. Прошу помочь разобраться с природой этой ошибки

Доброго времени суток!

Подскажите, какой версии библиотеку KalkanCryptCOM Вы используете?
Вводите ли пароль для ключа *.p12?

Дело в том, что сертификат в память попадает при вызове метода LoadKeyStore(). Затем, уже при вызове метода X509ExportCertificateFromStore(), сертификат выдается из памяти.
Мы протестируем описанный Вами алгоритм и ответим в ближайшее время.

сборка Interop.KalkanCryptCOMLib, Version=2.7.0.0
пароль ввожу, после LoadKeyStore GetLastError() ошибку не возвращает

интересно то, что сертификаты, полученные из токена, библиотека отображает, т.е. в памяти они остались, а те, которые предположительно должны подгрузиться из файла - нет

Вы после выбора файл стираете поле с id сертификата? Если да, попробуйте не трогать его и нажать “показать сертификат”
image

Оно не заполняется
Тут тоже два варианта развития событий:

  1. я сам вручную указываю ид сертификата, тогда получаю ошибку:
    Error: 0x08F0001B
  2. я указываю id сертификатов, которые сохранены и получены на токене, тогда сертификат отображается

Добрый день!

В данном случае - это особенность примера на С#.
Когда после токена выбираем файловое хранилище и стираем в форме значение comboBox1 - id сертификата, то значение становится равным NULL. Данное значение не допустимо для переменной alias.
В следующем обновлении библиотеки мы добавим проверку alias на равенство NULL.

Спасибо за замечание! Всегда рады усовершенствовать наше ПО)

А какое решение? Если алиас указать, то все равно падает ошибка. В comboBox1 я ничего не стираю, там ничего и не указано изначально

Завтра выпустим обновление! В этом обновлении, в том числе, устранили такую проблему

Добрый день!
Нами была доработана библиотека KalkanCryptCOM в части смены типа хранилища сертификата.
В данный момент описанная Вами ошибка не наблюдается.
Можете вновь скачать SDK и обновить библиотеку.
Выпущена новая версия 2.8.0.1.

1 Симпатия