Warum ist dieses X.509-Zertifikat als ungültig betrachtet?
-
01-07-2019 - |
Frage
Ich habe ein bestimmtes Zertifikat auf meinem Server installiert. Das Zertifikat hat gültige Daten und scheint durchaus möglich, in der Windows-Zertifikate MMC-Snap-In.
Allerdings, wenn ich versuche, das Zertifikat zu lesen, um es in einem Httprequest zu verwenden, ich kann es nicht finden. Hier ist der Code verwendet:
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col =
store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true);
xxx
ist die Seriennummer; das Argument true
bedeutet „nur gültige Zertifikate“. Die zurückgegebene Auflistung ist leer.
Das Merkwürdige ist, dass, wenn ich false
passieren, was anzeigt, ungültige Zertifikate ist akzeptabel, die Sammlung enthält ein Element-Zertifikat mit dem angegebenen Seriennummer.
Fazit: Das Zertifikat wird gültig, aber die Find
Methode behandelt sie als ungültig! Warum?
Lösung
Versuchen Sie, die Zertifikatskette Überprüfung der X509Chain Klasse. Dies kann Ihnen genau sagen, warum das Zertifikat nicht gültig betrachtet.
Wie erickson vorgeschlagen, Ihre X509Store möglicherweise nicht über das vertrauenswürdige Zertifikat von der Zertifizierungsstelle in der Kette. Wenn Sie OpenSSL oder ein anderes Werkzeug verwendet, um Ihre eigene selbstsignierte CA zu generieren, müssen Sie das öffentliche Zertifikat für die CA an die X509Store hinzuzufügen.
Andere Tipps
Ist das Zertifikat vorhanden des Emittenten im X509Store? Ein Zertifikat ist nur gültig, wenn sie von jemandem unterschrieben ist, denen Sie vertrauen.
Ist das ein Zertifikat von einem echten CA, oder eine, die Sie sich selbst unterschrieben? Certificate Signing-Tools häufig von Entwicklern verwendet, wie OpenSSL, nicht einige wichtige Erweiterungen standardmäßig hinzu.
Ich glaube, x509 Zert an einen bestimmten Benutzer gebunden sind. Könnte es ungültig sein, weil in dem Code, den Sie es als ein anderer Benutzer als die zugreifen, für die sie geschaffen wurde?