我使用以下代码:
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 :(得分:1)
看起来这个类的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!");