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

我需要能够从控制台程序中的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站点。

对于证书问题,请尝试以下方法……

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

…在开始的某个地方 – 或在做请求之前。

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

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

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

http://www.verisign.com/ssl/ssl-information-center/how-ssl-security-works/index.html
SSL如何真正起作用?
https://superuser.com/questions/84572/public-key-encryption

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

可能的Dupe: 如何使用XmlTextReader从https加载xml

如何使用WebRequest使用https访问SSL加密站点?

在C#中使用https的HttpWebRequest