2008-09-18 17 views
8

Mam dany certyfikat zainstalowany na moim serwerze. Certyfikat ma ważne daty i wydaje się być całkowicie poprawny w snap-in MMC certyfikatów systemu Windows.Dlaczego ten certyfikat X.509 jest uznany za nieważny?

Jednak, gdy próbuję odczytać certyfikat, aby go użyć w HttpRequest, nie mogę go znaleźć. Oto używany kod:

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

xxx to numer seryjny; Argument true oznacza "tylko ważne certyfikaty". Zwrócona kolekcja jest pusta.

Dziwne jest to, że jeśli przekażę false, akceptując nieprawidłowe certyfikaty, kolekcja zawiera jeden element o numerze — z określonym numerem seryjnym.

Podsumowując: certyfikat wydaje się ważny, ale metoda Find traktuje go jako nieważny! Czemu?

Odpowiedz

7

Spróbuj zweryfikować łańcuch certyfikatów, używając klasy X509Chain. To może dokładnie wyjaśnić, dlaczego certyfikat nie jest uważany za prawidłowy.

Jak sugerował erickson, Twój X509Store może nie mieć zaufanego certyfikatu od CA w łańcuchu. Jeśli korzystasz z OpenSSL lub innego narzędzia do generowania własnego, samopodpisanego urzędu certyfikacji, musisz dodać certyfikat publiczny dla tego urzędu certyfikacji do X509Store.

+0

Certyfikaty łańcucha są obecne, ale w jakiś sposób nie były dostępne dla tego użytkownika. Użyłem tego przykładowego kodu z MSDN, aby sprawdzić status łańcucha: http://tinyurl.com/4wfnng. Ten kod retruns inny status w zależności od użytkownika. Spróbuję ponownie zainstalować certyfikaty. Dzięki. – pvieira

2

Uważam, że certyfikaty x509 są powiązane z konkretnym użytkownikiem. Czy może być nieważny, ponieważ w kodzie uzyskujesz dostęp do niego jako inny użytkownik niż ten, dla którego został utworzony?

5

Czy certyfikat wystawcy znajduje się w X509Store? Certyfikat jest ważny tylko wtedy, gdy jest podpisany przez osobę, której ufasz.

Czy jest to certyfikat z prawdziwego urzędu certyfikacji, czy też taki, który został podpisany? Narzędzia do podpisywania certyfikatów często używane przez programistów, takie jak OpenSSL, nie dodają domyślnie niektórych ważnych rozszerzeń.