3 回答
TA贡献1818条经验 获得超11个赞
事实证明,如果您只想完全禁用证书验证,则可以在ServicePointManager上更改ServerCertificateValidationCallback,如下所示:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
这将验证所有证书(包括无效,过期或自签名的证书)。
TA贡献1719条经验 获得超6个赞
使用代理上的sender参数,可以将Domster答案中使用的验证回调的范围限制为特定请求ServerCertificateValidationCallback。以下简单的作用域类使用此技术临时连接仅对给定请求对象执行的验证回调。
public class ServerCertificateValidationScope : IDisposable
{
private readonly RemoteCertificateValidationCallback _callback;
public ServerCertificateValidationScope(object request,
RemoteCertificateValidationCallback callback)
{
var previous = ServicePointManager.ServerCertificateValidationCallback;
_callback = (sender, certificate, chain, errors) =>
{
if (sender == request)
{
return callback(sender, certificate, chain, errors);
}
if (previous != null)
{
return previous(sender, certificate, chain, errors);
}
return errors == SslPolicyErrors.None;
};
ServicePointManager.ServerCertificateValidationCallback += _callback;
}
public void Dispose()
{
ServicePointManager.ServerCertificateValidationCallback -= _callback;
}
}
上面的类可用于忽略特定请求的所有证书错误,如下所示:
var request = WebRequest.Create(uri);
using (new ServerCertificateValidationScope(request, delegate { return true; }))
{
request.GetResponse();
}
- 3 回答
- 0 关注
- 987 浏览
添加回答
举报