【问题标题】:Enable HTTPS secure connection for Asp.net core web api为 Asp.net core web api 启用 HTTPS 安全连接
【发布时间】:2019-07-09 08:53:01
【问题描述】:

我有使用 ASP.NET Core 2.1 创建的 REST API 应用程序。 REST API 由 WebHostBuilder 创建并由 Kestrel 托管。

Startup.Kernel = kernel;
    _restApiServer = new WebHostBuilder()
      .UseKestrel(options =>
      {

      })
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseIISIntegration()
      .UseStartup<Startup>()
      .UseUrls(string.Format("http://localhost:{0}", _configuration.PortNumber))
      .UseSetting("https_port",_configuration.HttpsPort.ToString())
      .Build();
     _restApiServer.Run();

默认情况下,REST API 在端口 8998 上提供服务。这个 REST API 是由我的不同应用程序启动的。我可以使用浏览器和 POSTMAN 连接到这个 REST API。

现在我想保护我与 REST API 的连接。我所做的是: 我在 Configure 方法的 Startup 类中添加了必要配置以强制安全连接:

app.UseHttpsRedirection();

我还执行了一个信任开发证书的代码:

dotnet dev-certs https --trust

情况是,当我尝试通过浏览器访问 web api 时出现错误:

localhost 拒绝连接。 试试:

检查连接

检查代理和防火墙

ERR_CONNECTION_REFUSED

另外,当我使用 POSTMAN 调用一些 REST API 方法时,我得到了错误:

得不到任何回应

我做错了什么?是否需要直接在 Kestrel 配置中指定证书?

【问题讨论】:

    标签: https asp.net-core-2.1


    【解决方案1】:

    由于 https 是不同的协议,您需要为 https 配置另一个端口。为了自动重定向到 https url,您需要做三件事:

    1. 添加一个监听器。在 program.cs 中(端口号是一个例子):

      .UseUrls("http://localhost:8998", "https://localhost:8999");

      当您启动应用程序时,您应该会看到:

    1. 配置 https 重定向。在 Startup.ConfigureServices 中:

      services.AddHttpsRedirection(options =&gt; options.HttpsPort = 8999);

      如果您省略此步骤,则使用默认端口,可能是 5001。对于 Azure 上的托管,您可能需要将其设置为 443。

    2. 在 Startup.Configure 中:

      app.UseHttpsRedirection();

    http://localhost:8998 的调用现在将被重定向到https://localhost:8999


    如果您按照上述步骤操作但未创建证书,则 https 端口未列出且不可用!如果创建了证书,那么应该列出两个端口。

    我假设在生产中 Api 将在代理之后运行。在这种情况下,您可以省略上述步骤。在代理后面运行意味着您可以在那里将http重定向到https,这意味着您不需要https redirect

    【讨论】:

    • 我听从了您的指示。当我启动我的 WebApi 时,我收到一个错误:无法配置 HTTPS 端点。没有指定服务器证书,也找不到默认的开发者证书。” 我已经执行了“dotnet dev-certs https 和 dotnet dev-certs https”。 - 相信。我看过这篇文章,有人告诉那里,使用 .net core 2.1 你需要配置你的证书 stackoverflow.com/questions/53300480/… 。还有其他选择吗?
    • 请注意,我的 web api 是由作为 Windows 服务运行的其他应用程序启动的
    • 微软明确表示不要这样做。重定向对 api 没有意义,因为 api 客户端不理解重定向。在此处查看更多信息:docs.microsoft.com/en-us/aspnet/core/security/…
    • .UseUrls() 定义在哪里?
    • @MikeW,您应该将其添加到 Program.cs 文件中的 ConfigureWebHostDefaults 方法中,如下所示:return Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(builder =&gt; { builder.UseUrls("http://localhost:8998", "https://localhost:8999"); builder.UseStartup&lt;Startup&gt;(); });
    猜你喜欢
    • 2021-12-12
    • 2018-01-16
    • 2020-06-22
    • 2016-05-31
    • 2019-07-26
    • 2018-08-15
    • 1970-01-01
    • 2019-07-11
    • 2020-07-11
    相关资源
    最近更新 更多