【问题标题】:HttpClient error in Web Forms. The remote certificate is invalid according to the validation procedureWeb 窗体中的 HttpClient 错误。根据验证程序,远程证书无效
【发布时间】:2023-01-18 06:23:17
【问题描述】:

在用现代 JS 前端替换 Web 窗体应用程序之前,我们目前正在将运行在 .NET Framework 4.8 上的 VB.Net 中的旧 Web 窗体应用程序转换为使用新的 .NET 6 API。我们正在使用 HttpClient 将存储库调用替换为对我们新 API 的调用来完成此操作。我们使用的是 HttpClient 的 NuGet 版本,而不是 .NET Framework 版本。 WebForms 应用程序在开发机器上托管的 IIS 中运行,API 也在开发机器上使用 Kestrel 运行。

该证书是为本地主机颁发的,并且两个应用程序都在不同端口的本地主机上提供服务。

不幸的是,在使用自签名开发证书的开发机器上运行时,我们在调用 PostAsync()PutAsync() 时遇到以下异常

System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

我已经搜索并尝试了几乎所有发布到类似问题的答案,并尝试了在这些情况下给出的大部分答案。这包括将证书添加到 RCA/ICA,并使用重新生成开发证书

dotnet dev-certs https --clean
dotnet dev-certs https
dotnet dev-certs https --trust

我什至将 IIS 切换为使用 SSL 的开发证书,以防万一出现问题。

我还没有尝试过的唯一解决方案是绕过整个证书验证过程,因为它更像是一种 hack 而不是解决方案。这不是一个可行的长期解决方案。

Web Forms 应用程序可以成功调用各种 Azure API,包括 Key Vault 和 Azure Files,因此 HttpClient 本身不是问题。可以从 Firefox/Chrome/Edge 毫无问题地访问 API。

除了我尝试过的和我不愿意做的之外,还有什么想法吗?

【问题讨论】:

  • 不要只打印 AuthenticationException,递归访问 InnerException 属性以获得整个错误。
  • 我有点困惑。 Kestrel 现在在使用开发证书吗?
  • @shingo 那是最里面的例外。尝试打开 SSL/TLS 安全通道时抛出。此时一切都在使用 .NET 生成的开发证书。
  • 如果它是最里面的异常,它应该在消息中包含过程名称。
  • 也可以试试ServerCertificateCustomValidationCallback获取证书,看看是不是devcert。

标签: c# dotnet-httpclient


【解决方案1】:

发现了问题。

dotnet dev-certs https --create 在证书 - 当前用户 (certmgr.msc) 存储中制作开发证书。 .NET Framework 在证书 - 本地计算机 (certlm.msc) 存储中查找证书。

将创建的开发证书复制到个人 -> 证书和受信任的根证书颁发机构 -> 证书文件夹中的本地计算机存储解决了这个问题。严格来说,我不知道它需要是个人文件夹还是 TRCA 文件夹,但我把它放在两个地方只是为了确定。

【讨论】:

    【解决方案2】:

    第一的:
    清除 c:users<用户名>AppData Roaming ASP.NET Https 文件夹

    然后从 Powershell: dotnet dev-certs https --信任

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 2016-03-25
      • 1970-01-01
      • 2011-03-28
      • 2016-11-28
      • 2013-08-08
      • 2012-07-20
      相关资源
      最近更新 更多