簡體   English   中英

XmlReader.Create錯誤“無法創建SSL / TLS安全通道”

[英]XmlReader.Create error “Could not create SSL/TLS secure channel”

在基於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,字符串角色,ObjectToReturn類型)
在System.Xml.XmlTextReaderImpl..ctor處在System.Xml.XmlTextReaderImpl.FinishInitUriString()處(字符串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/69295https://stackoverflow.com/feeds/user/69295 ),但沒有收到錯誤消息。 因此,這是特定於GitHub提要的內容,但是再次可以從運行網站的同一台計算機上的瀏覽器訪問它,所以我迷失了它。

對問題的原因有任何想法嗎?

服務器控制最終協商的協議。 Stackoverflow服務器僅需要TLS v1,如下面的wireshark捕獲所示。 此跟蹤是在.Net Framework版本4上完成的。

Github提要拒絕TLS v1.2以下的任何內容,因此在.Net 4.0上失敗,因為默認情況下該版本不可用。

在此處輸入圖片說明

如果在同一台計算機上安裝了.Net 4.5+則可以通過在ServicePointManager上設置SecurityProtocol來解決此問題。 如果您不這樣做,那么您根本無法發出請求。

通過使用SecurityProtocol的數字值而不是.Net 4上不可用的枚舉值來執行此操作。

ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType)

在此處輸入圖片說明

完成此操作后,您現在甚至可以在.Net 4上協商TLS 1.2。但是,如果可以,只需升級到較新的框架版本即可。

更新資料

.NET 3.5有一個修補程序:

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

.NET 4.5.1

在mvc項目的啟動類中設置此項,謝謝xmlreader在https鏈接上工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM