我正在使用 X509 证书进行身份验证。当智能卡被移除时,我们有时会遇到以下异常(不幸的是,我只能在德语中出现异常文本......)
“Ungültige Benutzerkennung”,意思是“无效的用户 ID”:
bei System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
bei System.Security.Cryptography.SafeKeyHandle._FreeHKey(IntPtr pKeyCtx)
bei System.Security.Cryptography.SafeKeyHandle.ReleaseHandle()
bei System.Runtime.InteropServices.SafeHandle.InternalFinalize()
bei System.Runtime.InteropServices.SafeHandle.Dispose(Boolean disposing)
bei System.Runtime.InteropServices.SafeHandle.Finalize()
我已经窥视了 X509Certificate 的实现。垃圾收集器似乎调用了 X509Certificate 的终结器。X509Certificate 对象包含 Win32 句柄。现在,当智能卡被删除时,相应的证书也会从 Windows 证书存储中删除,因此底层的 Win32 句柄可能是指不再存在的 Win32 资源(证书存储中的证书)。
我的问题是我无法捕获和处理这个异常,因为它在垃圾收集器启动的某个时间点被抛出到终结器中。然后这个异常会破坏整个应用程序......
我试图显式调用 X509Certificate2.Reset() 但错误仍然发生在终结器中。
有关如何解决此问题的任何想法?
问候,塞巴斯蒂安