2

我正在使用 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() 但错误仍然发生在终结器中。

有关如何解决此问题的任何想法?

问候,塞巴斯蒂安

4

0 回答 0