2014-10-17 54 views
4

我有使用某些Web服務並通過JSON獲取數據的應用程序,所有工作都很好,直到最新發現SSLv3容易受到人爲干擾,中間人攻擊和服務器所有者關閉SSLv3。我的應用程序開始有問題連接並返回錯誤「請求已中止:無法建立安全的SSL/TLS連接」。我試圖尋找解決方案,找到的信息我得到了創建Web請求之前添加以下代碼:C#強制HttpWebRequest使用Tls12而不是SSLv3

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
     ServicePointManager.ServerCertificateValidationCallback = delegate{ 
        return true; 
     }; 

遺憾的是這裏沒有運氣,應用程序的行爲和以前一樣,我不知道如果這個代碼沒有或者服務器仍然存在問題。錯誤信息非常模糊,我有問題找出事情出錯的地方。

這裏是我的代碼

 ... 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.ContentType = GetRequestContentType(); 
     request.Method = method.ToString(); 
     request.Credentials = GetCredential(url); 
     request.PreAuthenticate = true; 
     CookieContainer cookieContainer = new CookieContainer(); 
     request.CookieContainer = cookieContainer; 
     ... 

我想請問如何設置Tls12用作默認,並確保在我結束請求我做與所需的協議。

如果我確認我的應用程序在我的末端工作正常,是否有辦法從服務器響應中獲取更詳細的信息並找出錯誤的準確原因?

感謝您的所有答案和建議。

編輯問題

第二部分是解決了,我發現這個工具http://www.telerik.com/download/fiddler它幾乎允許看是怎麼回事,有傳出和傳入的數據。此工具還允許解碼SSL連接,使此選項可以讓我的應用程序開始工作。我認爲這個應用程序可以讓我的應用程序和目標主機之間的通信成爲可能。但我仍然不知道它會是什麼。以及如何讓我的應用程序自行正確處理這些連接。

+0

可能的重複[如何在.NET中禁用SSL回退並僅使用TLS進行出站連接? (Poodle緩解)](http://stackoverflow.com/questions/26389899/how-do-i-disable-ssl-fallback-and-use-only-tls-for-outbound-connections-in-net) – 2015-12-04 22:52:41

回答

5

作爲絕望讓我來檢查整個源代碼和(負責獲取數據互聯網是第三方,直到它工作得很好,沒有理由改變它的一部分),我發現,線

request.Credentials = GetCredential(url); 

調用的方法是,在它的身上有

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

所以我所有的努力來改變創造httpwebrequest被覆蓋前值。更改SecurityProtocolTypeTls12使現在一切正常。

+0

這就是在一個請求中設置憑證的一個非常討厭的副作用... – 2015-10-29 21:28:43