X509CertificateStore.FindCertificateBySubjectName在x64中不起作用?

时间:2010-12-17 15:01:15

标签: .net x509certificate

我使用以下代码:

 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),它说没有找到。 我很困惑,有什么帮助吗?

非常感谢。

1 个答案:

答案 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!");