Есть ли способ декларативно установить свойство ServerCertificateValidationCallback ServicePointManager из файла * .config? - PullRequest
7 голосов
/ 20 декабря 2010

Я ищу способ отключить проверку сертификата декларативным способом. Это было бы очень полезно, т.е. при использовании svcutil.exe.

Пока я знаю, как отключить проверку имени хоста:

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

но этого недостаточно. Я видел, как кто-то утверждал, что это можно сделать, но без какого-либо образца.

Ответы [ 3 ]

4 голосов
/ 08 октября 2012

Я использую этот уродливый хак для использования только в 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 голос
/ 19 октября 2012

Я использую это при работе с HttpClient:

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

Я взял из интернета, не помню откуда. Это работает для моих внутренних вызовов.

0 голосов
/ 02 февраля 2011
System.Net.ServicePointManager.ServerCertificateValidationCallback =
                ((sender, certificate, chain, sslPolicyErrors) => true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...