2010-12-17 54 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 2010-12-17 15:32:39

+0

有你使用這些對象,而不是內部System.Security.Cryptography.X509Certificates的那些的WSE版本的一些原因? – EricLaw 2011-02-25 14:58:02

回答

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!"); 
相關問題