Go中TLS源码学习(3)之 TLS握手在net/http框架中的入口

请添加图片描述

💖SSL/TLS专栏目录导航💖

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

5.3.1 net/http框架中的入口

tls握手流程在Go的net/http包中的入口是:

  • func (c *conn) serve(ctx context.Context) 函数中的tlsConn.Handshake()

关于net/http的框架在上文已经画了一个比较详细的图,其中包括TLS握手流程在HTTP服务源码中的位置。这里直接给出:
在这里插入图片描述
Server端每没到一个TCP连接请求后,会创建一个gorouting用于专门处理client端请求。处理client请求的函数是conn.serve()。此函数实现如下:
请添加图片描述
从这段代码可以看出,server函数实际上就是下图中子协程的工作内容:
请添加图片描述
下面就是从 tlsConn.Handshake()开始学习TLS握手流程。

在Handshake()函数中,关键操作是:调用当前连接的handshakeFn()
请添加图片描述
你可能会觉得这里已经找到了tls的握手函数,直接追踪不就行了吗? 理论上是这样的,但实际上handshakeFn是个函数指针,不是一个固定的实现,它的取值与当前连接所属的类型有关(客户端、服务端)。这是面向对象编程的精髓(Go语言也好,C语言也好,都有类似的处理手法)。此处还是得回溯下c当前是哪个对象,然后才能顺腾摸瓜找到真正的TLS握手流程。

当前连接可以是服务端,也可以是客户端;两者在TLS处理上差别很大。而目前主要通过服务端来学习TLS握手流程,当前位于Server端,因此这里应该使用服务端连接:(不要问怎么找到的,问就是花了1分钟全局搜索找的✌️✌️✌️)

请添加图片描述
至此,便找到真正的TLS握手代码入口。后面便真正开始介绍Server端的TLS握手流程了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值