Wir führen zufällig einen REST-API-Dienst aus, der einen https://
-Endpunkt verfügbar macht. Kürzlich haben wir unser SSL-Zertifikat geändert und mehrere Benutzer, hauptsächlich libcurl- und Java-Benutzer, haben sich beschwert, dass sie das Zertifikat nicht mehr validieren können und ihre Programme sich nicht mehr mit unserem Dienst verbinden können. Andere Benutzer, einschließlich .NET-Benutzer, haben keine Probleme festgestellt. Firefox ist auch glücklich, Seiten auf der Website mit diesem Zertifikat zu öffnen.Wie führe ich die schwierigste SSL-Zertifikatsprüfung mit .NET-Code durch?
Wir müssen einen Code erstellen, der die Zertifikate auf die härteste Weise validiert, bevor wir sie in der Produktion verwenden.
ich in Handarbeit ein Stück Code, der ein X509Certificate2
Objekt für das Zertifikat erstellt und dann versucht, X509Chain.Build()
von ihm:
var certDataArray = File.ReadAllBytes(path);
var cert = new X509Certificate2(certDataArray, password);
var chain = new X509Chain();
var result = chain.Build(cert);
var status = chain.ChainStatus;
Dieser Code läuft in Ordnung für unsere vorherigen Zertifikat (die noch nicht abgelaufen ist) und nicht (Build()
liefert false
und X509Chain.ChainStatus
enthält eine Anzahl von Elementen - X509ChainStatusFlags.RevocationStatusUnknown
, X509ChainStatusFlags.PartialChain
, X509ChainStatusFlags.OfflineRevocation
). So wie es für dieses spezifische Zertifikat aussieht, reicht diese Überprüfung aus.
Ist X509Chain.Build()
genug, um sicherzustellen, dass alle unsere Benutzer das Zertifikat erfolgreich validieren können? Sind noch weitere Überprüfungen notwendig?
Was haben Sie an Ihrem Zertifikat geändert? Haben Sie einen neuen CA/Aussteller verwendet? –
@ stephen.vakil Das neue Zertifikat stammt von einer anderen Zertifizierungsstelle und mit dieser CA-Infrastruktur stimmt etwas nicht, was eine gründliche Überprüfung verhindert hat. Ist es wirklich wichtig? – sharptooth