ASP.NET Core 教学 - 强制 SSL

本文介绍了 ASP.NET Core 强制使用 SSL 加密连线的方法。首先说明了启用 SSL 的方式,可通过图形化工具或直接编辑。接着阐述强制 SSL 的设定,包括安装套件、区域或全域注册等。还提到 URL Rewrite 可让整个网站使用 HTTPS,最终实现安全的 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、付费专栏及课程。

余额充值