C# 使用Kestrel仅针对特定端口(侦听混合端口)的HTTPS重定向
使用.NETCore2.1、C#、Kestrel 这将是一个奇怪的请求,但是: 我有一个外部URL,它需要是HTTPS,还有一个内部URL,它只是HTTP 我想知道如何将端口443上的HTTP流量重定向到HTTPS(保持在同一端口443上);目前,它停留在HTTP上,死得很惨 (注意:端口888保持为HTTP,前往该端口的任何流量都需要保持为不安全的HTTP。) 我在Program.cs中设置了它,如下所示:C# 使用Kestrel仅针对特定端口(侦听混合端口)的HTTPS重定向,c#,asp.net-core,.net-core,kestrel-http-server,kestrel,C#,Asp.net Core,.net Core,Kestrel Http Server,Kestrel,使用.NETCore2.1、C#、Kestrel 这将是一个奇怪的请求,但是: 我有一个外部URL,它需要是HTTPS,还有一个内部URL,它只是HTTP 我想知道如何将端口443上的HTTP流量重定向到HTTPS(保持在同一端口443上);目前,它停留在HTTP上,死得很惨 (注意:端口888保持为HTTP,前往该端口的任何流量都需要保持为不安全的HTTP。) 我在Program.cs中设置了它,如下所示: WebHost.CreateDefaultBuilder(args)
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 443, opts=>
{
opts.UseHttps("mycert.pfx");
});
options.Listen(IPAddress.Any, 888);
})
.Build();
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.UseKestrel(选项=>
{
选项。侦听(IPAddress.Any,443,opts=>
{
opts.UseHttps(“mycert.pfx”);
});
选项。侦听(IPAddress.Any,888);
})
.Build();
启动时,我尝试了配置(IApplicationBuilder应用程序…)
app.UseHttpsRedirection()
但这导致两个端口上的所有流量都被重定向到HTTPS,这对于888来说是一个问题,因为它没有SSL证书
根据我指定的端口,有没有办法从HTTP重定向到HTTPS?
谢谢默认情况下,中间件管道将运行,而不管使用什么端点到达应用程序。因此,如果您只需执行app.UseHttpsRedirection(),则HTTPS重定向中间件将为所有公共端点运行 有一种使用
UseWhen
的机制,允许您设置条件中间件管道,而中间件仅在特定条件下添加。这看起来像这样:
app.UseWhen(context => context.Request.Port == 888, httpApp =>
{
httpApp.UseHttpsRedirection();
});
但是,在您的情况下,这不会有帮助:问题是在单个端口上,您只能承载一个对象。因此,如果您想在端口443上使用HTTPS托管您的应用程序,那么它将只在那里接受HTTPS。如果您尝试使用不安全的HTTP进行连接,那么它将失败,因为它无法执行必要的握手
在这里,您要做的是在同一端口上同时托管HTTP和HTTPS,但这根本不起作用,因为在客户端实际尝试建立HTTP或HTTPS之前,没有一种机制来确定客户端是否要执行HTTP或HTTPS
因此,不能将端口443上的HTTP重定向到端口443上的HTTPS。