【问题标题】:The request was aborted: Could not create SSL/TLS secure channel c# Webrequest请求被中止:无法创建 SSL/TLS 安全通道 c# Webrequest
【发布时间】:2020-12-15 05:21:50
【问题描述】:

我正在尝试通过在 c# 中使用以下代码集来调用服务。 我正在使用 .NET Framework 4.6.2。每当我到达代码 (HttpWebResponse)myHttpWebRequest.GetResponse() 时,它都会抛出异常“请求被中止:无法创建 SSL/TLS 安全通道”。我尝试了堆栈溢出中所说的许多解决方案。但没有一个对我没有帮助。从上周开始,我一直在为此苦苦挣扎,然后终于在这里发帖。请任何帮助将不胜感激。 我什至在本地商店添加了证书,但仍然没有用。下面是我的代码。

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Uri myUri = new Uri("https://CallingUrl");
WebRequest myWebRequest = HttpWebRequest.Create(myUri);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)myWebRequest;
string svcCredentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("User:Pwd"));
myHttpWebRequest.Headers.Add("Authorization", "Basic " + svcCredentials);
myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
myHttpWebRequest.Method = "POST"
HttpWebResponse httpResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

【问题讨论】:

  • 你能让这个在邮递员中工作吗?您是否从作者那里获得了该服务的文档?另外你为什么使用 webrequest 而不是 HttpClient,有特定的用例吗?
  • 我已经在邮递员工具中检查了这个,我得到了正确的响应。我也尝试了 HttpClient 然后我也面临同样的问题@MichaelRandall
  • 您是否尝试过更改 ServicePointManager.SecurityProtocol
  • 是的,我尝试了 SS3、Tls、Tls11、Tls12 但仍然没有用 @MichaelRandall
  • 这可能是HttpWebRequest请求的问题,可以尝试添加服务引用来调用服务,而不是直接构造http请求。

标签: c# rest wcf ssl service


【解决方案1】:

上面的代码非常好。但这个问题是由其他原因引起的。

在深入研究之后终于找到了解决方案,并认为它会帮助其他面临同样问题的人,所以发布这个答案。

原因:

Schannel 实现的默认限制是 32768 字节。一旦达到最大限制,它将在服务之间握手时返回上述错误。

分辨率:

  1. 使用注册表项将 MessageLimitClient 从默认 0x8000 增加到最大值 0xf000 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel\消息传递

  2. 创建 Messaging 密钥(如果它不存在)

  3. 然后创建新的 DWORD,将其命名为“MessageLimitClient”,并将 Valuedata 设置为“f000”(十六进制)。

  4. 更改此值后,重新启动服务器以使新值生效。

【讨论】:

  • 不幸的是,这个解决方案在我的情况下没有帮助(至少没有重新启动)。但是描述有问题。第一个:我在注册表中没有密钥Messaging。第二:在文本描述中写为 MaxLimitClient 但在图像上是 MessageLimitClient.
  • 已编辑。如果您没有 Messaging,那么您需要创建它。我提到了它
  • 我添加了密钥(旧的和新的),不幸的是它并没有帮助我修复错误。现在我正在研究一个使用 Python 作为 HTTP 请求阅读器的解决方案。
  • 导致相同问题的原因有很多。在您的情况下,原因可能是@Julo
猜你喜欢
  • 2019-06-17
  • 1970-01-01
  • 2012-06-05
  • 2018-04-22
  • 2012-10-30
相关资源
最近更新 更多