You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net 5.0 Blazor Server调用同服务器Let's Encrypt API报SSL连接错误

根因说明

这个问题确实和2021年10月Let's Encrypt的证书链变更直接相关。
2021年9月30日Let's Encrypt旧的DST Root CA X3根证书正式过期,后续新签发的证书默认使用ISRG Root X1为根的跨签证书链,而Windows Server 2012自带的Schannel安全组件存在已知兼容缺陷:当同一台服务器上的服务通过HTTPS调用同机器部署的站点时,会出现SSL帧解析异常,也就是你遇到的报错。
外部调用(开发PC、Postman、其他服务调用)正常的原因是这些客户端的SSL栈没有Windows Server 2012的Schannel缺陷,可以正常解析证书链,只有服务器本地运行的.NET应用调用时才会触发该问题。

可行解决方案

按照落地成本从低到高推荐以下方案:

  • 本地回环走HTTP(最快修复)
    因为前后端都部署在同一台服务器,可直接将Blazor应用调用API的地址改为本地HTTP地址(如http://localhost:你的API端口),IIS给API站点额外绑定本地HTTP端口即可,对外访问依然保留HTTPS配置,不会影响外部用户使用。
  • 调整服务器证书信任配置
    1. 运行certlm.msc打开本地计算机证书管理器
    2. 进入「受信任的根证书颁发机构」→「证书」目录
    3. 找到名称为DST Root CA X3的证书,右键选择属性,设置为「禁用此证书的所有目的」
    4. 确认ISRG Root X1证书已经存在于受信任根证书列表中,缺失则手动导入官方根证书
    5. 重启IIS服务或者服务器后生效
  • 调整HttpClient的验证逻辑(仅限本地调用场景)
    注入HttpClient时添加自定义证书验证规则,跳过本地API调用的证书链校验:
    services.AddHttpClient("ApiClient", client =>
    {
        client.BaseAddress = new Uri("你的API正式地址");
    }).ConfigurePrimaryHttpMessageHandler(() =>
    {
        return new HttpClientHandler
        {
            ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
            {
                // 匹配你的API域名时直接信任
                if (cert.Subject.IndexOf("api.你的域名.com", StringComparison.OrdinalIgnoreCase) >= 0)
                    return true;
                // 其他请求走正常校验逻辑
                return sslPolicyErrors == SslPolicyErrors.None;
            }
        };
    });
    
  • 升级服务器系统(长期方案)
    该Schannel缺陷在Windows Server 2016及以上版本中已经修复,如果有条件升级系统,后续不会再出现同类兼容问题。

内容的提问来源于stack exchange,提问作者Ameen Nihad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:24:01