2008-09-18 4 views
8

У меня есть данный сертификат, установленный на моем сервере. Этот сертификат имеет допустимые даты и выглядит совершенно корректным в оснастке MMC Windows сертификатов.Почему этот сертификат X.509 считается недействительным?

Однако, когда я пытаюсь прочитать сертификат, чтобы использовать его в HttpRequest, я не могу его найти. Вот код используется:

X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col = 
    store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true); 

xxx является серийным номером; аргумент true означает «только действительные сертификаты». Возвращенная коллекция пуста.

Странно то, что если я пройду false, указание допустимых сертификатов приемлемо, коллекция содержит один элемент — сертификат с указанным серийным номером.

В заключение: сертификат представляется действительным, но метод Find считает его недействительным! Зачем?

ответ

7

Пробуйте проверить цепочку сертификатов, используя класс X509Chain. Это может точно сказать, почему сертификат не считается действительным.

Как предположил erickson, ваш X509Store может не иметь доверенного сертификата от CA в цепочке. Если вы использовали OpenSSL или другой инструмент для создания собственного самозаверяющего ЦС, вам нужно добавить публичный сертификат для этого ЦС в X509Store.

+0

Сертификаты цепи присутствуют, но каким-то образом недоступны для этого пользователя. Я использовал этот пример кода из MSDN, чтобы проверить статус цепи: http://tinyurl.com/4wfnng. Этот код извлекает различный статус в зависимости от пользователя. Я попытаюсь переустановить сертификаты. Благодарю. – pvieira 2008-09-19 09:40:56

2

Я считаю, что сертификаты x509 привязаны к определенному пользователю. Может ли оно быть недопустимым, потому что в коде вы обращаетесь к нему как к другому пользователю, кроме того, для которого он был создан?

5

Является ли сертификат эмитента присутствующим в магазине X509? Сертификат действителен только в том случае, если он подписан кем-то, кому вы доверяете.

Это сертификат от реального ЦС, или тот, который вы подписали самостоятельно? Инструменты подписи сертификатов, которые часто используются разработчиками, например OpenSSL, по умолчанию не добавляют некоторые важные расширения.

Смежные вопросы