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

IIS部署ASP.NET Core6绑定自定义域名报10054连接被强制关闭错误

问题根因

这个10054套接字错误发生在TLS握手阶段,说明你写的自定义证书忽略回调根本没有触发——连接在证书校验逻辑执行前就被IIS强制断开了。问题和你修改IIS域名绑定直接相关:localhost访问正常是因为系统对localhost走特殊信任逻辑,不会触发SNI匹配、证书校验、环回限制等检查逻辑。

按优先级依次排查修复
  • 首先确认IIS绑定本身有效性
    登录部署项目的服务器本机,用浏览器直接访问https://svdb01.sample.com.au/api/Sample,如果浏览器都报连接重置、证书无效,先修复IIS配置:
    • 检查443端口绑定对应的SSL证书,确认证书的使用者可选名称(SAN)包含svdb01.sample.com.au域名,不要用随意生成的自签名证书绑定
    • 如果绑定勾选了「要求服务器名称指示(SNI)」,先临时取消勾选,重启IIS站点测试。多数场景下服务器本机回环请求不会带SNI头,IIS找不到对应站点的证书配置就会直接断开连接
    • 确认同服务器同IP的443端口没有其他站点的绑定冲突
  • 修正TLS版本配置
    不要随便全局硬编码SecurityProtocol,在注册HttpClient的位置显式指定支持的TLS版本即可,修改原有配置代码:
builder.Services.AddHttpClient<ISampleClient, SampleClient>()
.ConfigurePrimaryHttpMessageHandler(sp =>
{
    HttpClientHandler clientHandler = new HttpClientHandler();
    // 显式启用TLS1.2/1.3,和IIS配置的TLS版本保持对齐
    clientHandler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 
                                | System.Security.Authentication.SslProtocols.Tls13;
    clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
    return clientHandler;
});
  • 修复HttpClient的用法错误
    你现在每次发起请求都往DefaultRequestHeaders里重复添加Keep-Alive相关头,而Typed Client注入的HttpClient是全局复用的,多次请求后会出现重复请求头,IIS会直接拒绝这类非法请求。把加头的逻辑移到构造函数中仅执行一次,不要每次请求都重复添加:
public SampleClient(HttpClient httpClient, IMapper mapper, IConfiguration config)
{
    _httpClient = httpClient;
    _mapper = mapper;
    _config = config;
    _httpClient.BaseAddress = new Uri(_config["BaseAddress"]);
    // 请求头仅在实例初始化时添加一次
    _httpClient.DefaultRequestHeaders.ConnectionClose = false;
    _httpClient.DefaultRequestHeaders.Add("Keep-Alive", "3600");
}

private async Task<T> GetAsync<T>(string url)
{
    // 删除此处重复添加请求头的代码
    return await _httpClient.GetFromJsonAsync<T>(url);
}
  • 内部测试场景推荐终极绕开方案
    服务内部调用根本没必要走外网域名绕一圈做SSL握手,直接给站点加一个仅本机访问的HTTP绑定(比如http://localhost:5000,不绑定证书),把配置里的BaseAddress改成这个本地地址即可,既不会有SSL连接问题,性能也比走域名HTTPS高很多。如果是OutOfProcess托管的ASP.NET Core,也可以直接把BaseAddress指向Kestrel默认监听的本地端口,完全绕开IIS的HTTPS层。

内容的提问来源于stack exchange,提问作者Gino Mortillero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:45:18