WCF-Zertifikat der Kette, überprüfen Sie programmgesteuert
Ich versuche, die Zertifikate verwenden, programmgesteuert statt mithilfe des store. Ich Schaffe X509Certificate2
's mit mit dem Namen und Passwort.
Dies funktioniert gut wenn ich manuell Hinzugefügt werden, dem root-Zertifikat dem Zertifikatspeicher Vertrauenswürdige Personen. Allerdings würde ich das eher nicht zu tun haben, dass auf jedem deployment - ich würde lieber mit ihm umgehen, programmgesteuert zu.
Wenn ich entfernen Sie das root-Zertifikat aus dem Zertifikatspeicher ich eine Ausnahme.
Alles, was ich gelesen habe scheint zu sagen, dass ich auf manuell Hinzugefügt werden, dem root-Zertifikat der Zertifikat-Speicher, oder der Trust Chain nicht funktionieren.
Frage: gibt es eine programmatische Möglichkeit zum einrichten der Trust-Kette, so dass ich nicht haben, um es manuell tun?
Der code sieht wie folgt aus:
var serverCert = new X509Certificate2("FullPathToMyCertificate.cer", "Password");
Client.ClientCredentials.ServiceCertificate.DefaultCertificate = serverCert;
Ausnahme, die tritt auf wenn ich versuche den Client verwenden, ist:
System.IdentityModel.Tokens.SecurityTokenValidationException
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US is not in the trusted people store.
The X.509 certificate CN=notrealcertname, OU=TPA, OU=BMP, OU=Projects, O=Somebody, C=US chain building failed.
The certificate that was used has a trust chain that cannot be verified.
Replace the certificate or change the certificateValidationMode.
A certificate chain could not be built to a trusted root authority.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Komponente prüft die Ketten standardmäßig - wenn die Kette nicht überprüft werden kann erhalten Sie, die Ausnahme.
WENN Sie wollen, alles zu tun, einschließlich der überprüfung der Kette im code, dann müssen Sie implementieren Sie "benutzerdefinierte überprüfung" und zu integrieren, dass in der WCF-Host:
Eine andere Möglichkeit wäre die überprüfung deaktivieren, insgesamt (NICHT für die Produktion !!!)
BEARBEITEN - nach dem Kommentar:
Für die überprüfung der Kette sollten Sie einen Blick auf X509Chain und X509Store - um eine Vorstellung zu bekommen, wie so eine Kette-überprüfung umgesetzt werden könnte, werfen Sie einen Blick auf Mono-Implementierung der
Verify
... im Grunde verwenden Sie dieFind
Methode zur Suche nach einem X509Certificate2Collection, für die Eltern und so weiter... überprüfung Kriterien mit einer benutzerdefinierten Validierung ist bis zu Ihnen (Unterschrift gültig, nicht abgelaufen...).einige Referenz-links auf MSDN:
http://msdn.microsoft.com/en-us/library/system.servicemodel.security.x509servicecertificateauthentication.certificatevalidationmode.aspx
http://msdn.microsoft.com/en-us/library/system.identitymodel.selectors.x509certificatevalidator.aspx
http://msdn.microsoft.com/en-us/library/ms733806.aspx