【问题标题】:C# HttpClient Not Working on 1 Site - TLS ErrorC# HttpClient 无法在 1 个站点上运行 - TLS 错误
【发布时间】:2022-01-06 04:38:18
【问题描述】:

在 .NET 6 应用程序中使用 HttpClient 时,我遇到了一个奇怪的 TLS 错误。该代码非常简单,并且在 99.9% 的时间里都能正常工作。但是,有一个站点 (ultipro.com) 在 TLS 握手上一直失败。我查看了他们的站点/证书,他们使用 TLS1.2,这对于这个版本的 .NET 来说应该没问题。

我的代码:

try
{
    string url;  

    //Examples: These do not work --> SSL Error
    url = "https://recruiting.ultipro.com/LOS1000LADOD/JobBoard/5365ad6e-23ff-4703-bb77-1e9451fb855e/OpportunityDetail?opportunityId=3b914758-c414-4f1d-a8f2-7d5c0e453cca";
    //url = "https://recruiting.ultipro.com/GRA1017GRYT/JobBoard/ae441110-89bd-444d-8ad2-b76c7b9db7a9/OpportunityDetail?opportunityId=acb56de2-b21f-49a1-9c48-7da6d7e47491"

    //Example: Works fine
    //url = "https://www.foxcareers.com/Search/JobDetail/R50016539"; 

    using (var client = new HttpClient())
    {
        var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, url);

        var response = await client.SendAsync(httpRequestMessage);

        if (response.IsSuccessStatusCode)
        {
            using (var contentStream = await response.Content.ReadAsStreamAsync())
            {
                StreamReader reader = new StreamReader(contentStream, Encoding.GetEncoding("utf-8"));
                string content = reader.ReadToEnd();
            }
        }
        else
        {
            Console.WriteLine("Internal server Error");
        }
    }


}
catch (Exception ex)
{
    string errormsg = ex.Message;
}

错误:

The SSL connection could not be established, see inner exception.

Inner Exception: Authentication failed because the remote party sent a TLS alert: 'HandshakeFailure'.
Source: System.Net.Security

我已经尝试了所有我能想到的方法,包括添加/删除不同的标头和指定 TLS 版本。例如:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

这些 URL 在我的浏览器和 Postman 中运行良好。关于我忽略了什么的任何想法?

【问题讨论】:

  • 可以通过ssllabs.com/ssltest/index.html查看详细信息和差异
  • 尝试指定 HttpClientHandler.SslProtocols 来定义 TLS 协议。
  • 我说“无法与安全服务器通信”,用于招聘.ultipro.com:ssllabs.com/ssltest/…。奇怪!
  • @Julian - 很好的提示,我注意到了同样的事情。也许这是他们的问题。但我仍然不明白为什么 Postman 和任何浏览器(Chrome/FF/Safari)都能正常工作??

标签: c# asp.net-core tls1.2 dotnet-httpclient .net-6.0


【解决方案1】:

2022 年 1 月 6 日更新:

好的 - 这很奇怪,但似乎一切都在一夜之间得到了解决。代码现在工作得很好。也许他们引入了一个错误的密码,而我恰好在他们修复它的那天碰巧遇到了它,但今天早上我没有任何问题。似乎是一个很大的巧合,但至少像 @Julian 这样的好人帮助我知道我没有疯。

【讨论】:

  • 我过去曾遇到过不支持的密码问题——这似乎是同样的问题
猜你喜欢
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多