如何在ASP.NET Core 2.1 + Kestrel中禁用HTTPS?


76

因此,随着ASP.NET Core 2.1的出现,Kestrel现在自动在HTTP旁边创建一个HTTPS端点,并且默认项目模板已设置为从HTTP重定向到HTTPS(撤消很容易)。

但是我的问题是...如何为我的项目完全禁用HTTPS。我已经阅读了文档,并为HTTPS进行了各种配置设置,但似乎没有什么允许我关闭它并只运行HTTP项目。

我是发疯还是只是想念东西。我希望这非常容易做到。


3
在花了2个小时试图使其在Firefox上运行于Linux上之后,这正是我来这里提出的问题:)
Neutrino

好吧,您很幸运,您可以看到我已经回答了这个问题,看到了一些公认的解决方案:stackoverflow.com/a/51344917/3022291
Xorcist

Answers:


57

如果您使用的是Visual Studio 2017,则可以执行以下操作:

  1. 转到您的项目属性。(右键单击>属性)
  2. 单击“调试”选项卡。
  3. 在“ Web服务器设置”下,取消选择“启用SSL”。
  4. 保存,构建并重试。

这将更新launchSettings.json文件中的iisExpress设置。


2
在我的VS2017中以某种方式不存在该选项。因此:项目属性=>调试=>应用程序URL(删除s)并设置正确的起始页=>保存(弹出菜单时覆盖了launchSettings =>确定并准备好滚动(f5)
Nordes

我自己在使用.NET Core CLI。我的* .csproj或appsettings.json中没有任何内容指示应该使用SSL。根据最新文档,当存在本地开发证书时,ASP.NET将自动创建一个SSL终结点。所以我以为代码中有一种方法可以禁用它,但是到目前为止我找不到任何方法。
Xorcist

2
我认为,如果不依赖Visual Studio,这个答案会更好。launchSettings.json文件会怎样?
Yehuda Makarov

这是非常无益的。问题是关于ASP核心和茶est,您的答案是关于Windows上的旧式dotnet。
djeikyb

这项技术在VS-2019中也很好用。非常感谢您的解决方案,Abhishek。
Ashok kumar

52

在Startup.cs中,删除中间件

app.UseHttpsRedirection();

13
这样只能防止强制HTTP-> HTTPS重定向(允许您不安全地访问站点),而不会禁用HTTPS。Kestrel仍在使用两个端口(对于HTTP通常为5000,对于HTTPS为5001)。我在寻找的只是HTTP,根本没有HTTPS。
Xorcist

3
这对我有帮助。我使用的是Android模拟器,当然,它很可能不接受自签名SSL。因此,我尝试连接到HTTP地址,但是我一直收到“ 307 Temporary Redirect”。经过一些研究,我认为这是因为服务器正在重定向到HTTPS。删除那条线解决了它。
该死的蔬菜

即使这不会禁用HTTPS,这仍然是非常有用的信息。我也遇到了307临时重定向问题,因此此问题得以解决。
Ryan Lundy

是的,这是一个很好的答案
Boppity Bop

37

事实证明实现我想要做的正确方法是使用.UseKestrel()专门配置Kestrel并只需指定一个地址,如下所示:

  WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options => {
      options.Listen(IPAddress.Loopback, 5080); //HTTP port
    })
    .UseStartup<Startup>();

影响覆盖默认设置,并在Kestel启动时显示此警告:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
  Overriding address(es) 'https://localhost:5001, http://localhost:5000'. Binding to endpoints defined in UseKestrel() instead.

如果指定了第二个地址,则将假定该地址将使用内置的开发者证书进行保护,例如:

  WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options => {
      options.Listen(IPAddress.Loopback, 5080); //HTTP port
      options.Listen(IPAddress.Loopback, 5443); //HTTPS port
    })
    .UseStartup<Startup>();

您当然可以按照以下说明专门保护您的SSL地址:

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1&tabs=aspnetcore2x

这对于生产设置是必需的。


3
实际上,通过将.UseUrls()和或.UseConfiguration()与JSON配置和指定的“ urls”属性一起使用,甚至可以进一步简化此操作。仅指定一个地址时,两者的工作原理相同。
Xorcist

