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 的话还要经过以下设定。

先安装两个套件:

  1. Microsoft.AspNetCore.Mvc
  2. 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 吧!

执行结果

参考

Enforcing SSL in an ASP.NET Core app

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值