IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> https建立过程探索 -> 正文阅读

[网络协议]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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:41:42  更:2022-02-24 15:43:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:24:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码