我被要求为我的上述评论添加一个示例,所以这里是: hosting.json { "urls": "http://localhost:5080" } program.cs(主要) public static void Main(string[] args) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json") .AddCommandLine(args) .Build(); CreateWebHostBuilder(args).UseConfiguration(config).Build().Run(); }
Xorcist

有什么方法可以去除茶est吗?
sina_Islam '19

5
@sina_Islam“删除Kestrel”没有意义-Kest​​relHTTP服务器。没有它,您将没有网络应用程序。
McGuireV19年

30

Properties/launchSettings.json您的项目文件中,查找密钥applicationUrl。您会发现类似:

...
"applicationUrl": "https://localhost:5001;http://localhost:5000",
...

删除https端点并完成。

编辑

如@Xorcist所述,该文件launchSettings.json未发布。因此,以上解决方案仅在开发环境中有效。要在生产环境和开发环境中禁用https,并且通常要配置要监听的url,您还可以执行以下操作之一:

  • 使用--urls的参数dotnet run,将作为同样的效果applicationUrllaunchSettings.json。例如:dotnet run --urls=http://0.0.0.0:5000,https://0.0.0.0:5001。再次,删除您不想使用的那个。

  • 使用ASPNETCORE_URLS环境变量也可以实现相同的目的。

  • 如@Konstantin对此问题的回答中所述,在ASP Net Core 2.1中,您还可以在中配置Kestrel端点appsettings.json(似乎无法在2.0中完成)。

  • 最后,useUrls扩展方法也可以实现同样的效果WebHost.CreateDefaultBuilder(args).UseUrls("http://0.0.0.0:5000")。我更喜欢另一种解决方案,因为这些解决方案会将您硬编码为应用程序端点,并且如果不重新编译应用程序就无法更改。

有关所有可能的选项,请参阅此文档中的Microsoft文档。

更新(2020年12月9日)根据Microsoft Docs的规定,这些选项对于Net Core 3.1仍然有效,但appsettings除外。也许它仍然有效,但我不确定。


请注意,以上答案引用了由Visual Studio创建的启动配置文件的配置文件,当使用VSCodedotnet new时,不会自动创建此文件。但是,只要文件存在并且引用了适当的配置文件,它就确实可以按照规定运行(即dotnet run --launch-profile = ProfileNameHere)。请注意,如果未指定任何配置文件,则始终将配置中的第一个配置文件用作默认配置文件。话虽这么说,我相信launchSettings.json不会替代appsettings.json,因为它将不会被发布。
Xorcist

实际上,dotnet new确实会launchSettings.json在dotnet 2.1中自动创建文件。在dotnet 2.0中并非如此。我刚刚在未安装Visual Studio的Ubuntu盒子中对此进行了测试。因此,至少对于2.1版本而言,launchSettings.json它不是Visual Studio特定的文件。
joanlofe

关于launchSettings.json未发布的事实,这也是事实,但是在生产设置中,您可能希望默认情况下启用https。无论如何,我将使用其他选项更新我的答案。
joanlofe

是的,看来我完全错过了2.1现在在其Web模板中包含launchsettings.json的事实。对于我们在工作中使用一些自定义模板(显然尚未针对2.1进行完全更新)的困惑,我深表歉意。对于使用2.1的产品,我们当前使用appsettings.Production.json中的“ Kestrel”端点部分来配置HTTPS(并将这些端点从appsettings.json和或appsettings.Development.json中排除)。不过,我最初的问题是针对开发人员培训的,我想从HTTP入手,以后再专门配置HTTPS。
Xorcist

16

在Program.cs中,如下添加UseUrls:

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

并在Startup.cs中删除/注释以下内容:

app.UseHttpsRedirection();

简单评论为“ app.UseHttpsRedirection();” 在startup.cs中,它停止重定向到https,并开始在http处产生结果。
Blaze


5

使用ASPNET CORE 2.2,我只需将Web服务器URL设置为http而不是https,它就可以自行选择它。我将其作为自托管进程运行。

  1. 转到您的项目属性。
  2. 单击“调试”选项卡。
  3. 在“ Web服务器设置”下,将URL设置为http:// xxx
  4. 再试一次 :)

那是对我唯一的选择:)。谢谢
Ribaz

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.