1

Тема: Проблема при работе с библиотекой spki1.dll в связке с ruToken

На ключевом носителе ruToken располагаются два ключа (Ключ наложения ЗК, Ключ шифрования).
В настройках СКЗИ в качестве Считывателя ключа выбран "Считыватель ruToken".
Настроено два профиля с собственными справочниками:
local: profile1
pse: pse://signed/C:\Users\USER\AppData\Roaming\MDPREI\scs\profile1\local.pse
localstore: file://C:\Users\USER\AppData\Roaming\MDPREI\scs\profile1\local.gdbm

local: profile2
pse: pse://signed/C:\Users\USER\AppData\Roaming\MDPREI\scs\profile2\local.pse
localstore: file://C:\Users\USER\AppData\Roaming\MDPREI\scs\profile2\local.gdbm

Утилита spki1utl корректно подписывает и шифрует сообщения.
В момент подписи выводится окно для ввода PIN, после ввода кода от контейнера происходит подписание документа(или шифрование).

При вызове же функции VCERT_InitializeEx библиотеки получаем ошибку -529530828 - Ошибка проверки сертификата. В параметрах передаётся структура local_param_t с путями до справочников и с ПИН-кодом контейнера. Что может быть причиной ошибки?

2

Re: Проблема при работе с библиотекой spki1.dll в связке с ruToken

Добрый день!

В структуре local_param_t поле pincode - это ПИН-код ключевого носителя типа смарт-карта.
Более подробную информацию об ошибке можно получить, вызвав функцию VCERT_GetErrorLineEx.

3

Re: Проблема при работе с библиотекой spki1.dll в связке с ruToken

В структуре local_param_t поле pincode - это ПИН-код ключевого носителя типа смарт-карта
То есть нам при использовании ruToken нужно указывать pin-код в какой-то другой функции, правильно я понял?
Где тогда его нужно указать?
И смогу ли я воспользоваться функцией VCERT_GetErrorLineEx, если ошибку получаем на этапе инициализации, а значит контекста для работы с СКЗИ у нас ещё нет, а данная функция требует контекст в качестве входного параметра?

4

Re: Проблема при работе с библиотекой spki1.dll в связке с ruToken

При возникновении ошибки в функции инициализации библиотеки функцию VCERT_GetErrorLineEx можно вызывать, используя в качестве контекста библиотеки значение NULL.

Если у используемого носителя ruToken есть ПИН-код, то его можно задать в структуре local_param_t. Пароль контейнера задать нельзя, при инициализации будет выведено окно для ввода пароля.

Пароль контейнера можно удалить в программе конфигурации.

5

Re: Проблема при работе с библиотекой spki1.dll в связке с ruToken

Функция VCERT_GetErrorLineEx  при вызове из Java-кода через JNA никакого полезного результата не дала, только мусор. Выяснилось, что ПИН-код указывали верный и там, где надо (в local_param_t), но инициализация не проходила из-за того, что приложение было запущено как служба с системной учётной записью. Если приложение запускается из-под авторизованного в системе пользователя, то инициализация проходит успешно