【发布时间】: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证书。
-
Kestrel 仍然不建议直接使用。它可以完成工作,但它不是一个真正成熟的 Web 服务器,并且缺少您可能需要的许多功能和控件。
标签: c# asp.net-core-2.1