2013-08-26 6 views
9

Ich habe einen etwas veralteten Beispielcode heruntergeladen. Es hat die folgende Klasse:System.Net.CertificatePolicy to ServerCertificateValidationCallback Akzeptieren Sie alle Zertifikatsrichtlinien

public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy 
{ 
    public TrustAllCertificatePolicy() 
    { } 

    public bool CheckValidationResult(ServicePoint sp, 
       System.Security.Cryptography.X509Certificates.X509Certificate cert, 
       WebRequest req, 
       int problem) 
    { 
     return true; 
    } 
} 

später im Code ruft folgendes:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); 

Es gibt die folgende Warnung:

Warnung 1 ‚System.Net.ServicePointManager .CertificatePolicy 'ist veraltet:' CertificatePolicy ist für diesen Typ veraltet, bitte verwenden Sie stattdessen ServerCertificateValidationCallback. http://go.microsoft.com/fwlink/?linkid=14202 '

Wie lautet das aktuelle Verfahren zum Erzielen der entsprechenden Funktionalität?

Ich habe eine article auf MSDN gelesen, aber ich bin mir nicht sicher, wie Sie konvertieren? Dies ist für eine Klassenbibliothek. Ich entschuldige mich, wenn es so aussieht, als hätte ich nicht genug recherchiert, aber wenn es um SSL-Zertifikate geht, ist es ein bisschen außerhalb meines Reiches. Jede Hilfe wird sehr geschätzt!

+1

Sieht so aus, als ob wir den gleichen Beispielcode verwenden, danke für die Frage :) – CularBytes

Antwort

14

Fügen Sie die folgende Klasse in Ihrem Code

public static class SSLValidator 
     { 
      private static bool OnValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, 
                 SslPolicyErrors sslPolicyErrors) 
      { 
       return true; 
      } 
      public static void OverrideValidation() 
      { 
       ServicePointManager.ServerCertificateValidationCallback = 
        OnValidateCertificate; 
       ServicePointManager.Expect100Continue = true; 
      } 
     } 

die folgende Dann rufen, bevor Sie Service Anruf aber vorsichtig sein, diesen Code auf die Produktion zu entfernen, wenn Sie

SSLValidator.OverrideValidation(); 

echte certs oder Sie können Folgendes tun, um es nur für das Debuggen zu verwenden

#if DEBUG 

      SSLValidator.OverrideValidation(); 
#endif 
+0

Diese Lösung hatte keine negativen Auswirkungen auf die Anwendung. Danke für die Antwort. – Oxymoron

+0

Würde es Ihnen etwas ausmachen, die letzte Codezeile in der Klasse 'SSLValidator' zu erklären. der 'ServicePointManager.Expect100Continue' Teil. Was ist "Expect100Continue"? – Oxymoron

+1

Sie haben eine detaillierte Erklärung hier http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.expect100continue.aspx –

2

Ich benutze die bei der Verbindung mit anderen Webdiensten folgen.

//workaround for SSL certificate issue 
ServicePointManager.ServerCertificateValidationCallback = 
    (sender, certificate, chain, sslPolicyErrors) => { return true; }; 
Verwandte Themen