编程语言
首页 > 编程语言> > c#-移除X509Certificate2对象的智能卡时的事件

c#-移除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,则Windows会提示一个对话框,提示您进行所有操作.

现在,此功能还有一个额外的安全性要求,如果使用智能卡执行此操作(如果要强制执行硬件,则可以通过rsa.CspKeyContainerInfo.Removable和HardwareDevice找到),我们要确保它是在会话期间的任何时候都可以访问.换句话说,当智能卡被移除时,我们需要一个事件,以便我们可以自动注销.

一种粗略的方法是让计时器工作检查证书.PrivateKey每分钟左右都可以访问,但是在提示用户插入智能卡并按取消键之前不会抛出该异常.

该功能也支持Windows 7,因此不能使用UWP库.有什么办法可以做到这一点?

解决方法:

您可以使用PC / SC检查卡是否已卸下.在Windows中,它是在WinSCard库中实现的.看到这个SO answer.

还有一个C#实现pcsc-sharp.

标签:smartcard,x509certificate2,windows,c,net
来源: https://codeday.me/bug/20191026/1932720.html