9

我的应用程序使用了一些 Web 服务并通过 JSON 获取数据,在很长一段时间内一切正常,直到最新发现 SSLv3 容易受到中间人攻击并且服务器所有者永久关闭 SSLv3 . 我的应用程序开始出现连接问题并返回错误“请求被中止:无法建立安全的 SSL/TLS 连接”。我试图寻找解决方案并找到我必须在创建 Web 请求之前添加此代码的信息:

        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 连接,启用此选项使我的应用程序开始工作。我假设这个应用程序做了一些事情,使我的应用程序和目标主机之间的通信成为可能。但我仍然不知道它可能是什么。以及如何让我的应用程序自行正确处理这些连接。

4

1 回答 1

8

绝望让我检查了整个源代码(负责获取互联网数据的部分是第 3 方,直到它工作正常,没有理由改变它),我发现了那行

request.Credentials = GetCredential(url);

被调用的方法,在它的身体里有

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

因此,我在创建之前更改该值的所有尝试都httpwebrequest被覆盖了。将SecurityProtocolType更改为Tls12使其现在可以正常工作。

于 2014-10-18T14:15:00.050 回答