Asp.net core 在本地和服务器中使用HTTPs
我正在使用HTTPS处理ASP.NET核心项目,因此我在启动时:Asp.net core 在本地和服务器中使用HTTPs,asp.net-core,Asp.net Core,我正在使用HTTPS处理ASP.NET核心项目,因此我在启动时: // In Configure method RewriteOptions rewriteOptions = new RewriteOptions(); rewriteOptions.AddRedirectToHttps(); // In ConfigureServices method services.AddMvc(x => { x.Filters.Add(new RequireHttpsAttribute())
// In Configure method
RewriteOptions rewriteOptions = new RewriteOptions();
rewriteOptions.AddRedirectToHttps();
// In ConfigureServices method
services.AddMvc(x => {
x.Filters.Add(new RequireHttpsAttribute());
});
然后在程序类中,我有以下内容:
IWebHostBuilder builder = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>();
builder.UseKestrel(x => {
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
if (env == "Development"))
x.UseHttps(@"../../local.pfx", "Password");
});
IWebHost host = builder.Build();
host.Run();
IWebHostBuilder=新WebHostBuilder()
.UseContentRoot(目录.GetCurrentDirectory())
.Useii整合()
.UseStartup();
builder.UseKestrel(x=>{
var env=Environment.GetEnvironmentVariable(“ASPNETCORE_环境”);
如果(环境=“开发”))
x、 使用https(@./../local.pfx”,“密码”);
});
IWebHost主机=builder.Build();
host.Run();
我正在检查环境是否正在开发以使用本地证书
否则,它将使用服务器中的证书(本例中为Azure)
这在本地和Azure中都有效
但是应该这样做吗?Kestrel通常在IIS或nginx等反向代理之后运行。在这种情况下,SSL连接由B反向代理处理。据我所知,从反向代理到kestrel的流量是通过普通http传输的。所以,我觉得奇怪的是,你正在加载一个证书到kestrel并让它处理https。但也许我误解了什么。即使使用IIS或nginx处理的ssl,您的asp.net代码仍然可以像您所做的那样将http请求重定向到https;问题是,如果我照这篇文章所说的那样做,那么在将应用程序上传到服务器时,它将不起作用,因为里面会有一个“真正的证书”。这就是为什么我有这个条件来测试环境是否在发展。但奇怪的是,在任何地方都没有提到这一点……我看到您提到的第一个链接与我所说的“只有您的反向代理服务器需要SSL证书,并且该服务器可以使用普通HTTP在内部网络上与您的应用程序服务器通信。”通常,希望开发环境与生产环境尽可能地匹配。那么,为什么不将IIS或nginx配置为处理ssl,而不将kestrel配置为执行ssl,这样dev就更类似于生产?考虑到他们已经从2.0中的appsettings.json配置中删除了开发中kestrel ssl的配置,我认为这是一个很好的解决方法。