【原理/计算机网络】HTTPS中TLS握手过程(实验)

1 前言

之前总是看到各种关于https流程的总结,关于数字证书和数字签名什么的也都知道个大概,但是具体https是怎么执行的一直也没验证过。看过一个视频讲得很好【HTTPS是什么?加密原理和证书。SSL/TLS握手过程】,今天想学着用WireShark抓包实验一下。

Wireshark官网https://www.wireshark.org/

2 抓包

(建议只留一个浏览器和Wireshark,不然包不好找)

  1. 首先打开Wireshark,双击自己正在使用的网络,比如下图中要双击WiFi: en0
    请添加图片描述
  2. 之后就开始进行抓包了,可以看到有很多的TCP报文。在上面的filter框中输入tls就能够过滤出TLS的报文了。(建议选中顶部右数第五个图标让数据列表始终处于最下面的部分)这时,用浏览器打开一个https协议访问的网址,比如百度,观察Wireshark中新抓到的TLS报文:
    请添加图片描述
    可以看到Client Hello的报文,这也是https协议数据传输前浏览器和服务器握手的开始。记录下百度的IP地址,可以修改一下上面filter框的过滤条件为tls && (ip.dst == 103.235.46.250 || ip.src == 103.235.46.250),这样就能够过滤出与百度握手的包。
    之后就可以从Client HelloEncrypted Handshake Message查看https中tls握手的具体全过程了。

3 过程分析

根据上图中的过程查看报文内容对https握手的流程进行分析。
(在Server Hello Done之前的部分都是明文传输)

  1. Client Hello
    主要看安全传输层协议(TLS)。
    请添加图片描述
    可以看到,这一步中浏览器向服务器发送了:
    1) TLS支持版本1.2(上面的1.0是TLS格式,对于不同TLS版本的显示可以参考这篇文章Wireshark抓包TLS协议栏显示版本不一致问题
    2) 第一随机数Random(随机数的作用在下面的第四步)
    3) 支持的加密套件Cipher Suites(点开后可以看到所有的支持加密算法)。
  2. Server Hello
    服务器收到Client Hello后,会回复一个Server Hello,报文的内容如下:
    请添加图片描述
    在这一步,服务器向浏览器回复了:
    1) 确认TLS版本1.2
    2) 第二随机数Random(随机数的作用在下面的第四步)
    3) 确认加密套件Cipher Suite
  3. Certificate, Server Key Exchange, Server Hello Done
    Server Hello发送后,服务器还会接着发送证书和公钥给浏览器,报文内容如下:
    请添加图片描述
    在这一步中,服务器向浏览器发送了:
    1) 服务器数字证书Certificates
    CA向服务器发放的数字证书一般是一个证书链,浏览器需要逐级对证书进行验证直到根证书。由于根证书一般会内置在操作系统或者浏览器内,所以即使中间CA证书是被中间人替换过的,验证到根证书时也能够检验出问题。
    证书的内容如下:
    请添加图片描述
    前2582bytes是数字证书的正文,包括签名算法,颁发者,主题,公钥信息和签名等信息。后面的两段1106bytes的内容为颁发证书的CA的签名。可以看到正好对应证书链中的CA:
    请添加图片描述

2) 服务器RSA公钥
在Wireshark中查看Server Key Exchange握手报文中EC Diffie-Hellman Server Params中的内容如下:
请添加图片描述
里面有传输给浏览器的通过ECDHE算法生成的RSA公钥,用于将浏览器即将要生成的第三随机数传输过来。(https原理–ECDHE密钥协商算法
浏览器和服务器要进行密钥交换。有两种常用方式:RSA和ECDHE(HTTPS中SSL/TLS握手时的私钥用途(RSA、ECDHE)),这里使用了后者。
4. Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message浏览器 -> 服务器
之后浏览器要同样也要通过ECDHE生成一对RSA公私钥,并把公钥发送给服务器(有的网上资料说通过ESDHE进行密钥交换,在浏览器发送公钥之前还会使用私钥进行加密,但是在下面报文内容中并没有看到)。报文内容如下:
请添加图片描述
浏览器通过协商好的算法、服务器的公钥、自己的私钥计算出预主密钥(如果是RSA密钥交换算法,浏览器会生成第三个随机数作为预主密钥并通过服务器的公钥加密后发送给服务器)。
在这一步中,只有Client Key Exchange向服务器发送了数据。Change Cipher Spec, Encrypted Handshake Message是冗余信息,前者是用于告知对方后续的通信都采用协商的密钥与算法进行加密通信,后者是握手结束的信息。(这里也可以看看这篇文章TLS中ChangeCipherSpec为什么是个单独的协议类型【转】
浏览器使用第一随机数、第二随机数和预主密钥生成最终的对称会话密钥。
5. Change Cipher Spec, Encrypted Handshake Message服务器 -> 浏览器
当服务器接收了浏览器的公钥后,浏览器和服务器就完成了彼此的公钥交换。服务器使用同样的方式计算出相同的预主密钥(RSA交换算法使用自己的私钥解密浏览器发来的预主密钥)。之后和上一步中的浏览器使用两个随机数和预主密钥计算出相同的会话密钥。
之后可以结束握手。报文内容如下:
请添加图片描述
6. Application Data
之后浏览器和服务器就会使用相同的会话密钥通过对称密钥加密进行数据的传输。

4 总结

Server

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Client

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值