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保证了连接的可靠建立和优雅关闭。

相关推荐
桂月二二4 小时前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062065 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb5 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角5 小时前
CSS 颜色
前端·css
浪浪山小白兔6 小时前
HTML5 新表单属性详解
前端·html·html5
lee5767 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579657 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me7 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者7 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
qq_392794488 小时前
前端缓存策略:强缓存与协商缓存深度剖析
前端·缓存