X509CertificateStore.FindCertificateBySubjectName не работает в x64? - PullRequest
0 голосов
/ 17 декабря 2010

Я использую следующий код:

 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 (или любой процессор), он говорит, что не найдено Я в замешательстве, любая помощь?

Большое спасибо.

1 Ответ

1 голос
/ 02 февраля 2011

Похоже, есть ошибка в методах 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!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...