【问题标题】:How to configure ssl for Staging/Production in .Net Core 2.1如何在 .Net Core 2.1 中为暂存/生产配置 ssl
【发布时间】:2018-08-08 10:26:27
【问题描述】:

我正在使用 .NET Core 2.1 构建一个 mvc Web 应用程序。在 ListenOptions.UseHttps 下的 .net 核心文档中,它声明它将使用默认证书 (doc found here) 配置 Kestrel。

Kestrel 在哪里寻找这个默认证书?如何将其替换为暂存(我想使用我们的演示站点证书之一)?对于生产(我又有不同的证书)?

我的 Program.cs 内容现在看起来像:

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebHost.CreateDefaultBuilder(args); //This sets up Kestrel and adds appsettings.json to the configuration
        builder.UseStartup<Startup>();
        builder.ConfigureAppConfiguration((context, configurationBuilder) =>
        {
            var env = context.HostingEnvironment;
            configurationBuilder.SetBasePath(env.ContentRootPath);
        });

        var host = builder.Build();
        host.Run();
    }
}

我的 Startup.cs 配置方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc(ConfigureRoutes);
}

应用程序在本地主机上使用 https 运行良好。我正在寻找一种通过配置(例如 appSettings.{env}.json?)而不是通过自定义方法(例如 this one

)来解决此问题的方法

【问题讨论】:

  • 我们在 nginx 后面使用 kestrel 并让 nginx 终止 ssl 连接。但我认为下面的文章描述了设置blogs.msdn.microsoft.com/webdev/2017/11/29/…
  • 是的,这也是我在问题中最后提到的那个。但是,我希望能够配置 Kestrel 本身。您的方法是此类应用程序的推荐方法吗?
  • 我认为这已经发生了一点变化,但很长一段时间以来,红隼都没有打算直接服务于外部。文档仍然专注于 nginx/apache/... 后面的托管,所以我认为它仍然是最常见的设置。我们正在使用github.com/jwilder/nginx-proxy(与 docker),它为我们提供了一种简单的方法来为我们所有的 asp.net 核心应用程序获取letsencrypt证书。
  • 这篇文章可能对您有帮助吗? docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
  • Kestrel 仍然不建议直接使用。它可以完成工作,但它不是一个真正成熟的 Web 服务器,并且缺少您可能需要的许多功能和控件。

标签: c# asp.net-core-2.1


【解决方案1】:

xneg 提到的文档帮助解决了这个问题:Kestrel web server implementation in ASP.NET Core

通过修改 appsettings.DockerDevelopment.json 文件来使其工作,如下所示:

{
  "Kestrel": {
    "EndPoints": {
      "HttpsDefaultCert": {
        "Url": "https://*:443"
      },
      "Http": {
        "Url": "http://*:80"
      }
    },
    "Certificates": {
      "Default": {
        "Path": "certifcate.pfx",
        "Password": "*********"
      }
    }
  }
}

Kestrel 现在可以在 Docker 容器和临时服务器上使用 https 运行我的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2018-11-16
    • 2019-02-20
    • 1970-01-01
    • 2019-11-12
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多