【问题标题】:X509Certificate2 request PINX509Certificate2 请求 PIN
【发布时间】:2016-08-08 20:40:06
【问题描述】:

我能够成功识别 .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[] 中?)。

我对获取实际密码并不像卡/密码匹配那样感兴趣。

编辑:

我尝试使用智能卡中的私钥(甚至从中加密),但系统没有要求我提供 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);

【问题讨论】:

    标签: c# x509certificate x509 x509certificate2


    【解决方案1】:

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

    您需要以某种方式使用证书,并验证结果。例如,您可能会使用证书来签署某些东西。一旦签名操作发生,就会出现pin提示。

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

    【讨论】:

    • 似乎不起作用。我在编辑中添加了上面发布的代码,其中私钥用于加密一些任意文本,但没有被要求输入 PIN。
    • 如果私钥/证书确实加密/签署了某些内容,那么听起来它并没有受到 pin 保护。
    • 也许不是......当我从 MVC 执行此操作时 SslFlags="SslNegotationCertificate" 它会请求我的 PIN,除非它是正确的 PIN,否则它将无法工作。因此,这似乎也应该可以从胖客户端应用程序中实现。
    【解决方案2】:

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

    以下是在控制台应用中非常适合我的示例代码:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多