使用X509Certificate而无需密码

时间:2011-03-28 20:27:41

标签: c# x509certificate2

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

I hate this window

如果有任何帮助,证书使用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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

所以,你必须对CryptSetProvParam进行调整才能做到这一点。