一、网络数据包
1.传输过程
1)应用层:
定义应用程序间通信和交互的规则和标准;协议:HTTP、HTTPS
- 应用进程通过系统调用 Socket 库,来委托协议栈工作,将消息/报文传输给传输层
2)传输层:
提供了可靠的数据传输服务,确保数据在端到端之间的可靠传输;协议:TCP、UDP
- 经过TCP三次握手建立连接后,数据会被以 MSS 的长度为单位进行拆分,拆分出来的每一块数据都会加上 TCP 头信息,放进单独的网络包中,然后交给网络层
3)网络层:
负责在不同网络之间传输数据包,处理数据包的路由和转发;协议:IP、ICMP
- 网络层根据路由表规则找到对应网卡的IP地址,加上IP报头,然后交给网络接口层
4)网络接口层:
负责网络包在物理网络中的传输,比如网络包的封帧、 MAC 寻址、差错检测,以及通过网卡传输网络帧等;协议:ARP、以太网
-
网络接口层通过ARP协议找到接收路由器的MAC地址,加上MAC头部
-
然后网卡驱动程序会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列FCS
-
最后网卡将网络包转为电信号,通过网线发送出去
-
电信号到达网线接口后,交换机里的模块进行接收,将电信号转换为数字信号,根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口
-
网络包经过交换机转发之后到达路由器,并在此更换MAC头部,被转发到下一个路由器直至目标设备
2.数据加密
1)算法思想
HTTPS加入SSL/TLS 协议,解决 http 数据没有加密、数据容易纂改、无法验证身份的三个核心问题
-
混合加密保证信息机密性
-
- 会话双方交换公钥,然后用对方的公钥加密会话秘钥,通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据
-
数据完整性与数据来源
-
- 计算内容的哈希值用私钥加密生成数字签名,将内容和数字签名一起发送出去,接收端重新计算哈希值,公钥解密数字签名验证内容不被篡改
-
数据来源身份验证
-
- CA用自己的私钥将服务器公钥加密生成数字签名和服务器公钥一起包含在数字证书中
-
- 客户端使用CA公钥验证数字证书中的服务器公钥是否可信
总结:
数字证书验证机构CA | 服务器 | 客户端 | |
---|---|---|---|
公钥 | 解密数字证书验证服务器公钥是否可信 | a.客户端加密会钥密钥;b.客户端解密服务端消息数字签名 | a.服务端加密会钥密钥;b.服务端解密客户端消息数字签名 |
私钥 | 加密服务器公钥生成数字签名、数字证书 | 服务端加密消息内容哈希值 | 客户端加密消息内容哈希值 |
2)基本流程
A.RSA握手
缺陷:不支持前向保密,一旦服务器私钥泄漏,所有的通信内容都可以被破解
B.ECDHE握手
3)证书链
服务器发送的实际上是证书链,每一份证书都由上一级签发,只有根证书是自签发的,根证书公钥内嵌在系统中
以https://www.baidu.com为例(CN:公用名;O:组织;OU:组织单位)
|
|
|
二、抓包原理
1.基本思路
设置一个中间人进程,每次目标进程之间的会话都先与中间人进程通信,再进行转发。
2.HTTPS 抓包过程
因为https涉及身份验证和数据加密,所以要将中间人的根证书导入客户端的操作系统以获取客户端的信任,且在建立加密通信前分别与两端建立连接
-
1)拦截客户端请求,自己转发给服务端
-
2)拦截服务端数字证书链,保存服务器公钥,将伪造的证书链发给客户端
-
- 客户端使用中间代理的公钥加密密钥参数并发送给服务端
-
3)拦截客户端密钥参数,用自己的私钥解密,获得通信密钥,并把密钥参数使用服务器公钥加密后转发给服务端
-
- 服务端获取密钥参数生成通信密钥
此时客户端、中间代理、服务端都拥有了一样的通信密钥,中间代理可以拦截两端消息解密获取信息再加密转发