【发布时间】:2012-07-13 11:09:04
【问题描述】:
我正在尝试从 https 网络请求创建 XML 文档,但是当站点的证书无效时,我无法让它工作。我希望我的应用程序不关心证书,我希望它无所畏惧地过着边缘的生活!
这是我拥有的初始代码,之前我曾多次使用它从标准 http(非 SSL)请求中获取我想要的内容:
XmlDocument xml = new XmlDocument();
XmlTextReader reader = new XmlTextReader("https://www.example.com");
xml.Load(reader);
由于网站的 SSL 证书无效,我现在收到以下错误:
请求被中止:无法创建 SSL/TLS 安全通道。
现在我已经完成了我的谷歌搜索并尝试了一些有希望的解决方案,但似乎没有任何帮助。
我尝试过的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);
}
}
【问题讨论】:
-
只是大声思考:我对
+=感到困惑。将其更改为=对您有什么帮助吗? -
@skrebbel:编译正常但运行时错误相同
-
@skrebbel:别担心,已排序;-)
-
为什么?如果你不希望它是安全的,你为什么要使用 HTTPS?
-
@EJP - 有时您根本无法选择。有很多服务提供商向一些合作伙伴提供了一个 API,但这些 API 做得不够好。通常,这包括仅通过 HTTPS 提供它,但带有自签名证书。虽然在业务领域应该推动这些组织解决他们的证书问题,但仍然值得继续开发客户端以用于测试和演示目的 - 甚至可能是试点。
标签: c# ssl httpwebrequest