【发布时间】:2017-10-23 21:59:04
【问题描述】:
假设我从 Windows 的密钥库中选择了一个证书,并且在签名时,我需要确定插入读卡器的 SmartCard 是否是正确的......
这里是一些示例代码:
// finding the certificate
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
// by thumbprint, there is only one
certs = certs.Find(X509FindType.FindByThumbprint, "123456BLAHBLAHAE3C", true);
X509Certificate2 cert = certs[0];
RSACryptoServiceProvider key;
if (cert.HasPrivateKey)
{
// software cert
key = cert.PrivateKey as RSACryptoServiceProvider;
}
else
{
// certificate from smartcard
CspParameters csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
key = new RSACryptoServiceProvider(csp);
}
现在,当我想对数据进行签名时,我如何知道当前插入的智能卡是否真的是我正在寻找的智能卡(与 Windows 密钥库中的智能卡匹配)?
我在问这个问题,因为现在当我签署数据时,我会收到输入智能卡 PIN 的提示,但我插入的卡甚至不是我选择的凭据......而且无论如何它只是签署了数据......
【问题讨论】:
标签: c# digital-signature x509certificate smartcard-reader