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

C# 是什么限制了.NET Core 2.2中HTTPS的端口范围?,c#,asp.net-core,https,iis-express,asp.net-core-2.2,C#,Asp.net Core,Https,Iis Express,Asp.net Core 2.2,在launchSettings.json中,我有以下内容。它的作品,我可以访问斯威格和页面的其余部分使用 当我将“sslPort”:44300更改为例如“sslPort”:44299时,我仍然可以通过相应地更改URL来访问这些内容 但是,当我将该值设置为5100时,我注意到内容不再可访问。事实上,工作范围似乎相当有限,仅集中在44300左右 那是怎么回事 我已经关掉了防火墙,以防万一。在配置中,我尝试添加如下URL。行为没有改变 WebHost.CreateDefaultBuilder(args

在launchSettings.json中,我有以下内容。它的作品,我可以访问斯威格和页面的其余部分使用

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

但是,当我将该值设置为5100时,我注意到内容不再可访问。事实上,工作范围似乎相当有限,仅集中在44300左右

那是怎么回事

我已经关掉了防火墙,以防万一。在配置中,我尝试添加如下URL。行为没有改变

WebHost.CreateDefaultBuilder(args)
  //.UseUrls("https://localhost/5100")
  .UseStartup<Startup>();
注意到文档本身建议将5001作为替代端口号,我开始怀疑问题可能完全存在于其他地方。我在另一台机器上重新创建了设置,并且能够重现错误。尽管如此,这两台电脑都是由我配置的,所以如果有人不是我的话,能够确认这一行为就太好了

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

我得到了一个使用Nmap检查端口应答的提示,很明显,端口5100上有应答。这一点可以通过使用来确认。但是,招摇过市和使用邮递员的呼叫仍然失败…

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

各州(我的重点):

如果要测试对站点的SSL访问,可以通过使用介于44300和44399之间的SSL端口并使用IIS Express自签名证书,在IIS Express中执行此操作在IIS Express下启动网站时,尝试将SSL与此范围之外的端口一起使用会导致URL绑定失败

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

  • WIN-R>mmc.exe
  • 文件菜单>添加/删除管理单元
  • 选择左侧的证书并单击
    添加>
    按钮
  • 选择计算机帐户,
    Next>
    ,然后选择
    Finish
  • 单击
    Ok
    关闭“添加或删除管理单元”窗口
  • 展开左侧树状视图中的证书(本地计算机)>个人>证书
  • 查找颁发给localhost的证书,其友好名称为IIS Express Development certificate>,双击打开该证书
  • 移动到“详细信息”选项卡并向下滚动找到指纹
  • 复制并粘贴该值(在listview中单击该值,该值将被放入窗口底部的文本字段中)
  • 现在您已捕获证书的指纹:

  • 以管理员身份打开命令提示符
  • 运行命令
    netsh-http-add-sslcert-ipport=0.0.0.0:5100 certhash=**Insert\u Thumbprint\u From\u Step\u 9\u over\u Here**appid={00112233-4455-6677-8899-AABBCCDDEEFF}
  • 重新启动IIS Express/调试会话

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

    我回家后会尝试。然而,我很好奇,如果你有任何想法,为什么港口价值的变化在没有你的建议的情况下生效,只要它在以前的价值附近。这种奇怪通常意味着有其他东西控制着这个过程……不,就像我怀疑的那样。我可以在工具栏上的IIS Express中看到的端口会根据launchSettings.json(它忽略了.UseUrls(…)而变化)。但是,当端口设置为太低的值(例如5100)时,我无法访问例如Swagger。这真的很奇怪。通过在launchSettings.json中更改端口,然后仍然能够在原始端口上访问swagger,我可以重现您的体验。直到我存在IIS Express并重新启动应用程序,我才无法在原始端口上访问swagger,需要在新端口上访问。你能试着在chrome中隐姓埋名以排除缓存吗?好主意。现在对它进行了测试,它在端口交换方面的表现与预期一致(您需要重新启动应用程序,因为launchsettings.json仅在启动期间读取)。但是,您能否确认,如果将安全端口更改为5100(即远低于443xx范围),应用程序将启动,但无法正常提供服务?当我注释掉app.UseHttpsRedirection()时,它似乎能在HTTP上正常工作;。。。所以这可能是HTTPS的一个问题,但更多的问题超出了我的能力范围。或者简单地使用像Jexus Manager这样的开源工具来简化步骤。我一直没有意识到这一点。在我的人际网络中四处打听(其中一些人有10年以上的工作经验,有时甚至更多),什么都没有给。事实上,谷歌在这方面的点击率几乎是不可能的。你是怎么发现的?@Donkeybana,模糊地回忆起以前曾碰到过这个问题,然后幸运地找到了正确的搜索词,找到了证明它的文档:)扩展了可信的领域,我的搜索引擎是Bing——对我来说,它似乎比谷歌更擅长查找MSFT相关的结果,虽然这是一件相对较新的事情:)@LexLi,接受更多的请求,获得更多的贡献者来提高您的工具的声誉。1 contributor对连续性的要求不高
    services.AddHttpsRedirection(_ =>
    {
      _.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
      _.HttpsPort = 5100;
    });