文章目录
- 对称加密的非对称加密
- http和https原理
- TCP三次握手四次挥手
- https通讯流程:
- Charles抓包原理
对称加密的非对称加密
对称加密:发送方的接收方式使用同一个秘钥进行加密和解密,发送方将需要发送的数据,选择某种加密算法,加上秘钥,加密之后传输给接收方,接收方接收到数据使用秘钥和相同的加密算法进行解密,获得数据信息。对称加密的优点是加密速度快,但是,接收方和发送方拥有同样的秘钥,容易泄露,安全得不到保证,且秘钥传递的过程中也容易泄露。
非对称加密:发送方生成一对秘钥,公钥和私钥,公钥可以交给别人,用来加密,私钥用来解密,自己保留,传输过程中即使公钥和传输的数据别截获了,没有私钥也解密不了。
http和https原理
http是什么:http是一种基于请求响应的应用层协议,设计的初衷是为了简单高效的传输超文本数据,所以不涉及任何的数据加密,身份校验和完整性验证,安全性较差。
https是什么:https在http的基础上使用对称加密和非对称加密保证的数据传输的安全性,在握手阶段使用非对称加密传输秘钥,建立连接之后使用秘钥进行对称加密,保证数据的安全,https对数据进行加密,身份的校验还有数据的额完整性,保证数据的安全。
TCP三次握手四次挥手
TCP三次握手:目的是为了在不可靠的网络中建立可靠的连接,并协商初始序号
- 第一步,客户端服务端发送SYN请求请求建立连接
- 第二步,SYN收到之后发送SYN+ACK报文,表明同意建立连接
- 第三步,客户端收到消息之后发送ACK再次确认
- 之后就可以发送消息
为什么不能两次握手,要三次握手?这个是为了防止失效的连接请求再次发送到了服务端,服务端同意连接之后,客户端拒绝了,但是服务端认为建立了连接,等待消息的接收,造成资源浪费。
TCP四次挥手:目的是为了确保算法数据传输完毕,优雅释放连接
- 第一步,客户端发送fin表示不再发送数据,告诉服务端我数据传输结束
- 第二步,服务端接收到数据,发送ACK确认,表明收到服务端的请求,但是我可能还有一些数据需要发送给你,你还要接收
- 第三步,服务端发送完数据之后,发送fin报文,表明我的数据也发送完了,可以关闭了
- 第四步,客户端回复ACK确认收到信息,关闭连接
为什么不能两次挥手:由于客户端请求关闭连接,自己没有数据需要发送,但由于http是全双工的两边都是可以发送数据,服务器的数据可能还没有发送完成,这个时候客户端还需要接收数据不能关闭连接
为什么不能三次挥手:三次挥手是可以的,不过得满足特定条件,当客户端发送关闭连接,这个时候服务端已经也没有数据需要发送了,就可以进行关闭
第四步能不能不要了:不能,第四步是为了确保客户端已经收到了服务端的fin信息,服务端收到之后才会关闭连接,如果没有收到信息,服务端会进行超时重传,再次发送fin给客户端,在2msl时间里,客户端收到信息之后回再次发送ACK
https通讯流程:
TCP三次握手
- 目的:建立可靠的数据传输
- 过程:
- 客户端 → 发送SYN包 → 服务器
- 服务器 → 回复SYN+ACK包 → 客户端
- 客户端 → 发送ACK包 → 服务器
TLS握手
- 目的:保证数据的安全性,协商秘钥和验证服务器证书
- 过程:
- 客户端发起握手,发送信息(支持的TSL版本,支持的加密套件,客户端生成的随机数)
- 服务器响应,发送信息(确定的TSL版本,选定的加密套件,服务器生成的随机数,服务器的CA证书)
- 客户端验证服务器的证书
- 交换密钥,客户端生成预主密钥,使用服务器的公钥加密,发送到服务器,服务器解密获取预主密钥
- 生成会话密钥,服务器和客户端都使用两个随机数和这个预主密钥生成会话密钥
数据传输
- 目的:使用协商的对称密钥加密实际通信数据
- 过程:
- 客户端和服务端使用秘钥对数据加密之后再发送
TCP四次挥手
- 目的:安全关闭TCP连接,释放资源
- 过程:
- 客户端 → 发送FIN包 → 服务器。
- 服务器 → 回复ACK包 → 客户端。
- 服务器 → 发送FIN包 → 客户端。
- 客户端 → 回复ACK包 → 服务器。
Charles抓包原理
作为一个代理服务器,拦截客户端和服务器之间的通讯,做响应的处理之后再发送到对应的地址
- 客户端向服务发送证书请求
- Charles拦截请求,伪装客户端向服务器发送请求
- 服务器返回CA证书
- Charles获取证书的公钥,自己制作证书,返回自己证书给客户端
- 客户端检查证书,生成秘钥,使用Charles公钥加密,发送给服务器
- Charles拦截,使用自己的私钥解密,使用服务端的公钥加密,发送给服务器
- 服务器用自己的私钥解密,想客户端发送响应
- Charles拦截,自己给客户端响应
- 连接建立