2010-12-20 11 views
7

Estoy buscando una forma de desactivar la validación de certificados de forma declarativa. Esto sería muy útil, es decir, cuando se usa svcutil.exe.¿Hay alguna forma de establecer declarativamente la propiedad ServerCertificateValidationCallback de ServicePointManager desde el archivo * .config?

Hasta ahora no saben cómo deshabilitar la validación de nombre de host:

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

pero esto no es sufficent. He visto a alguien decir que se puede hacer esto, pero sin ninguna muestra.

+0

No declarativo, pero puede usar el trabajo de Fiddler alrededor de los problemas de validación de cert y tonto svcutil :) –

Respuesta

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

Sí, sé de esto, pero no es declarativo. –

4

estoy usando este truco feo para usar sólo en unittests :(

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

estoy usando este cuando se trabaja con HttpClient:

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

Lo tomé de Internet, no recuerdo de dónde. Funciona para mis llamadas al back-end.

Cuestiones relacionadas