2008-09-18 9 views
8

Ich habe ein bestimmtes Zertifikat auf meinem Server installiert. Dieses Zertifikat hat gültige Daten und scheint im MMC-Snap-In Windows-Zertifikate einwandfrei zu sein.Warum wird dieses X.509-Zertifikat als ungültig betrachtet?

Wenn ich jedoch versuche, das Zertifikat zu lesen, um es in einem HttpRequest zu verwenden, kann ich 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 Sammlung ist leer.

Die seltsame Sache ist, dass, wenn ich false passiere, anzeigende ungültige Zertifikate sind akzeptabel, enthält die Sammlung ein Element — das Zertifikat mit der angegebenen Seriennummer.

Fazit: Das Zertifikat erscheint gültig, aber die Find Methode behandelt es als ungültig! Warum?

Antwort

7

Versuchen Sie, die Zertifikatskette mit der Klasse X509Chain zu überprüfen. Dies kann Ihnen genau sagen, warum das Zertifikat nicht als gültig angesehen wird.

Wie von Erickson vorgeschlagen, verfügt Ihr X509Store möglicherweise nicht über das vertrauenswürdige Zertifikat der Zertifizierungsstelle in der Kette. Wenn Sie OpenSSL oder ein anderes Tool zum Generieren Ihrer eigenen selbstsignierten Zertifizierungsstelle verwendet haben, müssen Sie das öffentliche Zertifikat für diese Zertifizierungsstelle dem X509Store hinzufügen.

+0

Die Kettenzertifikate sind vorhanden, aber für diesen Benutzer irgendwie nicht zugänglich. Ich verwendete diesen Beispielcode von MSDN, um den Kettenstatus zu überprüfen: http://tinyurl.com/4wfnng. Dieser Code ruft abhängig vom Benutzer einen anderen Status ab. Ich werde versuchen, die Zertifikate neu zu installieren. Vielen Dank. – pvieira

2

Ich glaube, dass x509 certs an einen bestimmten Benutzer gebunden sind. Könnte es ungültig sein, weil Sie im Code auf einen anderen Benutzer als den Benutzer zugreifen, für den er erstellt wurde?

5

Ist das Zertifikat des Ausstellers im X509Store vorhanden? Ein Zertifikat ist nur gültig, wenn es von einer Vertrauensperson signiert wurde.

Ist dies ein Zertifikat von einer echten Zertifizierungsstelle oder eines, das Sie selbst signiert haben? Tools zur Zertifikatsignierung, die häufig von Entwicklern wie OpenSSL verwendet werden, fügen standardmäßig keine wichtigen Erweiterungen hinzu.