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