Mor*_*aos 6 c# ssl httpwebrequest poodle-attack
我有使用一些Web服务并通过JSON获取数据的应用程序,所有工作都运行良好很长时间,直到最新发现有关SSLv3容易受到中间人攻击并且服务器所有者关闭SSLv3 .我的应用程序开始出现连接问题并返回错误"请求已中止:无法建立安全的SSL/TLS连接".我试图寻找解决方案并找到信息,我必须在创建Web请求之前添加此代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = delegate{
return true;
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,这里没有运气,app的行为和以前一样,我不知道这段代码什么都不做,或者服务器还有问题.错误信息非常模糊,我有问题找出出错的地方.
这是我的代码
...
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;
...
Run Code Online (Sandbox Code Playgroud)
我想问一下如何设置Tls12作为默认值,并确保在我的最终请求中我使用所需的协议.
如果我确认我的应用程序在我的最终工作正常,是否有办法从服务器响应中获取更详细的信息并找出错误的确切原因?
感谢所有的答案和建议.
编辑
问题的第二部分已经解决,我发现这个工具http://www.telerik.com/download/fiddler它几乎允许查看传出和传入数据的情况.此工具还允许解码SSL连接,启用此选项可使我的应用程序开始工作.我假设这个应用程序可以实现我的应用程序和目标主机之间的通信.但我仍然不知道它可能是什么.以及如何使我的应用程序自己正确处理这些连接.
绝望让我检查整个源代码(负责获取互联网数据的部分是第三方,直到它工作正常没有理由改变它)我发现那条线
request.Credentials = GetCredential(url);
Run Code Online (Sandbox Code Playgroud)
被称为方法,在它的身体
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
Run Code Online (Sandbox Code Playgroud)
所以我在创建之前尝试更改该值的所有尝试都httpwebrequest被覆盖了.将SecurityProtocolType更改为Tls12使其全部工作.