`
镭风【CHN】
  • 浏览: 108842 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解决Error"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"

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

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


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

其中AcceptAllCertificatePolicy需要自己定义:
internal class AcceptAllCertificatePolicy : ICertificatePolicy
    {
        public AcceptAllCertificatePolicy()
        {
        }

        public bool CheckValidationResult(ServicePoint sPoint,
           X509Certificate cert, WebRequest wRequest, int certProb)
        {
            // Always accept
            return true;
        }
    }



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

private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }


就这样了,一个委托搞定!
2
1
分享到:
评论
2 楼 loushuibazi 2012-10-17  
使用了如上所说的方法之后,原来的错误提示没了,换成了
The remote server returned an error: (401) Unauthorized.
远程服务器返回一个错误:(401)未经授权的。
咋办哈?
a396635596@qq.com  我的邮箱
1 楼 镭风【CHN】 2010-06-05  
为啥有人踩我?

相关推荐

Global site tag (gtag.js) - Google Analytics