[英]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/69295
為https://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有一個修補程序:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
.NET 4.5.1
在mvc項目的啟動類中設置此項,謝謝xmlreader在https鏈接上工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.