2012-07-13 149 views
2

我試圖從https web請求中創建XML文檔,但是當網站具有無效證書時,我無法使其工作。我希望我的應用程序不關心證書,我希望它能夠在無懼的情況下生活在邊緣!使用XmlTextReader https請求忽略無效SSL(版本3)證書

這裏是最初的代碼我有,這是我之前5次來得到什麼,我從一個標準的HTTP希望(非SSL)要求:

XmlDocument xml = new XmlDocument(); 
XmlTextReader reader = new XmlTextReader("https://www.example.com"); 
xml.Load(reader); 

隨着網站具有無效的SSL證書我我現在得到以下錯誤:

The request was aborted: Could not create SSL/TLS secure channel.

現在我已經做了我的谷歌,荷蘭國際集團和嘗試了一些有前途的解決方案,但它似乎沒有幫助。

一個我試過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); 
    } 
} 
+0

剛大聲思考:我對'+ ='感到困惑。將它改爲'='可以爲你做什麼嗎? – skrebbel 2012-07-13 11:59:00

+0

@skrebbel:編譯罰款但同樣的運行時錯誤 – musefan 2012-07-13 12:00:04

+0

@skrebbel:不要擔心,排序;-) – musefan 2012-07-13 12:04:30

回答

2

行,所以我已經找到了解決辦法。我們已經選擇了嘗試,並在服務器上禁用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); 
+0

如果它是你自己的服務器,那麼EJP對你的問題的評論就更有意義了 - 爲什麼HTTPS如果它不是真正安全呢?:-) – skrebbel 2012-07-13 13:50:39

+0

@skrebbel:但它是安全的,無效的證書或不是,使用ssl加密以任何方式連接,所以總會有這種好處 – musefan 2012-07-13 14:11:02

0

嗯,也許XmlTextReader的使用訪問HTTPS的方式不同。

試着做了HttpWebRequest web請求,並通過response.GetResponseStream()到XML文本閱讀器(和離開ServicePointManager.ServerCertificateValidationCallback覆蓋,你有它)

+0

已經嘗試過了......沒有運氣:( – musefan 2012-07-13 11:25:56

+0

它只是在'request.GetResponse()'失敗而不是 – musefan 2012-07-13 11:34:32

+0

這很奇怪。你能編輯你的問題並粘貼新的代碼,包括來自另一個問題接受的答案的行嗎? – skrebbel 2012-07-13 11:37:12