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

同IIS共存的自托管Kestrel绑定SSL端口443失败问题排查

问题描述

我有一台安装了IIS的开发服务器,分配了多个静态私有IP,同时想运行自托管Kestrel Web服务。将Kestrel端点配置为特定IP的80端口运行HTTP时,只要不重叠端点/绑定,就能与IIS正常共存。但尝试为Kestrel配置SSL时服务完全无法启动,抛出异常:

System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions

仅当端点端口设为443时出现该问题,5001、446等端口均可正常运行。以下是失败的端点配置示例:

"Kestrel": {
  "Endpoints": {
    "Http": {
      "Url": "http://10.10.13.11:80"
    },
    "Https": {
      "Url": "https://10.10.13.11:443",
      "Certificate": {
        "Location": "LocalMachine",
        "Store": "My",
        "Subject": "portaldev.mydomain.com",
        "AllowInvalid": false
      }
    }
  }
}

注:IIS的所有绑定均使用其他IP,未复用Kestrel服务所用的10.10.13.11 IP。

解决方案与原因分析

核心原因

  1. Windows特权端口权限限制:Windows系统默认限制非管理员账户绑定1-1023范围内的端口(443属于这类特权端口)。你的Kestrel服务运行账户可能未被授予绑定443端口的权限,而80端口正常是因为此前IIS配置时已为相关账户赋予了该端口的访问权限,或者运行账户恰好拥有80端口的绑定权限。
  2. HTTP.sys URL预留缺失:即使IIS未绑定目标IP的443端口,系统的HTTP.sys组件也需要显式授权特定账户访问https://10.10.13.11:443这个URL端点,否则会触发权限拦截。

解决步骤

1. 临时测试:以管理员身份运行Kestrel

如果只是临时验证,可右键选择“以管理员身份运行”启动Kestrel服务/程序,若能正常启动,即可确认是权限问题。但此方法不推荐用于生产环境。

2. 永久授权:为运行账户添加URL访问权限

打开管理员命令提示符,执行以下命令(替换DOMAIN\Username为Kestrel服务实际运行的账户名):

netsh http add urlacl url=https://10.10.13.11:443/ user=DOMAIN\Username

执行成功后,Kestrel即可正常绑定该IP的443端口。

3. 排查端口占用(可选)

若执行上述命令后仍有问题,可检查是否有其他进程占用了该IP的443端口:

netstat -ano | findstr ":443"

根据输出的PID,在任务管理器中找到对应进程,确认是否为无关程序,若为无关程序可关闭后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:18:19