我正在尝试从https web请求创建一个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);
}
}发布于 2012-07-13 12:06:59
好的,我找到了解决办法。我们选择了尝试禁用服务器上的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);发布于 2012-07-13 11:23:42
嗯,也许XmlTextReader使用了一种不同的方式访问HTTPS。
尝试使用HttpWebRequest发出web请求,并将response.GetResponseStream()传递给XML文本阅读器(并将ServicePointManager.ServerCertificateValidationCallback覆盖保留在有它的位置)
发布于 2021-06-18 13:39:44
造成此错误的原因:
您的网站上没有使用有效的客户端证书。
您可以在下面尝试:
- Add this line where you are requesting to download XML or making some http request.//添加模拟证书验证
ServicePointManager.ServerCertificateValidationCallback =新RemoteCertificateValidationCallback(OnValidationCallback);
https://stackoverflow.com/questions/11469309
复制相似问题