热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:如何清除任何SSL证书数据分享

如何清除任何SSL证书数据我有一个客户端–服务器设置。客户端创建代理以与服务器通信。当通信协议为HTTPS时,代理通过以下行侦听SSL证书validation事件:Se

如何清除任何SSL证书数据

我有一个客户端 – 服务器设置。 客户端创建代理以与服务器通信。 当通信协议为HTTPS时,代理通过以下行侦听SSL证书validation事件:

ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate); 

ValidateRemoteCertificate方法处理证书exception。

在客户端中,用户可以选择3个安全级别中的一个:低,中和高。 在低级别,ValidateRemoteCertificate方法忽略任何错误并始终返回true。 在中级,ValidateRemoteCertificate方法触发一个事件,通知客户端该问题。 在此阶段,向用户显示消息,通知他证书存在问题,并允许用户选择是继续并接受与服务器的连接还是拒绝。 在High级别,ValidateRemoteCertificate方法拒绝任何错误的连接。

到现在为止还挺好。

方案如下:

  1. 客户端加载了预定义的安全级别“中”,该级别已被用户接受,并且与服务器建立连接,而不会传播任何证书问题。
  2. 用户断开客户端与服务器的连接(通过特殊按钮)。
  3. 用户尝试重新连接客户端。 在此阶段,客户端可以通过测试按钮测试连接。 尽管已为连接测试创建了新代理,并且已从ServerCertificateValidationCallback(特定代理类型)中清除了所有ValidateRemoteCertificate方法,但测试方法返回成功。 此外,没有为有问题的证书触发事件,并且不调用ValidateRemoteCertificate方法。

我试图实现的行为是,当执行测试时,ServerCertificateValidationCallback将表现为在客户端启动并且ValidateRemoteCertificate发挥作用后它是对它的第一次调用。

我试图寻找任何方法来清除ServicePointManager中的任何委托/事件,但我找不到任何。

这里有缓存可以清除吗? 我希望这个场景足够清晰。

我知道这已经差不多4年了,但我只是遇到了同样的问题,想要分享我的解决方案,任何人都会发现这一点。

我找不到任何内置的方法来处理这个,所以看看ServicePoint和ServicePointManager的源代码,这就是我想出的:

上述就是C#学习教程:如何清除任何SSL证书数据分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记

  public void EnsureNoServicePointCertificate(Uri uri) { // find the service point for the Uri ServicePoint sp = ServicePointManager.FindServicePoint(uri); // Check if there is a service point and there is a certificate if (sp != null && sp.Certificate != null) { try { // ServicePointManager has a hashtable (private static Hashtable s_ServicePointTable) of all service points Type servicePointType = sp.GetType(); // ServicePoint.LookupString is the key for the hashtable PropertyInfo lookupStringProperty = servicePointType.GetProperty("LookupString", BindingFlags.Instance | BindingFlags.NonPublic); string lookupString = (string)lookupStringProperty.GetValue(sp, null); // Get the hashtable from ServicePointManager Hashtable s_ServicePointTable = (Hashtable)typeof(ServicePointManager).InvokeMember("s_ServicePointTable", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField, null, null, null); // ServicePointManager locks the hashtable and calls // s_ServicePointTable.Remove(servicePoint.LookupString); lock (s_ServicePointTable) { s_ServicePointTable.Remove(lookupString); } // At this point, ServicePointManager calls // servicePoint.ReleaseAllConnectionGroups(); MethodInfo release = servicePointType.GetMethod("ReleaseAllConnectionGroups", BindingFlags.Instance | BindingFlags.NonPublic); release.Invoke(sp, null); } catch { } } } 


推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
0o可人儿o0_962
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有