使用XmlTextReader https请求忽略无效SSL(版本3)证书
问题描述:
我试图从https web请求中创建XML文档,但是当网站具有无效证书时,我无法使其工作。我希望我的应用程序不关心证书,我希望它能够在无惧的情况下生活在边缘!使用XmlTextReader https请求忽略无效SSL(版本3)证书
这里是最初的代码我有,这是我之前5次来得到什么,我从一个标准的HTTP希望(非SSL)要求:
XmlDocument xml = new XmlDocument();
XmlTextReader reader = new XmlTextReader("https://www.example.com");
xml.Load(reader);
随着网站具有无效的SSL证书我我现在得到以下错误:
The request was aborted: Could not create SSL/TLS secure channel.
现在我已经做了我的谷歌,荷兰国际集团和尝试了一些有前途的解决方案,但它似乎没有帮助。
一个我试过here on SO看起来不错,但似乎没有工作,我直接在我的代码之前添加了“接受答案”代码行,因为它不太清楚它应该去哪里。
如果它有什么区别,我的代码是在类库中,我正在通过控制台应用程序进行测试。我也使用.NET 4
这里是我的最新尝试(不工作):
XmlDocument xml = new XmlDocument();
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback((s, ce, ch, ssl) => true);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlCommand);
request.Credentials = CredentialCache.DefaultCredentials;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream receiveStream = response.GetResponseStream())
{
XmlTextReader reader = new XmlTextReader(receiveStream);
xml.Load(reader);
}
}
答
行,所以我已经找到了解决办法。我们已经选择了尝试,并在服务器上禁用SSL进行测试,发现它是使用SSL 3.另一个谷歌搜索后,我发现了一些额外的代码来解决这个问题(重要设置SecurityProtocolType
):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback((s, ce, ch, ssl) => true);
XmlDocument xml = new XmlDocument();
XmlTextReader reader = new XmlTextReader(urlCommand);
xml.Load(reader);
答
嗯,也许XmlTextReader的使用访问HTTPS的方式不同。
试着做了HttpWebRequest
web请求,并通过response.GetResponseStream()
到XML文本阅读器(和离开ServicePointManager.ServerCertificateValidationCallback
覆盖,你有它)
刚大声思考:我对'+ ='感到困惑。将它改为'='可以为你做什么吗? – skrebbel 2012-07-13 11:59:00
@skrebbel:编译罚款但同样的运行时错误 – musefan 2012-07-13 12:00:04
@skrebbel:不要担心,排序;-) – musefan 2012-07-13 12:04:30