C# X509Certificate2请求PIN

C# X509Certificate2请求PIN,c#,x509certificate,x509,x509certificate2,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.

我能够在.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)

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

我对获取实际pin的兴趣不如我对卡/pin匹配感兴趣

编辑:

我尝试使用智能卡上的私钥(甚至用它加密),但没有人问我密码

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

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

您需要以某种方式使用证书,并验证结果。例如,您可以使用证书对某些内容进行签名。签名操作完成后,将出现pin提示


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

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

您需要以某种方式使用证书,并验证结果。例如,您可以使用证书对某些内容进行签名。签名操作完成后,将出现pin提示


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

看起来PIN请求是在我调用rsacyptoserviceprovidersa.Decrypt时发生的

下面的示例代码在控制台应用程序中非常适合我:


在ASP.NET中要简单得多(除了所有IIS配置麻烦/谜团…。

看起来PIN请求是在我调用rsacryptserviceprovidersa.Decrypt时发生的

下面的示例代码在控制台应用程序中非常适合我:


在ASP.NET中要简单得多(除了所有IIS配置麻烦/谜团…。

似乎不起作用。我在上面的编辑中添加了代码,其中私钥用于加密一些任意文本,但我没有被要求输入PIN。如果私钥/证书确实加密/签名了某些内容,那么听起来它不像是PIN保护的。也许不是。。。当我从MVC执行此操作时,当SslFlags=“SslNegotationCertificate”请求我的PIN时,除非它是正确的PIN,否则它将无法工作。所以,这似乎也可以从厚客户端应用程序中实现。似乎不起作用。我在上面的编辑中添加了代码,其中私钥用于加密一些任意文本,但我没有被要求输入PIN。如果私钥/证书确实加密/签名了某些内容,那么听起来它不像是PIN保护的。也许不是。。。当我从MVC执行此操作时,当SslFlags=“SslNegotationCertificate”请求我的PIN时,除非它是正确的PIN,否则它将无法工作。因此,这似乎也可以从厚客户端应用程序中实现。