ASP.NET Core 教學 - 強制 SSL
網站安全性越做越高,不免都要使用 HTTPS 加密連線,但本機用 localhost
都是 HTTP,想測試 HTTPS 需要額外的設定。
本篇將介紹 ASP.NET Core 強制使用 SSL 加密連線。
啟用 SSL
可以再 Web 專案點滑鼠右鍵,用圖形化的工具啟用 SSL Port,如下:
或直接編輯 Properties\launchSettings.json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:33333/",
"sslPort": 44333
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true
}
}
}
設定 SSL Port 後,就可以在 localhost
使用 HTTPS
了。但會遇到隱私權問題,因為我們沒有真的匯入憑證,可以先把他忽略。步驟如下:
強制 SSL
只有單純啟動 SSL Port 的話,依然可以使用 HTTP,只要自己更改網址列就可以。強制走 HTTPS 的話還要經過以下設定。
先安裝兩個套件:
- Microsoft.AspNetCore.Mvc
- Microsoft.AspNetCore.Rewrite
要強制使用 HTTPS 的頁面可以在 Action 或 Controller 註冊 RequireHttpsAttribute
或註冊於全域範圍,只要不是 HTTPS 就會回傳 HTTP Status Code 302 並轉址到 HTTPS,如下:
- 區域註冊
Controllers\UserController.cs
using Microsoft.AspNetCore.Mvc;
// ...
namespace MyWebsite.Controllers
{
// 區域註冊
[RequireHttps]
public class UserController : Controller
{
// ...
}
}
- 全域註冊
Startup.cs
using Microsoft.AspNetCore.Mvc;
// ...
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 全域註冊
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}
}
RequireHttpsAttribute
轉址預設是轉到 443 Port,如果 HTTPS 不是用 443 Prot,就要在註冊 MVC 服務的時候,修改 SslPort
,如下:
Startup.cs
// ...
public class Startup
{
private readonly int _httpsPort;
public Startup(IHostingEnvironment env)
{
if (env.IsDevelopment())
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(@"Properties/launchSettings.json");
var launchConfig = builder.Build();
_httpsPort = launchConfig.GetValue<int>("iisSettings:iisExpress:sslPort");
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => options.SslPort = _httpsPort);
// ...
}
}
用 RequireHttpsAttribute
的方式,只能限制到 MVC / API 的部分,並沒有辦法連靜態檔案都強制使用 HTTPS。
如果整個網站都要用 HTTPS 的話,可以加入 URL Rewrite,將非 HTTPS 都轉址到 HTTPS。
在 Startup.Configure
呼叫 UseRewriter
加入轉址的 Pipeline,如下:
Startup.cs
// ...
public class Startup
{
// ...
public void Configure(IApplicationBuilder app, )
{
app.UseRewriter(new RewriteOptions().AddRedirectToHttps(301, _httpsPort));
// ...
}
}
完成以上設定後,不管是用 HTTP 還是 HTTPS 最終都會轉到 HTTPS 用 SSL 連線了。
為了網站有更高的安全性,就全部都用 SSL 吧!
執行結果
參考
相關文章
- ASP.NET Core Web API 與 SSLASP.NETWebAPI
- ASP.NET Core Kestrel 中使用 HTTPS (SSL)ASP.NETHTTP
- ASP.NET Core 中的管道機制ASP.NET
- 小白開學Asp.Net Core 《八》ASP.NET
- 小白開學Asp.Net Core 《九》ASP.NET
- 小白開學Asp.Net Core 《十》ASP.NET
- 小白開學Asp.Net Core 《四》ASP.NET
- 小白開學Asp.Net Core 《六》ASP.NET
- ASP.NET Core RESTful學習理解ASP.NETREST
- 【asp.net core 系列】4. 更高更強的路由ASP.NET路由
- ASP.NET Core使用HostingStartup增強啟動操作ASP.NET
- ASP.NET Core 2.1 : 十三.httpClient.GetAsync 報SSL錯誤的問題ASP.NETHTTPclient
- ASP.NET Core 框架本質學習ASP.NET框架
- 【包建強】ASP.NET底層機制 HttpHandlerASP.NETHTTP
- ASP.NET Core 學習筆記 第四篇 ASP.NET Core 中的配置ASP.NET筆記
- ASP.NET Core 學習筆記 第五篇 ASP.NET Core 中的選項ASP.NET筆記
- ASP.NET Core ----ASP.NET Core中使用Code FirstASP.NET
- ASP.NET 6.0 Core 遷移 ASP.NET Core 7.0ASP.NET
- 學習ASP.NET Core(06)-Restful與WebAPIASP.NETRESTWebAPI
- [請教]應用 JDBCRealm 強制安全時出現SQLException.JDBCSQLException
- Asp.Net Core學習筆記:入門篇ASP.NET筆記
- ASP.NET Core: 全新的ASP.NET !ASP.NET
- 在ASP.NET Core中用HttpClient(六)——ASP.NET Core中使用HttpClientFactoryASP.NETHTTPclient
- 【ASP.NET Core學習】使用JWT認證授權ASP.NETJWT
- 換個角度學習ASP.NET Core中介軟體ASP.NET
- gRPC在 ASP.NET Core 中應用學習RPCASP.NET
- 加強 Nginx 的 SSL 安全Nginx
- 教師編制,形式
- ASP.NET Core - 開篇ASP.NET
- asp.net core 整合JWTASP.NETJWT
- asp.net core 整合 PrometheusASP.NETPrometheus
- 學習ASP.NET Core Blazor程式設計系列十三——路由(完)ASP.NETBlazor程式設計路由
- 學習ASP.NET Core Blazor程式設計系列十五——查詢ASP.NETBlazor程式設計
- 【asp.net core 系列】 1 帶你瞭解一下asp.net coreASP.NET
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡介ASP.NET
- Ubuntu Apache2 下配置 SSL 證書及全域性 HTTPS 強制跳轉UbuntuApacheHTTP
- 【asp.net core 系列】14 .net core 中的IOCASP.NET
- ASP.Net Core5.0 EF Core使用記錄ASP.NET