https加密算法

HTTPS加密算法

利用TLS; RSA算法

  1. 首先建立TCP三次握手
  2. 之后进行TLS四次握手(非对称加密)
    涉及到三个随机数 client randomserver randompre_master_key
  • 第一次握手
    客户端告诉服务端支持什么样的加密协议版本(TLS 1.2),使用什么样的加密套件(RSA),并发送一个client random
  • 第二次握手
    服务端告诉客户端确定的加密方式等信息(比如:TLS 1.2,RSA),服务器证书以及服务器随机数server random
  • 第三次握手
    客户端从服务器证书中取出服务器公钥,再生成第三个随机数pre_master_key;将该随机数用公钥加密;用三个随机数得到一个会话密钥,同时把迄今为止的通信数据内容生成一个摘要(也叫finished报文),用会话密钥加密一下,发给服务器做校验;
  • 第四次握手
    服务端使用服务器私钥解密得到客户端的pre_master_key;服务端用三个随机数,同样的算法获得一个会话密钥,同样将迄今为止的通信数据内容生成一个摘要(也就是finished报文),发给客户端做校验;
  1. 加密通信(对称加密)
    之后利用会话密钥来进行对称加密;
  2. 为啥不用非对称加密?
    非对称加密慢;对称加密相对快一点;

服务器证书

服务器证书本质上是CA(权威数字证书机构)的私钥加密过的服务器公钥;

被私钥机密过的内容可以被公钥解密;公钥任何人都可以得到,所以客户端可以用CA公钥来解密服务器证书,从而拿到藏在里面的服务器公钥;

为什么不能直接传服务器公钥呢?因为服务器公钥传输过程中会被黑客替换掉,客户端拿着假公钥来加密pre_master_key;黑客可以获取pre_master_key;而client random、server random是公开的,因此可以计算出会话密钥;有了会话密钥就可以破坏通信内容了;

第三次握手:CA加解密可以让client确认server身份;

如何获得CA公钥;

可以请求CA官网,获取公钥;但是上网人数过多,不太合适,可以直接将CA公钥放到操作系统或者浏览器中

TCP三次握手(Three-Way Handshake)

三次握手是TCP建立连接的过程,目的是为了同步连接双方的序列号、确认对方的接收能力以及建立可靠的通信连接。握手过程如下:

  • 第一次握手
    客户端发送一个带有SYN标志的TCP报文到服务器,并且随机初始化一个序列号 Seq=x。这个包表示客户端想要建立连接。
  • 第二次握手
    服务器接收到客户端的SYN报文后,会以自己的SYN报文作为应答,同时也会给客户端的SYN报文进行确认(ACK)。服务器选择自己的序列号 Seq=y,确认号 Ack=x+1(表示收到了客户端的序号x),然后将这个SYN+ACK包发送给客户端。
  • 第三次握手
    客户端收到服务器的SYN+ACK包后,会再向服务器发送一个确认包ACK,确认号 Ack=y+1,表示收到了服务器的序号y。这个ACK报文发送完毕后,客户端和服务器就建立了连接,可以开始数据传输。

TCP四次挥手(Four-Way Handshake)

四次挥手是TCP断开连接的过程,确保了 两个方向上的数据传输 都被正确关闭,且双方都知道连接已经结束。挥手过程如下:

  • 第一次挥手
    客户端发送一个FIN(Finish)标志的TCP报文到服务器,表示自己已经没有数据要发送了,但是仍然可以接受来自服务器的数据。序列号 Seq=u(u是客户端当前的序列号)。
  • 第二次挥手
    服务器接收到客户端的FIN报文 后,会发送一个ACK确认报文给客户端,确认号 Ack=u+1,表示已经接收到客户端的断开请求。此时,服务器可能还有数据需要发送给客户端,所以不会立即关闭连接。
  • 第三次挥手
    当服务器确定自己也没有数据需要发送给客户端时,会发送一个FIN报文给客户端,序列号 Seq=v(v是服务器当前的序列号),表示服务器也没有数据要发送了。
    第四次挥手
    客户端收到服务器的FIN报文后,发送ACK确认报文给服务器,确认号 Ack=v+1,表示已经接收到服务器的断开请求。

这个ACK报文发送完毕后,客户端进入TIME_WAIT状态等待足够的时间确保服务器收到了最后的ACK报文,之后关闭连接。服务器收到ACK后,关闭连接。

通过这样的机制,TCP保证了连接的可靠建立和优雅关闭。

相关推荐
一个处女座的程序猿O(∩_∩)O2 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink5 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者6 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-7 小时前
验证码机制
前端·后端
燃先生._.8 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖9 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235249 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240259 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar9 小时前
纯前端实现更新检测
开发语言·前端·javascript