0x01 分析淘宝网站的https数据流
打开淘宝 wireshark抓取到如下
第一部分:
因为https是基于http协议上的,可以看到首先也是和http协议一样的常规的TCP三次握手的连接建立,请求的是服务器的443端口。
1.客户端向443端口发送SYN信号
2.服务端回应连接,ACK
3. tcp/ip三次握手完成
第二部分:
接下来从第4个数据包开始,其实就是SSL握手过程中所产生的数据包,也就是使用HTTPS协议加密的信息。
1、 初始化阶段。客户端创建随机数,发送ClientHello 将随机数连同自己支持的协议版本、加密算法和压缩算法发送给服务器。服务器回复ServerHello将自己生成的随机数连同选择的协议版本、加密算法和压缩算法给客户端:
2、 认证阶段。服务器发送ServerHello的同时可能将包含自己公钥的证书发送给客户端(Certificate),并请求客户端的证书(Certificate Request)。
3、 密钥协商阶段。客户端验证证书,如果收到Certificate Request则发送包含自己公钥的证书,同时对此前所有握手消息进行散列运算,并使用加密算法进行加密发送给服务器。同时,创建随机数pre-master-secret并使用服务器公钥进行加密发送。服务器收到这个ClientKeyExchange之后解密得到pre-master-secret。服务器和客户端利用1阶段的随机数,能够计算得出master-secret。
2、 握手终止。服务器和客户端分别通过ChangeCipherSpec消息告知伺候使用master-secret对连接进行加密和解密,并向对方发送终止消息(Finished)。
0x02 RSA在https中如何分发密钥
密钥管理和分发
密钥管理要求
- 对于一个密钥加密方案,双方必须共享同一密钥
- 必须保护密钥不被其他人访问
- 钥匙应该定期更换
- RSA位于ssl(这里暂且叫它为安全协议),协商机制之间,是为了加密非对称算法的密钥,非对称密钥是为了加密后来传输信息的对称加密的密钥。
- RSA的密钥分发,RSA作为非对称加密算法,只有一个私钥,公钥虽多,但是通过公钥加密的信息只有私钥拥有者(服务器)才可以解开,这样就可以保证安全性。
0x03为什么有的数据包大于1500字节
在测试的时候,发现有些时候用wireshark抓到的包中含有很多大于mtu的数据包。查资料得知,这是因为网卡有设置tcp-segmentation-offload。这是操作系统为了减轻负担,提高处理效率的一种方法。
tcp-segmentation-offload(TSO):
TSO (TCP Segmentation Offload) 是一种利用网卡替代CPU对大数据包进行分片,降低CPU负载的技术。如果数据包的类型只能是TCP,则被称之为TSO。此功能需要网卡提供支持。TSO 是使得网络协议栈能够将大块 buffer 推送至网卡,然后网卡执行分片工作,这样减轻了CPU的负荷,其本质实际是延缓分片。
比如我自己再linux环境下测试开启TSO和关闭TSO的区别
查看网卡是否支持TSO
用到的是ethtool命令,ethtool 是用于查询及设置网卡参数的命令
首先查看网卡
在用ethtool -k ens33命令查看网卡TSO功能状态
是关闭的 这时候抓包,发现大小都没有超过MTU值的
现在打开网卡的TSO,官方用法
不过我的虚拟机网卡不支持这个功能,打开后应该会捕获到超过MTU值大小的数据包