https建立过程探索


其实很复杂,咱也只是学习其中的一小块

打开wireshark,监听相应端口
访问https://xz.aliyun.com
过滤,ip.addr == ip地址
这个ip地址是cdn的ip,你可以通过ping xz.aliyun.com来获得,大家应该都不一样
在这里插入图片描述

https整个过程

首先是tcp三次握手
然后tls建立连接
最后http发送消息

首先看tcp三次连接

首先11.414471s发送第一个tcp连接,经过0.000068s后又发送了一个tcp连接,连续发送了两个,应该是系统防止一个请求容易产生失误。
过了0.042s之后xz.aliyun.com返回了syn ack
紧接着系统于0.000103s之后马上返回ack
过程是两个tcp连接并行的,为了防止一个连接容易产生失误。
最终选择了第二个建立连接57501端口

具体过程如下

请添加图片描述

握手完毕

tls建立连接

可以看这个图(图1)有个初步了解
请添加图片描述

然后我根据wireshark截获的图一步步探索
在这里插入图片描述

1.Client Hello

客户端首先建立连接

我们只关注tcp层/tls v1.2/HandShake Protocol: Client Hello传输的数据
其中主要关注以下信息:
1.客户端生成的随机数c63a917777febe41f965c4408a5e2ee22442bf1a8b0a52721f06a32f,对应于图1中的client random
请添加图片描述
2.客户端支持的加密算法列表(Cipher Suites)之后服务器回复从客户端的列表中选择的密码套件(后面会有具体的解释)
在这里插入图片描述
3.客户端支持的压缩算法列表(Compression Methods)
在这里插入图片描述
还看到一堆Extension扩展部分
4.支持的TLS版本信息
在这里插入图片描述
5.签名算法
在这里插入图片描述

2.Server Hello

server发送了
server randoma10bb82be8f1efebfd2e0858d1dfa8ea0f01dbe13dafe8f9944aa44be9c281c4
同时告诉客户端选择的密码套件Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
TLS 1.2版本
在这里插入图片描述
解释一下,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)定义一个密钥交换算法、一个批量加密算法、一个消息认证码(MAC)算法。:
密钥交换算法:使用RSA用于决定客户端与服务器之间在握手时如何身份验证
批量加密算法:AES_128_GCM加密消息流
消息认证码算法:SHA256用于创建密码散列函数,消息流每个数据块的加密散列。(用于摘要验证的哈希函数)

伪随机函数,例如TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。

3.Certificate, Server Key Exchange, Server Hello Done

依次对以下tls查看
在这里插入图片描述

certificate(证书)

服务端接收到客户端的Client Hello之后,服务端需要将自己的CA证书发送给客户端
在这里插入图片描述
证书是对服务端的一种认证,是由专门的数字证书认证机构(CA)审核之后颁发的,所以一般人无法伪造。在颁发证书的同时还会产生两把钥匙,一把私钥,一把公钥。私钥由服务端保管不可泄露,公钥则附带在证书中公开。证书本身还附带了一个证书电子签名,这个签名用来验证证书的完整性和真实性,防止证书被人窜改。
请添加图片描述
加密摘要算法对应serverhello时所选择的TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f),rsa以及sha256

server key exchange(服务端交换key)

这种属于ECDHE(EC Diffie-Helloman Server Params)
HTTPS常用的密钥交换算法有两种,一种是RSA(过时),另一种是ECDHE(对称加密)
什么是密钥交换呢?就是通过传递一些参数,并且双方通过计算确定对称加密的密钥,同时如果黑客获取了这些参数,也无法破解出密钥。
而值得注意的是,使用RSA算法需要tls四次握手,ECDHE只需要三次,即本文使用的算法。

ECDHE算法是这样演变的DH->DHE->ECDHE
DHE是DH的实现,其中E(ephemeral:临时性的)代表客户端和服务器都生成临时的随机私钥,而不是只有客户端是随机的,而服务器是固定的
ECDHE是DHE算法的优化,减少了乘法运算,利用ECC椭圆曲线的特性减少计算量。

理解ECDHE才能明白server key exchange到底在干嘛,以及后续的client部分
原文:https://www.likecs.com/default/index/show?id=124371
在这里插入图片描述
回到数据:
请添加图片描述
在这里插入图片描述
椭圆曲线:
请添加图片描述
对椭圆曲线感兴趣的童鞋可以研究一下:https://zhuanlan.zhihu.com/p/40243602

server hello done(服务端hello结束)

内容部分Length: 0,仅有header,表示server hello结束
在这里插入图片描述

4.Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message

在这里插入图片描述

client key exchange(客户端交换key)

客户端收到服务端的证书后首先会验证证书的有效性,根据证书链逐级验证,然后会用证书的公钥验证签名。
在这里插入图片描述
随后客户端生成一个随机私钥,根据服务端给的椭圆曲线,椭圆曲线基点G生成客户端公钥。发送给服务端
在这里插入图片描述
到现在为止,双方共享的信息有:

client random
server random
圆锥曲线
圆锥曲线基点G
服务端公钥
客户端公钥

服务端保留服务端私钥,客户端保留客户端私钥。

双方各自根据ECDHE算法计算出点(x,y)
然后最终的会话密钥是:[client random + server random + x]

所有的文章都说tls是使用非对称加密,加密对称加密的密钥。现在看来最终的通信确实用对称加密,但是对称加密的密钥中的x是用ECDHE算法得来的,属于非对称加密。

change cipher spec(更改密码规格)

change cipher spec(更改密码规格)
算好会话密钥后客户端告诉服务器,已经算好了,可以用对称加密通信了
在这里插入图片描述

encrypted handshake message(加密握手信息)

encrypted handshake message(加密握手信息)
用来确认加密是否完成
在这里插入图片描述

Application Data:使用tls传递http数据

在这里插入图片描述
http-over-tls:使用tls加密过的http数据

参考:
https://ocdman.github.io/2018/11/02/%E8%AF%A6%E8%A7%A3TCP%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E4%BB%A5%E5%8F%8ATLS-SSL%E6%8F%A1%E6%89%8B/
https://segmentfault.com/a/1190000021559557?_ea=29659396
https://www.likecs.com/default/index/show?id=124371

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值