0

我有一个证书,我需要使用它才能访问 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
4

2 回答 2

1

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

于 2011-03-28T20:34:32.863 回答
0

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

因此,您将不得不 pinvoke CryptSetProvParam 来执行此操作。

于 2011-04-27T14:54:56.363 回答