Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在本地和服务器中使用HTTPs_Asp.net Core - Fatal编程技术网

Asp.net core 在本地和服务器中使用HTTPs

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())

我正在使用HTTPS处理ASP.NET核心项目,因此我在启动时:

// 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的配置,我认为这是一个很好的解决方法。