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



Using .NET Core 2.1, C#, Kestrel.

这将是一个奇怪的请求,但是: 我有一个外部URL需要HTTPS和一个仅HTTP的内部URL。

我想知道如何将端口 443 上的任何流量重定向到 HTTPS(停留在同一端口上,443);目前它留在 HTTP 上并死于可怕的死亡。

(注意:端口 888 保留为 HTTP,任何流向那里的流量都需要保持为不安全的 HTTP。

我在程序中设置了它.cs如下所示:

WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 443, opts=>
{
opts.UseHttps("mycert.pfx");
});
options.Listen(IPAddress.Any, 888);
})
.Build();

在启动时,我尝试使用配置(IApplicationBuilder应用程序...) .app。使用HttpsRedirection();

但这导致两个端口上的所有流量都被重定向到 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,然后再实际尝试建立它们。

因此,不可以,您无法将端口 443 上的 HTTP 重定向到端口 443 上的 HTTPS。

相关内容

  • 没有找到相关文章

最新更新