我能够在.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);
答案 0 :(得分:0)
如果这是智能卡,当您尝试使用证书的私钥时,会出现针脚提示。
您需要以某种方式使用证书,并验证结果。例如,您可以使用证书对某些内容进行签名。一旦签名操作发生,将出现针脚提示。
如果你真的不需要“使用”证书,只想验证它在那里并且用户知道该引脚,那么你需要某种工作证明。证书可用于签署质询,远程服务器可以验证签名是否使用属于受信任根的密钥。请记住,这很难做到,例如确保您不会接受重播攻击等。
答案 1 :(得分:0)
当我调用RSACryptoServiceProvidersa.Decrypt时,看起来PIN请求正在发生。
这是在控制台应用中完美适合我的示例代码:
http://blog.aggregatedintelligence.com/2010/02/encryptingdecrypting-using.html
在ASP.NET中更简单(除了所有IIS配置麻烦/神秘......)。