Почему этот сертификат X.509 считается недействительным?
-
01-07-2019 - |
Вопрос
У меня на сервере установлен данный сертификат.Этот сертификат имеет действительные даты и кажется совершенно действительным в оснастке MMC сертификатов Windows.
Однако когда я пытаюсь прочитать сертификат, чтобы использовать его в 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
метод считает его недействительным!Почему?
Решение
Попробуйте проверить цепочку сертификатов с помощью X509Цепь сорт.Это может точно сказать вам, почему сертификат не считается действительным.
Как предположил Эриксон, ваш X509Store может не иметь доверенного сертификата ЦС в цепочке.Если вы использовали OpenSSL или другой инструмент для создания собственного самозаверяющего центра сертификации, вам необходимо добавить общедоступный сертификат этого центра сертификации в X509Store.
Другие советы
Присутствует ли сертификат эмитента в X509Store?Сертификат действителен только в том случае, если он подписан кем-то, кому вы доверяете.
Это сертификат реального центра сертификации или вы подписали его самостоятельно?Инструменты подписи сертификатов, часто используемые разработчиками, такие как OpenSSL, по умолчанию не добавляют некоторые важные расширения.
Я считаю, что сертификаты x509 привязаны к конкретному пользователю.Может ли он быть недействительным, потому что в коде вы обращаетесь к нему от имени другого пользователя, а не от того, для которого он был создан?