我正在尝试将应用程序从 Blazor .NET 7 Web 程序集更新为具有交互式服务器渲染的 Blazor on .NET 8.0 Web 应用程序。在 razor 页面上的 Web 程序集中,我对服务器端 Web API 控制器进行了很多
HttpClient
调用。
我最终设法使这些调用在 Blazor 交互式服务器上运行(Blazor 服务器页面在服务器 Web API 控制器上进行 http 调用),但是当我将它们上传到 Azure 站点时,出现以下错误:
System.Net.Http.HttpRequestException:无法建立 SSL 连接,请参阅内部异常。
System.Security.Authentication.AuthenticationException:身份验证失败,因为远程方发送了 TLS 警报:“ProtocolVersion”。
System.ComponentModel.Win32Exception (0x80090326):收到的消息意外或格式错误。
--- 内部异常堆栈跟踪结束 ---
在 System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](布尔 receiveFirst,Byte[] reAuthenticationData,CancellationToken CancelToken)
在 System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions、HttpRequestMessage 请求、布尔异步、流流、CancellationToken CancellationToken)
当然,代码和 azure 配置上的 Tls 协议版本 1.2..
有什么线索吗?
谢谢
如果异常确实准确,则您的问题与两个组件之间的通信中使用的 TLS 协议版本有关。
您在 Azure 门户中提到的 TLS 版本配置是“最低传入 TLS 版本”,它实际上不会影响传出版本,我建议您尝试在代码中强制使用 TLS 协议版本,看看是否可以解决了问题。
您只需创建一个在创建
HttpClientHandler
客户端时使用的 HttpClient
。
var handler = new HttpClientHandler
{
// You can either accept both 1.2 and 1.3 or try with either one to see
// if this fixes the issue.
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13
};
var client = new HttpClient(handler);