兔八哥极品软件园    运行: 4501天 | 文章:640 篇 | 评论:506 条 | 碎语:1条

c# HttpWebRequest 基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系

作者:admin 发布于:2012-3-24 13:25 Saturday 分类:.NET


写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,

但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系"。

后来把DLL文件进行反编译,发现是在获得请求的时候出错了。 

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

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

ServicePointManager.CertificatePolicy = new 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;  
        } 

标签: HttpWebRequest


Powered by 兔八哥极品软件 苏ICP备12049267号 sitemap