亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Kestrel 僅針對特定端口(在混合端口上偵聽)的 HTTPS 重定向

使用 Kestrel 僅針對特定端口(在混合端口上偵聽)的 HTTPS 重定向

C#
智慧大石 2022-11-13 15:01:29
使用 .NET Core 2.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();在啟動時,我嘗試使用 Configure(IApplicationBuilder app...) app.UseHttpsRedirection();但這導致兩個端口上的所有流量都被重定向到 HTTPS,這對于 888 來說是個問題,因為它沒有 SSL 證書!有什么方法可以根據我指定的端口從 HTTP 重定向到 HTTPS 嗎?謝謝
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

默認情況下,中間件管道會運行,而不管使用什么端點來訪問您的應用程序。因此,如果您只是這樣做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。


查看完整回答
反對 回復 2022-11-13
  • 1 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號