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を入力するのはちょっと難しいです:)

したがって、それを行うには CryptSetProvParam を pinvoke する必要があります。

于 2011-04-27T14:54:56.363 に答える