首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#无法创建ssl/tls安全通道(Restsharp)

C#无法创建ssl/tls安全通道(Restsharp)
EN

Stack Overflow用户
提问于 2022-08-18 17:45:23
回答 1查看 941关注 0票数 2

我目前正在尝试连接到api,但我得到了以下错误:could not create ssl/tls secure channel

当通过Postman、相同的端点、相同的证书和所有东西发出请求时,请求都能工作,但是当我通过restsharp发出请求时,它会由于SSL/TLS错误而停止。

我尝试使用代码: TLS12强制安全协议:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

还尝试使用ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };和该代码的其他一些变体删除证书验证。

也尝试在客户机上禁用它,但是没有成功,client.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;也没有成功。

因此,我目前正在尝试使用Wireshark获取更多信息。据我所理解,这并不是密码套件的问题,因为它传递了"Client Hello“和"Server Hello”,并停止在“证书请求,服务器Hello”上。

当我向邮递员提出请求时,图像上出现的错误也会出现。

当它收到带有RSTACK标志时,它会停在这一行上。

有人知道为什么它不起作用吗?

此外,值得一提的是,我以前多次使用相同的代码来调用其他api,它们似乎工作得很好。不管我做什么都做不到的。我无法访问服务器,因为它是第三方api。

如能在这方面提供任何帮助,我们将不胜感激。

编辑:添加用于进行api调用的代码和一些被询问的更多信息

代码语言:javascript
复制
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificateReturn, chainReturn, sslPolicyErrors) => true;

var client = new RestClient(api);
client.Timeout = -1;

//Add Certificate
X509Certificate2 cert = null;
if (GCONTABANCO.SelectCERTIFICADO(IDCONTABANCO, ref cert, ref MSG) == false) { return false; }
client.ClientCertificates = new X509CertificateCollection();
client.ClientCertificates.Add(cert);
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", clientId);
request.AddParameter("client_secret", clientSecret);
request.AddParameter("scope", "extrato.read boleto-cobranca.read boleto-cobranca.write");
IRestResponse response = client.Execute(request);

我正在使用.net框架4.5.2,我尝试更新到4.7,但是错误仍然存在,目前我无法更新版本,因为它是一个大系统,不能冒险破坏它

Windows版本号: 21H1 (10.0.19043)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-26 12:31:59

因此,我设法在他们的IT架构师的帮助下解决了这个问题,如果将来有人遇到同样的问题,我将把答案留在这里。

因为他们有很多证书要通过连接发送,所以它超出了允许的限制并关闭了连接,所以我不得不更改限制,以便能够连接到服务器。在C#中,它必须在regedit上进行更改。

为此,我必须:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Messaging

  • Then添加一个MessageLimitClient DWORD值。

  • 将值设置为65536。

  • 重新启动机器。

F 211

在这样做并再次测试之后,连接是成功的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73407388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档