您的位置:首页 > 其它

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

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

引用

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

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

C#代码







ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();
ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();


其中AcceptAllCertificatePolicy需要自己定义:

C#代码







internal class AcceptAllCertificatePolicy : ICertificatePolicy

{

public AcceptAllCertificatePolicy()

{

}

public bool CheckValidationResult(ServicePoint sPoint,

X509Certificate cert, WebRequest wRequest, int certProb)

{

// Always accept

return true;

}

}

internal class AcceptAllCertificatePolicy : ICertificatePolicy
{
public AcceptAllCertificatePolicy()
{
}

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


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


C#代码







ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;


C#代码







private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

{

return true;

}

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


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

转自:http://radiumwong.iteye.com/blog/684118
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