【发布时间】: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