2014-10-17 241 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

相关问题