什么限制了 .NET Core 2.2 中 HTTPS 的端口范围?

What is limiting the port range for HTTPS in .NET Core 2.2?

launchSettings.json中我有以下内容。它有效,我可以使用 https://localhost:44300.

访问 Swagger 和页面的其余部分
{ ...
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:52088",
      "sslPort": 44300
    }
  }, ...
}

当我将 "sslPort": 44300 更改为例如"sslPort":44299,我仍然可以通过相应地更改 URL 来访问这些内容。

但是,当我将该值设置为 5100 时,我发现无法再访问这些内容。其实好像工作区间比较有限,只集中在44300附近

那是什么?!

我已经关闭了防火墙,以防万一。在配置中,我试过像这样添加 url。行为没有变化。

WebHost.CreateDefaultBuilder(args)
  //.UseUrls("https://localhost/5100")
  .UseStartup<Startup>();

如何强制应用程序在我选择的端口上正确运行?

docs for .NET Core 2.2之后,我添加了重定向的配置如下。正如担心的那样,它对问题没有影响。

services.AddHttpsRedirection(_ =>
{
  _.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
  _.HttpsPort = 5100;
});

注意到文档本身建议将 5001 作为替代端口号,我开始怀疑问题可能完全出在其他地方。我在另一台机器上重新创建了设置并且能够重现错误。不过,这两台电脑都是我配置的,所以如果不是我的人能确认这个行为就太好了。

我得到了使用 Nmap 检查端口答案的提示,显然端口 5100 上有一些东西在回答。同样可以使用 TelNet 确认。但是,Swagger 以及使用 PostMan 的调用仍然失败...

您的工具栏中将有一个 IIS Express 图标 运行ning。通过 IIS Express 停止端口 44300 下的站点并再次重新启动该站点,它现在应该 运行 通过您的新端口。如果这不起作用,只需退出 IIS Express 并重新启动站点。

documentation for IIS Express 状态(我强调):

If you want to test SSL access to your site, you can do this with IIS Express by using an SSL port between 44300 and 44399 and using the IIS Express self-signed certificate. Trying to use SSL with a port outside this range results in a URL binding failure when your website is launched under IIS Express.

链接的 docs.microsoft.com 页面中有说明,其中介绍了如何配置您的计算机以允许此操作。简短版本是:

  1. WIN-R > mmc.exe
  2. 文件菜单 > Add/Remove 管理单元...
  3. 选择左侧的证书,然后单击Add >按钮
  4. 选择计算机帐户Next >,然后选择Finish
  5. 单击 Ok 关闭 添加或删除管理单元 window
  6. 在左侧的树视图中展开证书(本地计算机)> 个人> 证书
  7. 找到颁发给 localhost 的证书,友好名称为 IIS Express Development Certificate > 双击打开它
  8. 移动到 详细信息 选项卡并一直向下滚动以找到 Thumbprint
  9. 复制并粘贴值(在列表视图中单击它,值将被放入 window 底部的文本字段)

现在您已经捕获了证书的指纹:

  1. 以管理员身份打开命令提示符
  2. 运行命令netsh http add sslcert ipport=0.0.0.0:5100 certhash=**Insert_Thumbprint_From_Step_9_Above_Here** appid={00112233-4455-6677-8899-AABBCCDDEEFF}
  3. 重新启动 IIS Express/您的调试会话

IIS Express 现在应该绑定到 5100(您可以将上面步骤 2 中的命令中的端口更改为您选择的端口之一),让 Visual Studio 弹出一个浏览器 window 来加载您的站点.