ServicePointManager是用于创建、 维护和删除的实例的静态类ServicePoint类。

当应用程序请求对 Internet 资源统一资源标识符 (URI) 的连接通过ServicePointManager对象,ServicePointManager返回ServicePoint对象,其中包含的主机和方案通过 URI 标识的连接信息。 如果没有现有ServicePoint方案,该主机以及对象ServicePointManager对象返回现有ServicePoint对象; 否则为ServicePointManager对象创建一个新ServicePoint对象。

.NET Framework 4.6 包括一个新的安全功能,将阻止不安全的密码和哈希算法的连接。 默认情况下,使用 TLS/SSL 通过例如 HttpClient、 HttpWebRequest、 FTPClient、 SmtpClient、 SslStream 等的 Api 和面向.NET Framework 4.6 的应用程序获得更安全行为。

开发人员可能想要选择退出此行为以便保持其现有 SSL3 服务或 TLS 带 RC4 服务与互操作性。 This article说明如何修改你的代码,以便禁用新的行为。

当我们要使用servicepointmanager.servercertificateValidationCallback验证我们请求的证书时,如果请求是一个https请求,并且有多个线程并发请求的话,由于servicepointmanager是一个全局变量,只设置一次那么整个相关的https的请求都会进入这个回调函数中,并且不能单独设置,这个时候你就要注意使用方法了,如果你想设置多个回调来分别区分的话,由于多线程的存在,会使得你的回调乱串,即回调不知道使用了那个,有兴趣的朋友可以开多线程测试一下。

基于以上的原因,其实在使用这个类时,最好的方法是:由于serverpointmanger是一个全局变量,那个全局最好就只设置一次回调方法,所有的请求都到这里去区分,这里怎么区分请求是有技巧的,

1 public delegate bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

回调方法如上,我们可以看这个函数的参数,总共三个,其中有两个是无法更改,只有第一个参数,是一个object类型,那我们就利用这个参数,让我们的请求从这个参数中把参数带过来一个标志或其他参数,由于是https请求,所以一般我们使用的是HttpWebRequest这个类来请求路径,我们可以在这个类中添加Headers或者cookies参数,并且是会传到上面的回调的sender里的。

 1 HttpWebRequest request = null;
 2             HttpWebResponse response = null;
 3             StreamReader streamReader = null;
 4
 5                 var encoding = Encoding.UTF8;
 6
 7                 request = (HttpWebRequest)WebRequest.Create(url);
 8                 request.Method = "post";
 9                 request.ContentType = "text/xml";
10                 request.Headers.Add("charset:utf-8");
11                 request.Timeout = 15 * 1000; // 15 秒
12
13                 request.Headers.Set(HttpRequestHeader.UserAgent, "login");

使用方案:

1 private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
2         {
3                     bool IsLogin = false;
4                     HttpWebRequest httpWebrequest = (HttpWebRequest)sender;
5                     string domain = httpWebrequest.Address.Host;
6   }

通过以上方案即可解决多线程调用证书验证,并带参数区分的问题。

转载于:https://www.cnblogs.com/zuimengaitianya/p/9120978.html

ServicePointManager.ServerCertificateValidationCallback 冲突的解决相关推荐

  1. element-ui和semantic-ui冲突的解决方法--局部引入semantic-ui的css

    element-ui和semantic-ui冲突的解决方法--局部引入semantic-ui的css 参考文章: (1)element-ui和semantic-ui冲突的解决方法--局部引入seman ...

  2. 我爱Java系列---【 maven依赖版本冲突的解决方法】

    我爱Java系列---[ maven依赖版本冲突的解决方法] 参考文章: (1)我爱Java系列---[ maven依赖版本冲突的解决方法] (2)https://www.cnblogs.com/hu ...

  3. Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突)

    Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突) 参考文章: (1)Intellij+maven:jar包冲突的解决方法(Hbase和Guava的冲突) (2)ht ...

  4. github上的版本和本地版本冲突的解决方法(Updates were rejected because the tip of your current branch is behind)

    github上的版本和本地版本冲突的解决方法(Updates were rejected because the tip of your current branch is behind) 参考文章: ...

  5. ios 静态库冲突的解决办法

    参考:http://www.cnblogs.com/machao/p/5288460.html ios 静态库冲突的解决办法 最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的 ...

  6. Git冲突与解决方法【转】

    本文转载自:https://www.cnblogs.com/gavincoder/p/9071959.html Git冲突与解决方法 1.git冲突的场景 情景一:多个分支代码合并到一个分支时: 情景 ...

  7. git与eclipse集成之代码冲突与解决

    1.1. 代码冲突与解决 目前使用git管理代码,产生冲突的原因,主要是当多个人向特性分支提交代码时,如果两个人修改了同一个文件,第二个人提交代码时就可能会冲突. 举例说明: 创建远程特性分支.远程个 ...

  8. Algorithms_算法专项_Hash算法的原理哈希冲突的解决办法

    文章目录 引导案例 案例一 案例二 hash表(散列表) 哈希函数(散列函数) 哈希碰撞( 哈希冲突 ) 如何解决hash冲突(hash碰撞) 开放寻址 线性探测(LP) 二次探测 (平方探测 QP) ...

  9. 最好的电脑系统_热键被占用怎么办?电脑系统 程序 游戏热键被占用冲突如何解决?...

    最近有位朋友在使用电脑的时候,遇到了热键被占用的问题,不知道怎么去解决.其实,Windows系统程序 软件热键被占用的情况,通常是因为同一个热键,被不同的程序使用,无法兼容,产生冲突.下面就来看看电脑 ...

最新文章

  1. JXJJOI2018_T1_market
  2. 一行Python代码能实现什么丧心病狂的功能?
  3. 事件相机特征跟踪-模板跟踪方法
  4. MobileNetV1/V2/V3简述 | 轻量级网络
  5. SQL server数据库系统部分常用的存储过程及说明
  6. Laravel事件Event
  7. 数字图像处理实验三图像增强
  8. Java工作笔记-使用Maven创建多模块项目
  9. sublime用cmd窗口调试python_Sublime Text设置程序输出窗口为dos窗口
  10. linux7网卡启动的过程,linux网络启动
  11. [渝粤教育] 西南科技大学 材料力学 在线考试复习资料
  12. 纳斯达克收购金融数据提供商Quandl
  13. sikuli+eclipse对于安卓app自动化测试的应用(第一次写博客,有些语言还不太专业,望海涵)...
  14. STK 12.5.0发布
  15. 从零开始学习ThingJS之创建/销毁物体
  16. 宝塔站点配置SSL证书
  17. Git HEAD detached from origin(冲突解决后无法正常push) 问题的解决方案
  18. 连续8年 远见领跑|山石网科入选Gartner 2021网络防火墙魔力象限
  19. 第一届“字根杯”大学生形象代言人活动启动啦
  20. 数据分析报告常见步骤

热门文章

  1. 页面分享怎么知道通过哪条链接进来的_亚马逊Coupon怎么设置?亚马逊Coupon对获取流量有哪些帮助?...
  2. MinIO环境搭建及使用
  3. js中判断数组中是否包含某元素的方法
  4. 在HTML中使用JavaScript
  5. ServletConfig对象和ServletContext对象配置初始化参数
  6. idea生成类中序列化id
  7. Velocity教程【转】
  8. Spring Boot使用自定义的properties
  9. bootstrap ace admin 整合java HTML5
  10. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群 (2)