C#通过SSL / TLS获取xml站点 - https://

时间:2012-04-05 21:19:35

标签: c# xml https rss ssl-certificate

我需要能够在控制台程序中从https网站读取xml / rss。

直到现在我的程序支持普通的http,我一直在搜索,但我似乎无法找到一种简单的方法来实现对https的支持。 如果网站是否有有效的证书并不重要,但我会建议我如何检查这些证书。

我可能对此知之甚少,所以任何提示都是适当的!

我目前为http做的是:

XmlTextReader rssReader;
XmlDocument rssDoc;
rssReader = new XmlTextReader(url);
rssDoc = new XmlDocument();
rssDoc.Load(rssReader);

在没有可靠证书的网站上尝试此操作时,我收到错误消息: “底层连接已关闭:无法为SSL / TLS安全通道建立信任关系。”

string url = "https://somesite.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();

我的程序需要支持受信任和不受信任的https网站。

程序正在服务器上运行,因此必须在代码中处理不受信任的https站点。

2 个答案:

答案 0 :(得分:3)

对于证书问题,请尝试以下操作...

ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback((s, ce, ch, ssl) => true);

...在开始的某个地方 - 或在做请求之前。

这基本上无条件地验证任何证书,有点简化。

编辑:那是盲目的'信任(并且具有应用程序的全局特性) - 正确的实现将处理参数 - 或者需要实现ICertificatePolicy来专门处理不同的主机/证书。

编辑(证书):关于证书和SSL如何实际工作 - 以及与上述相关(基于评论/讨论)......

http://www.verisign.com/ssl/ssl-information-center/how-ssl-security-works/index.html
How does SSL really work?
https://superuser.com/questions/84572/public-key-encryption

答案 1 :(得分:2)

您必须发送HttpWebRequest或使用HttpClient。这两者都是为了建立/协商这些连接而设计的。

可能的Dupe:How to load xml from https using XmlTextReader

How do I use WebRequest to access an SSL encrypted site using https?

HttpWebRequest with https in C#