如何在ASP.Net Core中强制执行SSL

安全套接字层(简称SSL)是一种标准的安全协议,用于加密Web服务器和Web浏览器之间的通信。SSL很重要!没有它,服务器和客户端之间交换的信息将以纯文本格式发送,因此任何能够捕获数据的黑客都可以读取。

SSL确保服务器和客户端之间发送的信息始终被加密。即使捕获了您的敏感数据(用户名,密码,信用卡详细信息等),对于缺少在通信会话期间由服务器和客户端共享的SSL证书和加密密钥的任何人,仍将不可读。.

[ 小心! 每个开发人员都应避免的8个职业陷阱 。 • 要成为一名真正的软件开发人员,必须阅读7本书 。 • 即使是经验丰富的开发人员,也会犯15个菜鸟错误 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

在本文中,我们将研究如何在ASP.Net Core中使用SSL。我们将使用一个新的中间件组件UseHttpsRedirection将所有HTTP请求重定向到HTTPS。我们还将利用HSTS(HTTP严格传输安全性)(一项可选的安全性增强功能)来进一步增强Web连接的安全性。ASP.Net Core 2.1中引入了对新中间件和HSTS增强的支持,以强制客户端在连接中使用HTTPS。

创建一个ASP.Net Core Web API项目

首先,让我们创建一个ASP.NET Core项目并安装必要的软件包。如果您的系统已启动并运行Visual Studio 2017,请按照下面概述的步骤创建一个ASP.Net Core Web API项目。

  1. 启动Visual Studio 2017 IDE。

  2. 单击文件>新建>项目。

  3. 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。

  4. 指定项目的名称。

  5. 单击确定保存项目。

  6. 在“新的.Net Core Web应用程序…”窗口中选择“ API”。

  7. 从窗口顶部的下拉列表中选择版本ASP.Net Core 2.1或更高版本。

  8. 取消选中“启用Docker支持”,然后选择“不进行身份验证”,因为在这里我们将不会使用这两个选项。

  9. 确保选中“配置HTTPS”框。

  10. 单击确定。

这将在启用了SSL的Visual Studio中创建一个新的ASP.Net Core应用程序。新的默认模板将在Startup.cs文件中添加必要的中间件组件,如下面的代码片段所示。

public void Configure(IApplicationBuilder app, IHostingEnvironment env){    if (env.IsDevelopment())    {        // Write your own custom code to configure the middleware    }    else    {        app.UseHsts();    }    app.UseHttpsRedirection();
}

这是生成的默认Configure方法的修改版本。下面的代码片段说明了如何使用UseDeveloperExceptionPage方法从管道捕获异常,然后相应地生成HTML错误响应。

public void Configure(IApplicationBuilder app, IHostingEnvironment env){    if (env.IsDevelopment())    {        app.UseDeveloperExceptionPage();    }    else    {        app.UseHsts();    }    app.UseHttpsRedirection();    app.UseMvc();} 

在生产环境中运行应用程序时,您将需要配置中间件以将所有HTTP请求重定向到HTTPS。下一节演示如何自定义AddHttpsRedirection中间件以实现此目的。

将HTTP请求重定向到ASP.Net Core中的HTTPS

打开Startup.cs文件,并在ConfigureServices方法中添加以下代码。注意如何使用AddHttpsRedirection方法配置中间件选项。此处的HTTPS端口已设置为5001。默认值为443。

services.AddHttpsRedirection(options =>    {        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;         options.HttpsPort = 5001;    });

在ASP.Net Core中使用HSTS可增强安全性

HTTP严格传输安全性是一种可选的安全性机制,并且具有HTTP / 2功能。HSTS是使用特殊的响应标头指定的,可用于保护网站免受中间人攻击。HSTS确保Web浏览器为特定的主机标头和特定的持续时间缓存证书。

但是,由于HSTS由客户端强制执行,因此存在某些限制。客户端应支持HSTS,并且您至少需要一个成功的HTTPS请求,这是建立HSTS策略所必需的。以下代码段说明了如何在ConfigureServices方法中配置HSTS。

services.AddHsts(options =>{    options.Preload = false;     options.IncludeSubDomains = false;     options.MaxAge = TimeSpan.FromDays(30);});
在运行项目时,系统将提示您信任IIS Express(如果正在使用IIS Express)生成的自签名证书。如果单击“是”,将提示您安装证书。再次单击“是”以安装证书。就是这样!在Web浏览器中运行该应用程序时,您将在URL上看到HTTPS。对于生产,您应该从信誉良好的证书颁发机构购买有效的可信证书,然后从Windows证书存储区进行安装。

HTTPS不仅可以加密服务器和客户端之间的通信,还可以防止其他人修改内容。HSTS是一种Web安全策略机制,用于确保Web浏览器仅通过安全的HTTPS连接而不是通过不安全的HTTPS连接与Web服务器交互。我将在此处的后续文章中进一步讨论ASP.Net Core安全性。