2010-12-20 3 views
7

Ich bin auf der Suche nach einer Möglichkeit, die Validierung von Zertifikaten auf deklarative Weise zu deaktivieren. Dies wäre sehr nützlich, z. B. bei der Verwendung von svcutil.exe.Gibt es eine Möglichkeit, ServicePointManager die ServerCertificateValidationCallback-Eigenschaft aus der * .config-Datei deklarativ festzulegen?

Bisher weiß ich, wie Host-Name Validierung deaktivieren:

<system.net> 
    <settings> 
     <servicePointManager checkCertificateName="false" /> 
    </settings> 
</system.net> 

aber sufficent nicht. Ich habe jemanden gesehen, der behauptet, dass das gemacht werden kann, aber ohne irgendeine Probe.

+0

Nicht deklarativ, aber Sie können Fiddler arbeiten rund um CERT-Validierungsprobleme und fool SVCutil :) –

Antwort

0
System.Net.ServicePointManager.ServerCertificateValidationCallback = 
       ((sender, certificate, chain, sslPolicyErrors) => true); 
+0

Ja, ich weiß darüber, aber es ist nicht deklarativ. –

4

Ich verwende diesen hässlichen Hack nur in Unittests mit :(

app.config:

<system.net> 
    <webRequestModules xdt:Transform="Insert"> 
     <clear/> 
     <add prefix = "http" type = "HttpRequestCreatorWithServerCertificateValidationCallback, TestHelpers"/> 
     <add prefix = "https" type = "HttpRequestCreatorWithServerCertificateValidationCallback, TestHelpers"/> 
    </webRequestModules> 
</system.net> 

HttpRequestCreatorWithServerCertificateValidationCallback.cs

public class HttpRequestCreatorWithServerCertificateValidationCallback : IWebRequestCreate 
{ 
    static HttpRequestCreatorWithServerCertificateValidationCallback() 
    { 
     var type = typeof(HttpWebRequest).Assembly.GetType("System.Net.HttpRequestCreator"); 
     var ctor = type.GetConstructors()[0]; 
     Creator = (IWebRequestCreate)ctor.Invoke(null); 

     ServicePointManager.ServerCertificateValidationCallback += delegate 
     { 
      return true; 
     }; 
    } 

    #region IWebRequestCreate Members 

    public WebRequest Create(Uri uri) 
    { 
     return Creator.Create(uri); 
    } 

    #endregion 

    private static readonly IWebRequestCreate Creator; 
} 
1

Ich bin mit diesem bei der Arbeit mit HttpClient:

<system.net> 
    <settings> 
     <servicePointManager 
      checkCertificateName="false" 
      checkCertificateRevocationList="false" /> 
    </settings> 
    </system.net> 

Ich nahm es aus dem Internet, nicht daran erinnern, von wo. Es funktioniert für meine Back-End-Anrufe.

Verwandte Themen