为Asp.net核心Web API启用HTTPS安全连接

时间:2019-02-15 08:46:19

标签: https asp.net-core-2.1

我有使用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配置中指定证书吗?

1 个答案:

答案 0 :(得分:2)

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

  1. 添加一个侦听器。在program.cs中(端口号为示例):

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

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

enter image description here

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

    services.AddHttpsRedirection(options => options.HttpsPort = 8999);

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

  2. 并在Startup.Configure中:

    app.UseHttpsRedirection();

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


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

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