【问题标题】:C# Enforcing HttpWebRequest to use Tls12 instead of SSLv3C# 强制 HttpWebRequest 使用 Tls12 而不是 SSLv3
【发布时间】:2014-10-17 03:13:19
【问题描述】:

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

【问题讨论】:

标签: c# ssl httpwebrequest poodle-attack


【解决方案1】:

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

request.Credentials = GetCredential(url);

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

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

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 2020-09-12
    • 2012-08-25
    • 1970-01-01
    • 2010-09-27
    • 2017-12-12
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多