删除X509Certificate2对象的智能卡时的事件

时间:2017-05-30 13:36:40

标签: c# .net windows smartcard x509certificate2

我们有一个功能,我们使用Windows'个人证书存储区在用户选择有效证书后使用证书进行身份验证。它只是通过以下方式表示挑战:

public static byte[] SignDataSHA512RSA(X509Certificate2 certificate, byte[] data)
        {
            using (var rsa = certificate.PrivateKey as RSACryptoServiceProvider)
            {
                if (rsa == null)
                {
                    return null;
                }

                return rsa.SignData(data, CryptoConfig.MapNameToOID("SHA512"));
            }
        }

使用RSACryptoServiceProvider类可以很好地工作。该功能允许常规证书和智能卡证书。如果有智能卡并且需要PIN,则窗口会提示它和所有的对话框。

现在,此功能还有一个额外的安全要求,如果智能卡用于此操作(我们可以通过rsa.CspKeyContainerInfo.Removable找到,而HardwareDevice如果要强制执行硬件),我们希望确保在会话期间始终可以访问它。换句话说,当智能卡被移除时我们需要一个事件,因此我们可以自动注销。

一种粗略的方法是拥有一个计时器作业,每隔一分钟就可以检查certificate.PrivateKey,但在提示用户插入智能卡并且用户按下Cancel之前不会抛出

该功能也支持Windows 7,因此不能使用UWP库。有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:4)

您可以使用PC / SC检查卡片的移除情况。在Windows中,它在WinSCard库中实现。请参阅此SO answer

还有一个C#实现pcsc-sharp