Генерация запроса на сертификат с использованием Java SDK

Коллеги, день добрый!

Генерирую запросы на сертификат на Рутокен ЭЦП 2.0 при помощи приложения написанного с использованием Вашей Java-библиотеки. Все шло отлично - я создавал контейнеры с разными id, при необходимости удалял их.
В результате недосмотра я несколько раз создал запрос на сертификат с одним и тем же id контейнера. После этого токен перестал читаться плагином на ra.rutoken.ru. В панели администрирования токен читается 1 раз, показывает контейнеры, которые были сформированы корректно, но при попытке обновить данные - приложение просто падает.

Подозреваю, что причина такого поведения может быть
1) либо из-за того что при создании запросов с одним id контейнера они все записались в один физический контейнер, и теперь невозможно прочитать данные токена
2) либо из-за того, что на токене создалось несколько контейнеров с одним и тем же id

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

Скажите, пожалуйста, можно ли как-то увидеть эти битые контейнеры и удалить их? Может быть, сама библиотека java позволяет сделать это?

Заранее большое спасибо за любую информацию!

Re: Генерация запроса на сертификат с использованием Java SDK

al_neverov, добрый день!

Увидеть и отредактировать содержимое токена возможно, например, с помощью программы PKCS11Admin.

Наш клиентский софт рассчитан на типовые пользовательские сценарии, когда для одного CKA_ID есть один сертификат и одна ключевая пара.

Через API PKCS#11 также возможно получить список всех ключевых с помощью C_FindObjects, которую и использует в себе PKCS11Admin.

Re: Генерация запроса на сертификат с использованием Java SDK

Павел, день добрый!

Спасибо большое. Попробую это сделать

Re: Генерация запроса на сертификат с использованием Java SDK

Коллеги, день добрый,

воспользовался этой утилитой и, действительно, обнаружил контейнеры с одинаковыми ID. При попытке удалить их с токена (при попытке редактирования тоже) возникает исключение:

Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
Net.Pkcs11Interop.Common.Pkcs11Exception: Method C_DestroyObject returned CKR_OBJECT_HANDLE_INVALID
   в Net.Pkcs11Interop.HighLevelAPI41.Session.DestroyObject(IObjectHandle objectHandle)
   в Net.Pkcs11Admin.Pkcs11Slot.DeleteObject(Pkcs11ObjectInfo objectInfo)
   в Net.Pkcs11Admin.WinForms.MainForm.DeletePkcs11Object()
   в Net.Pkcs11Admin.WinForms.MainForm.<MenuItemObjectDelete_Click>d__34.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


************** Загруженные сборки **************
mscorlib
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4341.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
Pkcs11Admin.WinForms
    Версия сборки: 0.5.0.0
    Версия Win32: 0.5.0
    CodeBase: file:///C:/work/rtoken/Pkcs11Admin-0.5.0/Pkcs11Admin-x64.exe
----------------------------------------
System.Windows.Forms
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4341.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4300.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Pkcs11Admin
    Версия сборки: 0.5.0.0
    Версия Win32: 0.5.0
    CodeBase: file:///C:/work/rtoken/Pkcs11Admin-0.5.0/Pkcs11Admin.DLL
----------------------------------------
System.Configuration
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4190.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4341.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
Pkcs11Interop
    Версия сборки: 5.0.0.0
    Версия Win32: 5.0.0.0
    CodeBase: file:///C:/work/rtoken/Pkcs11Admin-0.5.0/Pkcs11Interop.DLL
----------------------------------------
Accessibility
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
mscorlib.resources
    Версия сборки: 4.0.0.0
    Версия Win32: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
Be.Windows.Forms.HexBox
    Версия сборки: 1.6.1.0
    Версия Win32: 1.6.1.0
    CodeBase: file:///C:/work/rtoken/Pkcs11Admin-0.5.0/Be.Windows.Forms.HexBox.DLL
----------------------------------------

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

Например:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

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


Можно ли что-то еще с этим сделать? Не хочется выполнять форматирование - один из сертификатов получен буквально в бою.
И вопрос на будущее. Можно ли при использовании java-библиотек избежать ситуации, при которой на токене создаются контейнеры с ID, которые уже есть на токене? Очевидно, что при создании запроса на сертификат при  помощи java-библиотек, такая проверка не выполняется, а токен после этого приходит в негодность. Может быть, можно перед созданием запроса и контейнера под него выполнить такую проверку вручную? Например, прочитать хотя бы ID контейнеров?

Заранее большое спасибо за информацию

С уважением,
Алексей Неверов

Re: Генерация запроса на сертификат с использованием Java SDK

al_neverov, Добрый день.
Перед удалением или редактированием необходимо залогиниться пользователем на токене. Меню "Token\Login\User login".

Проверку можно делать. Для этого необходимо заранее перебрать объекты на токене, узнать их CKA_ID и не давать создавать контейнер с тем же CKA_ID.

Re: Генерация запроса на сертификат с использованием Java SDK

Спасибо большое!

Токен снова виден в стандартных средствах! Ура!
Проверку добавлю