2017-06-28 3 views
0

Ich muss auf einen REST-Service zugreifen, der ein Zertifikat hat, das nicht wirklich gültig ist. So trat ich in die folgenden in meinem Code:ServerCertificateValidationCallback zurücksetzen

 System.Net.ServicePointManager.ServerCertificateValidationCallback = 
      ((sender, cert, chain, errors) => 
      cert.Subject.Contains("soap.example.com")); 

Danach habe ich das tun, was ich die Soap-Werte zu tun haben, abrufen.

Alles ist in Ordnung.

Aber später muss ich eine Verbindung zu einer anderen Domäne (die ein gültiges SSL-Zertifikat hat) und dies stürzt wegen eines Zertifikats Fehler, der verschwindet, wenn ich den IIS neu starten und kommt nur zurück, nachdem das oben angezeigte Code-Segment aufgerufen wird wieder:

System.Net.WebException: die zugrunde liegende Verbindung wurde geschlossen: Kann keine Vertrauensstellung für den sicheren SSL/TLS-Kanal aufzubauen. ---> System.Security.Authentication.AuthenticationException: Das Remote-Zertifikat ist gemäß dem Überprüfungsverfahren ungültig.

Nach dem Soap-Anruf, wie kann ich sicherstellen, dass das normale Verhalten wieder funktioniert?

Einfaches Zurücksetzen auf ServerCertificateValidationCallback=null scheint nicht zu funktionieren.

(Ich bin voll und ganz bewusst über die Gefahren des Callbacks)

+0

Mögliche Duplikat [Wie innen angepasst Validierung Standard ServerCertificateValidationCallback anrufen?] (Https://stackoverflow.com/questions/28679120/how-to-call-default-servercertificatevalidationcallback-inside-customized-valida) – mjwills

Antwort

1
System.Net.ServicePointManager.ServerCertificateValidationCallback = 
     ((sender, cert, chain, errors) => 
     errors == SslPolicyErrors.None || cert.Subject.Contains("soap.example.com")); 

den Trick tun sollten.

+0

Das sieht vielversprechend aus . Werde das versuchen. –

+0

Die fehlerfreie Prüfung ist gut. Die andere Seite könnte oder könnte etwas stützen. Das Problem ist, dass "thatsfunny.imnot.soap.example.com" als gültiges Zertifikat für "google.com" betrachtet wird, da nicht behauptet wird, dass "RemoteCertificateNameMatch" nicht gesetzt ist. (Und selbst dann wird es knifflig) – bartonjs

+0

Ich stimme @bartonjs zu. Nichtsdestoweniger hielt ich diesen Code für konsistent mit der gestellten Frage. – mjwills

Verwandte Themen