https加密算法

HTTPS加密算法

利用TLS; RSA算法

  1. 首先建立TCP三次握手
  2. 之后进行TLS四次握手(非对称加密)
    涉及到三个随机数 client random、server random、pre_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保证了连接的可靠建立和优雅关闭。

相关推荐
lpfasd1235 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse4568 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai8 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记9 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁9 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu9 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!9 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格10 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人10 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid10 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet