【问题标题】:How to find reason that .NET HttpClient produces SSL Error with commonly trusted site如何找到 .NET HttpClient 与通常受信任的站点产生 SSL 错误的原因
【发布时间】:2022-07-25 15:54:03
【问题描述】:

我有一个非常简单的要求:

using System.Net.Http;

var client = new HttpClient();
var result = client.GetAsync("https://...com");
result.Wait();

这会失败,并出现无法创建 SSL 隧道的 WebException。 SSL Labs 和我的浏览器都同意服务器证书有效且可以信任。

.NET 为什么不信任服务器?我怎样才能找出具体的问题是什么?我显然不想空白地禁用验证。

【问题讨论】:

  • 仅仅因为“无法创建SSL隧道”并不意味着它不信任证书,它可能是协议版本不匹配。该站点支持哪些 SSL/TLS 版本?您的应用是否使用其中一种 SSL/TLS 版本?
  • @phuzi 这也是我的问题; 如何找到隧道失败的具体原因?我知道这可能是很多事情,但我怎么知道是哪一个?
  • Wireshark 嗅探器跟踪会告诉你。旁注:.Wait() 是个坏主意,可能会导致死锁,请改用await
  • @phuzi 确实是 TLS 版本。介意发布答案以便我接受吗?

标签: .net ssl .net-4.5


【解决方案1】:

仅仅因为“无法创建 SSL 隧道”并不意味着它不信任证书,它可能是协议版本不匹配。

最好检查一下网站支持哪些 SSL/TLS 版本?您的应用程序是否使用其中一种 SSL/TLS 版本?我最近经常看到这种情况,因为服务器已“升级”以删除不太安全的 TLS/SSL 协议版本,这通常是一个问题,因为在 .NET Framework 低于 4.8 的版本中默认不启用 TLS1.3 和 TLS1。 2 仅从 4.7 开始默认支持(WCF 为 4.7.1)。

working with TLS in .NET Framework 上查看这篇文章以了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2015-02-14
    • 2011-04-14
    • 2018-12-22
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多