ASP.NET Core Web API 与 SSL

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: SSL 一直没有真正研究过SSL,不知道下面的理解是否正确。 SSL是Secure Sockets Layer的缩写,它用来保护服务器和客户端之前的通信。它是基于信任+加密的概念。 在介绍SSL的原理之前,首先介绍一下加密(Encryption)的概念。

SSL

一直没有真正研究过SSL,不知道下面的理解是否正确。

SSL是Secure Sockets Layer的缩写,它用来保护服务器和客户端之前的通信。它是基于信任+加密的概念。

在介绍SSL的原理之前,首先介绍一下加密(Encryption)的概念。

 

在很多的应用/API里,最常见的一种加密的方式是对称加密(Symmetric Encryption)

对称加密的原理是这样的:比如说甲方想要发送一些数据给某个调用者(乙方),乙方可能在某个进程或客户端服务器里,或者是跨越网络的。总之是两方通信。而甲方发送加密的数据需要一些加密的方法,这个加密方法双方必须都知道(例如AES),此外还需要一个secret,它是一个任意的字符串,加密方法需要使用secret来进行加密。使用这样的加密方法把数据加密,然后加密的数据就会被发给乙方。乙方在接受这个加密后的数据之后,需要同样的加密方法和同样的secret来进行解密。所以对称加密的弱点也就在这,这个secret需要在双方共享。

 

而对于SSL来说,它还可以使用第二种加密方式:非对称加密(Asymetric Encryption)

非对称加密的原理是这样的,它也需要加密方法来对数据进行加密,但加密的时候使用的是public key

,这个public key是从乙方那里获得的;它实际就是一个secret,但是这个secret并没有被保护,所以乙方并不担心甲方或其他方使用它来进行解密,因为public key不可以用来解密,它只能用来进行加密。而当乙方接收到加密数据之后,它使用private key来进行解密,这个private key是保密的,别人不知道的,这样乙方就可以得到解密后的数据。

所以非对称加密的优势还是很明显的。

 

SSL使用这两种加密方式。

当客户端和(Web)服务器使用SSL进行通信前会有一个SSL握手的操作,用户是不会察觉这个动作的,它发生在真正调用API之前。

当客户端开始请求(https)后,服务器首先返回的是证书。

证书里面包含了很多的信息,这些信息首先就可以用来对证书本身进行信任确认。证书里包含了一些承诺:包括这个证书来自受信任的源。例如你使用SSL请求Microsoft.com,那么返回的证书就会对你承诺:“这个服务器是被微软所拥有的”等。证书还会包含着“谁可以保证这些信息的真实性”的信息。这里还有一个证书颁发机构(Certificate Authority,CA)的列表,这些机构是我不得不信任的,证书颁发机构可以保证这些信息等真实性。这里的证书就是由这些机构来签发的。通常浏览器都会加载这些知名证书颁发机构的根证书。这些机构维护着一个所有已签名证书的列表和已经被吊销的证书的列表。未签名的证书是不安全的,已签名的证书是不可以被修改的。自己签名的证书叫自签名证书。所有的根证书颁发机构的证书都是自签名的。

服务器返回证书的同时还返回了一个public key,浏览器根据信任的CA来检查证书是否仍然有效并且和该网站仍然关联。

如果浏览器最终信任了这个证书,那么它会使用这个public key来生成加密一个随机的对称加密key并把它使用加密的URL和HTTP数据一同送回到服务器。

服务器通过它的private key来对这个对称的加密key进行解密,随后用解密出来的对称key来解密URL和HTTP数据。然后服务器会使用这个对称加密key发出一个加密确认,接下来加密的对话就可以开始了,后续的通信都是使用这个对称key。

那么为什么整个通信不都使用非对称加密呢?因为它比较消耗资源。所以非对称加密只用在SSL握手阶段来创建一个后续对话的对称加密key,后续的通信都是使用这个对称key来加密传输的数据。

 

在ASP.NET Core中启用HTTPS 

HTTPS (也叫做 HTTP over TLS, HTTP over SSL, and HTTP Secure),它的传输协议使用TLS(SSL)加密

下面都是官方文档的内容。

官方建议ASP.NET Core应用使用HTTPS重定向中间件来把所有的HTTP请求都重定向到HTTPS上。

而实际上,ASP.NET Core 2.1的webapi模版里已经这样做了:

此外还可以在ConfigureServices方法里配置该中间件:

这里把返回到状态码设为307,这其实是默认值。而生产环境应该调用 UseHsts方法。

然后把Https的端口设置为5001,默认值是443。

 

注意:需要同时监听http和https的端口

 

运行程序,使用POSTMAN发出一个GET请求到ValuesController:

没有返回任何响应,这是因为POSTMAN到设置问题。请按照下图修改POSTMAN到配置:

把SSL certificate verification一项设置成 OFF。

然后再发送GET请求就OK了:

 

这里面有一个重定向到过程,我们改一下POSTMAN到设置来看一下这个过程:

把Automatically follow redirects改为OFF。

然后发送HTTP的请求:

它返回的body是空的,Header里面有重定向的地址,状态码是307,也就是我之前配置的。

然后我再发送请求到Header里Location到这个地址就会得到想要到结果,我就不贴图了。

 

下面是我的关于ASP.NET Core Web API相关技术的公众号--草根专栏:

目录
相关文章
|
7天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
7天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
21 3
|
12天前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
39 5
|
13天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
55 6
|
12天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
36 3
|
13天前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
在Python的Web开发领域中,RESTful API是核心技能之一。本教程将从零开始,通过实战案例教你如何使用Flask框架搭建RESTful API。首先确保已安装Python和Flask,接着通过创建一个简单的用户管理系统,逐步实现用户信息的增删改查(CRUD)操作。我们将定义路由并处理HTTP请求,最终构建出功能完整的Web服务。无论是初学者还是有经验的开发者,都能从中受益,迈出成为Web开发高手的重要一步。
36 4
|
11天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
31 1
|
13天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
在这个Python Web开发的新纪元里,RESTful API的设计已经超越了简单的技术实现,成为了一种追求极致用户体验和开发者友好的艺术表达。通过优雅的URL设计、合理的HTTP状态码使用、清晰的错误处理、灵活的版本控制以及严格的安全性措施,我们能够让RESTful API变得更加“性感撩人”,为Web应用注入新的活力与魅力。
30 3
|
15天前
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
在 Python Web 开发中,RESTful API 是构建强大应用的关键,基于 Representational State Transfer 架构风格,利用 HTTP 卞性能。通过 GET、POST、PUT 和 DELETE 方法分别实现资源的读取、创建、更新和删除操作。示例代码展示了如何使用 Flask 路由处理这些请求,并强调了状态码的正确使用,如 200 表示成功,404 表示未找到资源等。
38 5
|
29天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
下一篇
无影云桌面