2010-12-20 41 views
7

我正在尋找一種以聲明方式禁用證書驗證的方法。 這將是非常有用的,即使用svcutil.exe時。有沒有辦法從* .config文件中聲明設置ServicePointManager的ServerCertificateValidationCallback屬性?

到目前爲止,我知道如何禁用主機名驗證:

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

但這不是sufficent。 我見過有人聲稱這可以完成,但沒有任何樣本。

+0

不是說明性的,但你可以使用Fiddler解決證書驗證問題和傻瓜svcutil :) – 2012-08-08 13:31:11

回答

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

是的,我知道這個,但它不是聲明。 – 2011-02-09 12:38:19

4

我使用這個醜陋的黑客只在單元測試:(

的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

我用這使用HttpClient時:

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

我把它從互聯網上拿下來,不記得從哪裏。 它適用於我的後端調用。

相關問題