将PKCS' 11对象句柄转换为C#中的X509Certificate对象

时间:2017-04-09 07:39:39

标签: c# cryptography pkcs#11 pkcs11interop

如何将Object_Handle(它是由C_FindObject返回的ulong转换为C#中的X509Certificate对象)。这是代码。

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 个答案:

答案 0 :(得分:0)

无法将对象句柄转换为X509Certificate2对象。您需要使用CKA_VALUE函数读取证书对象的C_GetAttributeValue属性值。 CKA_VALUE属性包含DER编码证书,可以将byte[]传递给X509Certificate2类的构造函数。

顺便说一句,如果您使用的是Pkcs11Interop库,那么为什么要使用LowLevelAPI代替HighLevelAPI