Почему x509Store.Certificates.Find возвращает пустую коллекцию, даже если сертификат существует?C#

Место общения программистов C#
Anonymous
Почему x509Store.Certificates.Find возвращает пустую коллекцию, даже если сертификат существует?

Сообщение Anonymous »

У меня есть сертификат X509, хранящийся в хранилище сертификатов под моей системной учетной записью, который я проверил визуально с помощью «Выполнить» -> mmc.
Следующий код успешно отображает мой сертификат:

Код: Выделить всё

using (var x509Store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
x509Store.Open(OpenFlags.ReadOnly);

X509Certificate2Collection certificateCollection1 = x509Store.Certificates;

Console.WriteLine($"Listing all available certificates count: {certificateCollection1.Count}");

foreach (var certificate2 in certificateCollection1)
{
Console.WriteLine($"Subject: {certificate2.Subject}");
Console.WriteLine($"Issuer: {certificate2.Issuer}");
Console.WriteLine($"Thumbprint: {certificate2.Thumbprint}");
Console.WriteLine("-------------------------------");

Однако, когда я использую любой из следующих методов:

Код: Выделить всё

certificateCollection = x509Store.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certificate2.Subject, true);
или

Код: Выделить всё

certificateCollection = x509Store.Certificates.Find(X509FindType.FindBySubjectName, certificate2.GetNameInfo(X509NameType.SimpleName, false), true);
и затем, когда я пытаюсь отобразить свое свойство certificatecollection, счетчик равен 0

Код: Выделить всё

Console.WriteLine($"Listing all available internal certificates count: {certificateCollection.Count}");
writer.WriteLine($"Listing all available internal certificates count: {certificateCollection.Count}");
Я использую то же имя субъекта или имя сертификата для отображения списка сертификатов, но он возвращает 0. Это отлично работает на моем компьютере, но когда тот же код развертывается в рабочей среде машины, некоторые из них не могут найти сертификат. Когда сертификат присутствует на компьютере и для поиска используется то же имя (я уверен, что не ошибся, поскольку использую ту же переменную, возвращаемую X509Certificate2Collection), он возвращает пустую коллекцию.
Мне хотелось бы понять, что я делаю не так с методом x509Store.Certificates.Find.

Подробнее здесь: https://stackoverflow.com/questions/786 ... hen-the-ce

Вернуться в «C#»