我正在寻找一种以声明方式禁用证书验证的方法。 这非常有用,即使用svcutil.exe时。
到目前为止,我知道如何禁用主机名验证:
<system.net>
<settings>
<servicePointManager checkCertificateName="false" />
</settings>
</system.net>
但这还不够。 我见过有人声称这可以做到,但没有任何样本。
答案 0 :(得分:4)
我正在使用这个丑陋的黑客只在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 :(得分:1)
我在使用HttpClient时使用它:
<system.net>
<settings>
<servicePointManager
checkCertificateName="false"
checkCertificateRevocationList="false" />
</settings>
</system.net>
我从互联网上拿走它,不记得从哪里来。 它适用于我的后端调用。
答案 2 :(得分:0)
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);