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

相关推荐
gqkmiss5 分钟前
Chrome 浏览器 131 版本开发者工具(DevTools)更新内容
前端·chrome·浏览器·chrome devtools
Summer不秃10 分钟前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰15 分钟前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter
Viktor_Ye21 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm23 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
Amd7941 小时前
Nuxt.js 应用中的 webpack:compiled 事件钩子
前端·webpack·开发·编译·nuxt.js·事件·钩子
生椰拿铁You1 小时前
09 —— Webpack搭建开发环境
前端·webpack·node.js
狸克先生1 小时前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互