2010-12-17 4 views
0

私は、次のコードを使用しています:X509CertificateStore.FindCertificateBySubjectNameはx64では機能しませんか?

store = X509CertificateStore.LocalMachineStore(X509CertificateStore.RootStore); 

      store.OpenRead(); 

      Microsoft.Web.Services2.Security.X509.X509CertificateCollection certs = 
       store.FindCertificateBySubjectName("CN=my cert bla bla"); 

      if (certs.Count == 0) { 
       Console.WriteLine("Not found!"); 
      } 

を私は、x86に私のプラットフォームターゲットを設定すると、それは私が入れた場合、それはX64 ...作品(または任意のCPU)それが見つからないと言います。 私は混乱しています、どんな助け?

ありがとうございました。

+0

そして、これが唯一の64ビットマシンで起こる... – Ishmail

+0

は、あなたの代わりにSystem.Security.Cryptography.X509Certificates内部のもののこれらのオブジェクトのWSEのバージョンを使用しているいくつかの理由がありますか? – EricLaw

答えて

0

このクラスのFindメソッドには、x64での作業を妨げるバグがあるようです。具体的には、IntPtrsを使用してネイティブメソッドにデータを送信しています。

回避策として、ストア内の証明書をループして手動で比較することもできます(下のサンプルを参照)。ハックでも、拇印またはシリアル番号を使用する方がよいでしょう。

より良い解決策は、サポートされているクラスSystem.Security.Cryptography.X509Certificates.X509Storeを使用して証明書にアクセスするようにアプリケーションを再接続することです。このクラスは64ビットモードで動作します。

foreach(X509Certificate cert in store.Certificates) 
{ 
    if (cert != null && cert.Subject.Contains("CN=my cert bla bla")) 
     return cert; 
} 
Console.WriteLine("Not found!"); 
関連する問題