我是靠谱客的博主 安详小猫咪,最近开发中收集的这篇文章主要介绍Go中TLS源码学习(1)之Https服务端框架详解????SSL/TLS专栏目录导航????,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

请添加图片描述

????SSL/TLS专栏目录导航????

专栏包括的内容:
????1. SSL/TLS原理知识
????2. Go源码中TLS实现
????3. openssl中TLS实现
????4. SSL卸载
????5. SSL代理
????6. SSL V.P.N
????7. SSL 与 IPSec
????8. 其他
请添加图片描述



SSL/TLS协议从诞生到现在已经近30年了,除了早期网景公司的程序员实现的SSL上存在部分技术问题外,SSL3.0到TLS1.3的实现还是很成熟、稳定的。现阶段,TLS的实现比较经典的有openssl, 这个简直是安全领域的圣经呀,采用C代码构建的庞大的体系,openssl及其衍生项目应该称得上是当下网络安全的基石。

当然除了openssl外,还有一个比较经典的https包实现,这就是go源码中的net/http包。加之现在正在使用Go语言做项目,为了更加快速学习go语言及其编码规范,因此准备学习下go源码中的tls实现。

本文计划将Go源码、openssl中的TLS实现做一个简要的学习并记录之。涉及的语言主要是:Go语言,C语言。

通过这个TLS实现章节(注:此文只是节选的一部分, 最初是一个介绍TLS实现的大章节,既包括go实现,也包括c实现;因此这里章节序号不再调整,方便以后直接更新修改完善),希望能够达到的目标如下:

  • 逐步深入了解TLS握手协议
  • 了解TLS握手协议中各关键字段的使用方式、作用
  • 能够分析TLS为何这样设计
  • 针对某种场景,根据TLS协议特点分析是否能够满足要求

5.1 Go源码TLS实现

先易后难吧,go的实现应该比较人性化一点。不能上来就啃硬骨头,容易失去信心。

5.1.1 https服务端实例

在Go中创建https服务比较容易。下面给一个示例:
请添加图片描述

在浏览器中输入对应的URL便可以访问go创建的https服务器:
请添加图片描述

上面演示了如何使用Go搭建一个Https服务器。下面便是通过刚才的程序,一步步来学习经典的net/http中HTTPS的实现框架,并重点学习其中的TLS的实现逻辑。

5.1.2 https实现框架

学习一门语言,网上的大佬们都是推荐阅读源码,通过那些顶级开发者的代码形成良好的编码风格和习惯。这也是我比较推崇的学习方式,在工作中也偶尔去阅读一些经典的源码实现;学习Go语言自然不能放过net/http包的实现。Why? 因为Go的net/http包在业界中相当的出名,非常优秀,因此一直做网络开发并在学习Go的我应该学习下。

最初的一段时间,直接在go源码中寻找tls的实现。感觉找到了,因为到处都是TLS相关的代码,但是又没完全找到,只是因为我不知道从哪里开始阅读,谁最初调用的协商接口,最后报文又发向何方,等等诸多问题 。困难比较大,于是乎,颓废了一段时间。后来我开始循序渐进的学习,先学习基本的http服务的逻辑,然后是gin实现的web框架,最后才到了tls实现。现在再回首,这个路线还是很有效果,后来阅读TLS代码容易了很多。

Go中https服务端框架整理如下:
请添加图片描述

无论go原生的web框架,还是Gin框架等等,都是采用上述架构它也是非常常见的服务器模型

❤️ 一个协程(线程)专门用于监控端口,创建连接

❤️ 每一个连接创建一个协程(线程),专门处理该连接上的业务逻辑

不同的是,其他语言(如C)都是采用线程来处理,而Go采用更加轻量级的gorouting来处理,因此性能更佳,能处理更多的并发请求。

上图中还重点强调了“Web框架”。目前go存在很多的web框架,原因在于Go源码中的默认web框架实现非常的简单(ServeHTTP实现的比较简单),无法满足比较复杂的业务逻辑。如果想实现更复杂的web框架,可以自定义实现满足需求的web框架(无论如何实现,但必须实现ServeHTTP接口)。Go原生的ServeHTTP(默认:DefaultServeMux)实现中,路由采用的是map的方式,而Gin框架中采用的是前缀树的方式;前缀树的方式是目前比较通用的路由匹配算法

上图中的框架比较简洁,也是比较通用的服务器架构。下面是我整理了很久的HTTPS的框架实现。将关键核心代码放到了图片中,可以通过一张图来了解go中Https服务实现的基本框架。下图的左半侧是TLS相关的逻辑;右半侧是原生Http服务相关的逻辑

请添加图片描述

最后

以上就是安详小猫咪为你收集整理的Go中TLS源码学习(1)之Https服务端框架详解????SSL/TLS专栏目录导航????的全部内容,希望文章能够帮你解决Go中TLS源码学习(1)之Https服务端框架详解????SSL/TLS专栏目录导航????所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部