安全套接字层(简称SSL)是一种标准的安全协议,用于加密Web服务器和Web浏览器之间的通信。 SSL很重要! 没有它,服务器和客户端之间交换的信息将以纯文本格式发送,因此任何能够捕获数据的黑客都可以读取。
SSL确保服务器和客户端之间发送的信息始终被加密。 即使捕获了您的敏感数据(用户名,密码,信用卡详细信息等),对于缺少在通信会话期间由服务器和客户端共享的SSL证书和加密密钥的任何人,仍将不可读。
在本文中,我们将研究如何在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项目。
- 启动Visual Studio 2017 IDE。
- 单击文件>新建>项目。
- 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
- 指定项目的名称。
- 单击确定保存项目。
- 在“新的.Net Core Web应用程序…”窗口中选择“ API”。
- 从窗口顶部的下拉列表中选择版本ASP.Net Core 2.1或更高版本。
- 取消选中“启用Docker支持”,然后选择“不进行身份验证”,因为在这里我们将不会使用这两个选项。
- 确保选中“配置HTTPS”框。
- 单击确定。
这将在启用了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安全性。
From: https://www.infoworld.com/article/3309256/how-to-enforce-ssl-in-aspnet-core.html