Преобразовать дескриптор объекта PKCS'11 в объект сертификата X509 в C#

Как я могу преобразовать Object_Handle, который является ulong возвращается C_FindObject в объект X509Certificate в C#. Вот код

ulong[] foundObjectIds = new ulong[10];
foundObjectIds[0] = CK_INVALID_HANDLE;
success = PKCS11CsharpWrapper.C_FindObjects(session, foundObjectIds, Convert.ToUInt64(foundObjectIds.Length), ref foundObjectCount);

Теперь мне нужно преобразовать foundObjectIds[0] в объект X509Certificate.

Я попробовал следующий способ, и он не работает для меня.

IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(ulong)));
Marshal.StructureToPtr(foundObjectIds[0], ptr, false);
IntPtr[] arr = new IntPtr[2];
Marshal.Copy(ptr, arr, 0, 1);
X509Certificate2 cert= new X509Certificate2((IntPtr)foundObjectIds[0]);

1 ответ

Решение

Дескриптор объекта не может быть преобразован в X509Certificate2 объект. Вам нужно прочитать значение CKA_VALUE атрибут объекта сертификата, использующий C_GetAttributeValue функция. CKA_VALUE атрибут содержит кодированный сертификат DER, который можно передать как byte[] в конструктор X509Certificate2 учебный класс.

Кстати, если вы используете библиотеку Pkcs11Interop, то почему вы работаете с LowLevelAPI вместо HighLevelAPI?

Другие вопросы по тегам