XmlReader.Create错误“无法创建SSL / TLS安全通道”

问题描述 投票:1回答:2

在我的基于ASP.net的网站上,我正在从几个网站汇总我的活动的源。其中一个是https://github.com/lucamauri.atom的GitHub供稿:这是一个有效的供稿,可以使用网络浏览器正确阅读,并且几周前它在我的网站上正常运行。从那以后,它开始产生错误

在我首先创建的代码和XMLReader然后我将它加载到SyndicationFeed对象中,如下所示:

Dim TempReader As System.Xml.XmlReader = System.Xml.XmlReader.Create(TempString)
Dim SyndFeed As SyndicationFeed = SyndicationFeed.Load(TempReader)
Dim TempItems As New List(Of SyndicationItem)
TempItems.AddRange(SyndFeed.Items.ToList.GetRange(0, Math.Min(CurrentFeed.TotalElements, SyndFeed.Items.Count)))

这适用于多个提要,但GitHub现在在上面代码的第一行生成TLS错误:

System.Net.WebException:请求已中止:无法创建SSL / TLS安全通道。 System.Net.HttpWebRequest.GetResponse()处于System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri,ICredentials凭据,IWebProxy代理,RequestCachePolicy cachePolicy) 在System.Xml.XmlDownloadManager.GetStream(Uri uri,ICredentials凭据,IWebProxy代理,RequestCachePolicy cachePolicy) 在System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri,String role,Type ofObjectToReturn) 在System.Xml.XmlTextRemplImpl.FinishInitUriString()中的System.Xml.XmlTextReaderImpl..ctor(String uriStr,XmlReaderSettings设置,XmlParserContext上下文,XmlResolver uriResolver) 在System.Xml.XmlReaderSettings.CreateReader(String inputUri,XmlParserContext inputContext) 在System.Xml.XmlReader.Create(String inputUri,XmlReaderSettings设置,XmlParserContext inputContext) 在System.Xml.XmlReader.Create(String inputUri)

我使用相同的代码与其他HTTPS提要(https://stackoverflow.com/feeds/user/69295只是命名一个),我没有得到错误。所以这是GitHub提要的特定内容,但是我可以再次从我运行网站的同一台机器上的浏览器访问它,所以我迷失了它。

有关问题原因的任何想法?

asp.net vb.net github xmlreader
2个回答
3
投票

服务器控制最终协商的协议。 Stackoverflow服务器只需要TLS v1,如下面的wireshark捕获中所示。此跟踪是在.Net框架版本4上完成的。

Github提要拒绝任何低于TLS v1.2的内容,因此在.Net 4.0上失败,因为该版本默认不可用。

enter image description here

如果在同一台计算机上安装了.Net 4.5+,则可以通过在ServicePointManager上设置SecurityProtocol来解决此问题。如果你不这样做,那么你根本无法提出请求。

您可以使用SecurityProtocol的数值而不是.Net 4上不可用的枚举值来执行此操作。

ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType)

enter image description here

完成此操作后,您现在可以在.Net 4上协商TLS 1.2。但是,如果可以的话,只需升级到更新的框架版本即可轻松实现。

更新

有一个针对.Net 3.5的补丁:

https://support.microsoft.com/en-us/help/3154520/support-for-tls-system-default-versions-included-in-the-net-framework


1
投票
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

.NET 4.5.1

在mvc项目的启动类中设置它,xmlreader在https链接上工作,谢谢你们。

© www.soinside.com 2019 - 2024. All rights reserved.