X509Certificate2请求PIN

时间:2016-08-08 20:40:07

标签: c# x509certificate x509 x509certificate2

我能够在.NET胖客户端应用程序中成功识别客户端证书,并且用户能够成功选择一个。

X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
var fcollection = store.Certificates.Find(X509FindType.FindByApplicationPolicy, "1.3.6.1.5.5.7.3.2", true);
// other stuff where user selects one of them

现在我如何要求用户回答质询(例如,在这种情况下是PIN)?

see有一个SignedXML.ComputeSignature()类,但它需要一个字节流,我不知道它来自哪里(可能在certificate.RawData []?)。

我对获得实际引脚并不感兴趣,因为卡片/引脚匹配。

修改

我尝试使用智能卡中的私钥(甚至从中加密),但我不会被要求提供个人密码。

RSACryptoServiceProvider rsacsp = (RSACryptoServiceProvider)certificate.PrivateKey;
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt");
var encryptedData = RSAEncrypt(dataToEncrypt, rsacsp.ExportParameters(false), false);

2 个答案:

答案 0 :(得分:0)

如果这是智能卡,当您尝试使用证书的私钥时,会出现针脚提示。

您需要以某种方式使用证书,并验证结果。例如,您可以使用证书对某些内容进行签名。一旦签名操作发生,将出现针脚提示。

如果你真的不需要“使用”证书,只想验证它在那里并且用户知道该引脚,那么你需要某种工作证明。证书可用于签署质询,远程服务器可以验证签名是否使用属于受信任根的密钥。请记住,这很难做到,例如确保您不会接受重播攻击等。

答案 1 :(得分:0)

当我调用RSACryptoServiceProvidersa.Decrypt时,看起来PIN请求正在发生。

这是在控制台应用中完美适合我的示例代码:

http://blog.aggregatedintelligence.com/2010/02/encryptingdecrypting-using.html

在ASP.NET中更简单(除了所有IIS配置麻烦/神秘......)。