Преобразовать дескриптор объекта 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
?