HTTPS 建立连接的详细过程
简介
HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听、被篡改、被伪装)
对称加密和非对称加密
-
对称加密
- 即加密的密钥和解密的密钥相同,
-
非对称加密
- 非对称加密将密钥分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密
建立连接
-
HTTP和HTTPS都需要在建立连接的基础上来进行数据传输,是基本操作
-
当客户在浏览器中输入网址的并且按下回车,浏览器会在浏览器DNS缓存,本地DNS缓存,和Hosts中寻找对应的记录,如果没有获取到则会请求DNS服务来获取对应的ip
-
当获取到ip后,tcp连接会进行三次握手建立连接
tcp的三次挥手和四次挥手
过程简图
三次挥手(建立连接)
-
第一次:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
-
第二次:服务器收到SYN包,向客户端返回ACK(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RCVD状态;
-
第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
-
完成三次握手,客户端与服务器开始传送数据,也就是ESTABLISHED状态。
-
三次握手保证了不会建立无效的连接,从而浪费资源。
四次挥手(断开连接)
-
第一次: TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
-
第二次:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
-
第三次:服务器关闭客户端的连接,发送一个FIN给客户端。
-
第四次:客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
HTTP请求过程
-
建立连接完毕以后客户端会发送响应给服务端
-
服务端接受请求并且做出响应发送给客户端
-
客户端收到响应并且解析响应响应给客户
HTTPS
-
在使用HTTPS是需要保证服务端配置正确了对应的安全证书
-
客户端发送请求到服务端
-
服务端返回公钥和证书到客户端
-
客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
-
服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
-
客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
-
SSL加密建立