2012-07-13 91 views
2

我试图从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); 
    } 
} 
+0

刚大声思考:我对'+ ='感到困惑。将它改为'='可以为你做什么吗? – skrebbel 2012-07-13 11:59:00

+0

@skrebbel:编译罚款但同样的运行时错误 – musefan 2012-07-13 12:00:04

+0

@skrebbel:不要担心,排序;-) – musefan 2012-07-13 12:04:30

回答

2

行,所以我已经找到了解决办法。我们已经选择了尝试,并在服务器上禁用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); 
+0

如果它是你自己的服务器,那么EJP对你的问题的评论就更有意义了 - 为什么HTTPS如果它不是真正安全呢?:-) – skrebbel 2012-07-13 13:50:39

+0

@skrebbel:但它是安全的,无效的证书或不是,使用ssl加密以任何方式连接,所以总会有这种好处 – musefan 2012-07-13 14:11:02

0

嗯,也许XmlTextReader的使用访问HTTPS的方式不同。

试着做了HttpWebRequest web请求,并通过response.GetResponseStream()到XML文本阅读器(和离开ServicePointManager.ServerCertificateValidationCallback覆盖,你有它)

+0

已经尝试过了......没有运气:( – musefan 2012-07-13 11:25:56

+0

它只是在'request.GetResponse()'失败而不是 – musefan 2012-07-13 11:34:32

+0

这很奇怪。你能编辑你的问题并粘贴新的代码,包括来自另一个问题接受的答案的行吗? – skrebbel 2012-07-13 11:37:12