C# 使用Kestrel仅针对特定端口(侦听混合端口)的HTTPS重定向

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)

使用.NETCore2.1、C#、Kestrel

这将是一个奇怪的请求,但是: 我有一个外部URL,它需要是HTTPS,还有一个内部URL,它只是HTTP

我想知道如何将端口443上的HTTP流量重定向到HTTPS(保持在同一端口443上);目前,它停留在HTTP上,死得很惨

(注意:端口888保持为HTTP,前往该端口的任何流量都需要保持为不安全的HTTP。)

我在Program.cs中设置了它,如下所示:

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。