繁体   English   中英

是否可以在 .NET 4.0 框架上使用 TLS1.2 发送 HttpWebRequest

[英]Is that possible to send HttpWebRequest using TLS1.2 on .NET 4.0 framework

我的应用程序连接到 Experian 服务器,Experian 将很快停止支持 TLS 1.0 和 TLS 1.1。 所有使用 HTTPS 的连接都必须使用 TLS 版本 1.2。

我想对这个问题做一些研究,看看在 .NET 4.0 框架上使用 TLS 1.2 发送HttpWebRequest

如果没有,我可能需要在 .NET 4.5 上创建一个webservice服务并调用它的方法,如果有,我什么都不用做。

有没有人已经遇到过这个问题?

是的,它支持它,但您必须在ServicePointManager上明确设置 TLS 版本。 只需在调用 Experian 之前随时运行此代码(在同一应用程序域中):

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12

更新

请参阅@iignatov 对框架 v4.0 必须执行的操作的回答 我的代码适用于 4.5+

我不得不处理同样的问题,同时将 PayPal 集成到遗留应用程序中,并找到了以下适用于 .NET 4.0 的解决方法,这似乎可以解决问题:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;

基本上解决方法是直接为 TLS 1.2 分配端口。

所有功劳归于 CodeProject的评论者。

iignatov 的答案的 VB.NET 翻译:

ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)
ServicePointManager.DefaultConnectionLimit = 9999

我用这种方法解决了。

    string url = "https://api.foursquare.com/v2/blablabla...";
    var request = (HttpWebRequest)WebRequest.Create(url);

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
    
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

你也可以使用这个:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | (SecurityProtocolType)768 | (SecurityProtocolType)3072;

不幸的是,不,你不能这样做。 直到 .netfx 4.5 才添加 Tls12(请参阅文档)。 请注意,这还需要 Windows Server 2008 R2+ 或 Windows 7+ 才能正确运行(请注意介绍 TLS的适用于部分)。

FrameWork 4.0 不支持 TLS 1.1 或 1.2 但您可以通过从 Nuget 管理器下载Rebex.Http来解决此问题。

Rebex.Licensing.Key = "..."; //Lisans Number
var creator = new HttpRequestCreator();
creator.Register();

WebRequest request = WebRequest.Create("https://www.test.com");
request.Method = "POST";                
request.Headers.Add("utsToken", txtToken.Text);
request.ContentType = "application/json";
request.Method = "POST";

using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
    string json = "{\"VRG\":\"test\"}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (WebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
    txtSonuc.Text += result;
}

我的应用程序连接到Experian服务器,Experian将很快停止支持TLS 1.0和TLS 1.1。 使用HTTPS的所有连接都必须使用TLS版本1.2。

我想对该问题进行一些研究,并看到在.NET 4.0框架上使用TLS 1.2发送HttpWebRequest工作原理

如果没有,我可能将需要在.NET 4.5上创建一个webservice服务并调用其方法,如果需要,则无需执行任何操作。

有没有人已经面对过这个问题?

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

这在.net 3.5上对我有用

你不能,

正如消息来源所解释的那样,

“HttpWebRequest class 仅支持 HTTP 的版本 1.0 和 1.1。将 ProtocolVersion 设置为不同的版本会引发异常。”

来源: learn.microsoft.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM