请求被中止:无法创建 SSL/TLS 安全通道 c# Webrequest

Posted

技术标签:

【中文标题】请求被中止:无法创建 SSL/TLS 安全通道 c# Webrequest【英文标题】:The request was aborted: Could not create SSL/TLS secure channel 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请求。 【参考方案1】:

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

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

原因:

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

分辨率:

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

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

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

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

【讨论】:

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

以上是关于请求被中止:无法创建 SSL/TLS 安全通道 c# Webrequest的主要内容,如果未能解决你的问题,请参考以下文章

“请求被中止:无法创建 SSL/TLS 安全通道”

HttpClientHandler / 请求被中止:无法创建 SSL/TLS 安全通道

条纹支付:System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道

请求被中止:无法为 HttpWebRequest 创建 SSL/TLS 安全通道

Braintree 中的“请求被中止:无法创建 SSL/TLS 安全通道”错误

请求被中止:无法创建 SSL/TLS 安全通道 - 没有证书