SSL/TLS安全通道建立的WebService 调用

今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系"。
后来把DLL文件进行反编译,发现是在获得请求的时候出错了。

引用

WebResponse response = WebRequest.Create("https://……").GetResponse();



于是在服务器上用浏览器打开上面的地址,发现会弹出一个确认证书的窗口,看来是证书问题。
在网上一顿搜索,发现了一个决绝办法甚是好用,而且很简单,在请求之前添加一行代码。

C#代码 复制代码
  1. ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();  


其中AcceptAllCertificatePolicy需要自己定义:

C#代码 复制代码
  1. internal class AcceptAllCertificatePolicy : ICertificatePolicy   
  2.     {   
  3.         public AcceptAllCertificatePolicy()   
  4.         {   
  5.         }   
  6.   
  7.         public bool CheckValidationResult(ServicePoint sPoint,   
  8.            X509Certificate cert, WebRequest wRequest, int certProb)   
  9.         {   
  10.             // Always accept   
  11.             return true;   
  12.         }   
  13.     }  




以上方法虽然解决了遇到的问题,可是在VS中会提示ServicePointManager.CertificatePolicy已经被否决。由于我是一个喜欢完美的人,于是按照提示使用新的方法来处理。
改造后的代码更加简洁和明了

C#代码 复制代码
  1. ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;  

 

C#代码 复制代码
  1. private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)   
  2.         {   
  3.             return true;   
  4.         }  



就这样了,一个委托搞定!

 

 

 

加入命名空间:

 

using System.Net;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值