c# – 多个线程设置ServicePointManager.ServerCertificateValidationCallback是否安全?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 多个线程设置ServicePointManager.ServerCertificateValidationCallback是否安全?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1457字,纯文字阅读大概需要3分钟。
内容图文
![c# – 多个线程设置ServicePointManager.ServerCertificateValidationCallback是否安全?](/upload/InfoBanner/zyjiaocheng/824/0a362b682d4640258473d755772c3dcb.jpg)
要忽略ssl证书错误,我在进行HttpWebRequest之前在静态方法中设置ServicePointManager.ServerCertificateValidationCallback.我只希望对内部请求执行此操作,因此我将属性重置为finally块中的默认值.但是因为它是一个Web应用程序,当多个线程修改属性时会出现问题吗?
这是我如何使用该属性
public static String GetResource()
{
try
{
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
}
catch()
{
}
finally
{
ServicePointManager.ServerCertificateValidationCallback -= delegate { return false; };
}
}
>此代码是否是线程安全的? msdn上的文档说ServicePointManager类型的任何静态成员都是线程安全的,但我只想确认一下.
http://msdn.microsoft.com/en-us/library/zkfa48de%28v=vs.80%29.aspx
> finally块中的代码是将它重置为默认值的正确方法吗?
解决方法:
如果需要覆盖默认证书验证,请考虑以下一项或多项:
>在应用程序启动期间或可能在静态构造函数中,只设置一次ServerCertificateValidationCallback.这消除了线程争用的风险.
>由于您使安全性更加宽松,因此使用条件编译限制调试构建的行为:
#if DEBUG
ServicePointManager.ServerCertificateValidationCallback += Callback;
#endif
>最后,请记住您的委托是一个丰富的功能.您不必简单地返回true.您可以询问请求并决定如何处理它.
ServicePointManager.ServerCertificateValidationCallback += Callback;
static bool Callback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (IsInternalRequest(sender))
{
return true;
}
else
{
return IsExternalRequestValid(sender, certificate, chain, sslPolicyErrors);
}
}
内容总结
以上是互联网集市为您收集整理的c# – 多个线程设置ServicePointManager.ServerCertificateValidationCallback是否安全?全部内容,希望文章能够帮你解决c# – 多个线程设置ServicePointManager.ServerCertificateValidationCallback是否安全?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。