【问题标题】:Use X509Certificate without requiring passphrase无需密码即可使用 X509Certificate
【发布时间】:2011-04-27 22:54:56
【问题描述】:

我有一个证书,我需要使用它才能访问 Web 服务。问题是每当我尝试使用 X509 证书时,它都会要求输入密码 (PIN)。有没有办法直接提供密码,而不是每次都弹出同一个窗口?

如果有任何帮助,该证书使用 Oberthur Technologies 制造的加密狗。这是我用来获取证书的代码:

X509Store store = new X509Store("MY",StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;

if(collection.Count != 0)
    userCert = collection[0]; // everything's ok up to here

这是我使用证书的地方:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(url));
req.ClientCertificates.Add(userCert); // add the certificate I just got
// ...
WebResponse ret = req.GetResponse(); // here's where it asks me for my passphrase

【问题讨论】:

    标签: c# x509certificate2


    【解决方案1】:

    证书的私钥存储在 Oberthur 令牌中。它强制用户输入 PIN 以获得对证书私钥的访问权限。这是设计使然,不能被覆盖。

    【讨论】:

    • +1 感谢您提供的信息。不幸的是,这不是我想听到的。这是由 Oberthur 完成的,还是所有代币的标准功能(要求输入密码)?我问这个是因为我必须在其他人从控制台调用的应用程序中使用它。如果他们每次运行应用程序时都必须输入密码,那就太糟糕了。
    • 这是令牌的标准功能。通常,您可以将令牌软件配置为仅第一次提示,然后在再次提示之前允许 x 分钟访问证书。抱歉,我不知道 Oberthur 实现的细节。
    【解决方案2】:

    我正在寻找一种使用托管代码的方法,但还没有找到。 在过去,我刚刚使用选项 PP_SIGNATURE_PIN 和 PIN 作为数据调用了 CAPI 函数 CryptSetProvParam。这可以防止 CSP 提示用户输入 PIN。系统服务很难输入该 PIN :)

    因此,您必须调用 CryptSetProvParam 才能执行此操作。

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2020-11-12
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多