在 c# (.net core) 中使用 httpclient 时无法建立 SSL 连接,但在 Postman 和 Browser 中有效
Posted
技术标签:
【中文标题】在 c# (.net core) 中使用 httpclient 时无法建立 SSL 连接,但在 Postman 和 Browser 中有效【英文标题】:The SSL connection could not be established when using httpclient in c# (.net core) but works in Postman and Browser 【发布时间】:2020-11-10 08:58:31 【问题描述】:我有一个 .net 核心控制台应用程序,其功能将执行简单的 http 调用并获取页面内容(这是用于测试)。我收到“无法建立 SSL 连接”的问题。但是,当我使用 Postman 或 browser 尝试相同的网址时,它可以正常工作。谁能帮我解决这个问题?
内部异常:“无法从传输连接读取数据:现有连接被远程主机强行关闭..”
private static async Task<string> CallUrl(string url)
using var client = new HttpClient();
using var response = await client.GetAsync(url);
using var content = response.Content;
var data = await content.ReadAsStringAsync();
return data;
我也尝试了The SSL connection could not be established 中的建议。像这样,但没有运气。
private static async Task<string> CallUrl(string url)
var clientHandler = new HttpClientHandler
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
return true;
;
using var client = new HttpClient(clientHandler);
using var response = await client.GetAsync(url);
using var content = response.Content;
var data = await content.ReadAsStringAsync();
return data;
【问题讨论】:
这段代码在什么 Windows (?) 系统中运行? 这在 Windows 10 上运行 Windows 10 默认为 TLS 1.2。您确定您调用的 EndPoint 支持此协议吗?该端点支持的最低 SSL 协议版本是什么?或者,您之间是否有代理? @Jimi 非常感谢您的意见。我沿着你建议的路径走了,并设法找到了问题。此端点位于 WAF 后面,并且配置 WAF 的人员为主机名附加了旧的 TLS 配置文件(错误地)。我认为 .net 核心 httpclient 不支持他们在那里拥有的那个版本的 TLS。 WAF 现在有最新的 TLS 并且工作正常。顺便说一句,IE 和 Edge 也有同样的问题,但不是 chrome,因为它们支持旧的 TLS。再次感谢。 【参考方案1】:我在调用 Web 服务时遇到了同样的问题。我可以通过在 IIS AppPool 高级属性上将“加载用户配置文件”更新为 true 来修复它。
【讨论】:
以上是关于在 c# (.net core) 中使用 httpclient 时无法建立 SSL 连接,但在 Postman 和 Browser 中有效的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌
使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理