HTTPS加密过程详解_hppts加密-程序员宅基地

技术标签: spring  算法  java  https  计算机网络  

一、前言

http是为了解决http存在的问题而在http基础上加入了SSL/TSL,在HTTP/2中TCP三次握手后会进入SSL/TSL握手,当SSL/TSL建立链接后,才会进行报文的传输。(注意这里我说的是http/2,在3中建立链接的次数不同,可在下面补充内容中查看,下面默认是http/2)

二、HTTPS的混合加密

我们知道加密方式有三种

  • 对称加密
  • 非对称加密
  • 混合加密

HTTPS采用的就是对称加密和非对称加密的混合加密方法。

  • 混合加密解决了信息的机密性,防止数据被窃听
  • 摘要算法实现了数据的完成性,防止了数据被篡改
  • 数字证书提供了身份验证,防止了被冒充风险

1、摘要算法

在这里插入图片描述

客户端在向服务器端发送明文的时候,会通过摘要算法计算出明文的摘要,为了通俗来讲,我们将计算出的摘要比喻成身份证。然后客户端将明文和身份证通过密钥进行加密传给服务器端。服务器端会通过密钥解密客户端发来的数据,此时明文已经被解密出来,身份证呢?服务器端也会使用摘要算法计算出传来数据的身份证,然后将计算出的身份证和传过来的身份证进行比较,如果身份证相同,那么就说明数据是完整的。

2、混合加密和数字证书

在这里我们将混合加密和数字证书放到一块讲解,可能有人会疑问数字证书是什么?其实数字证书是第三方权威机构给颁发的一种认证证书,在https通信时,会去申请这个数字证书,同时伪造数字证书是一件极其难的事情,所以我们认为证书是可信的,那么其公钥(下面会讲)就是可信的。

https在建立链接时是非对称加密,建立链接后是对称加密,(不懂对称加密和非对称加密的小伙伴可自行查阅哦)具体详细请看下面的一张图:
在这里插入图片描述

  • 1、首先呢,客户端先向服务端发送加密通信(https)请求,这次请求中包括:
    • SSL/TSL版本号
    • 加密套件,也就是客户端支持的加密算法列表
    • 产生一个随机数,我们叫他为第1随机数
    • 有一个Client Hello字符串
  • 2、服务器收到请求后,向客户端发出响应:
    • 确认SSL/TSL版本号,如果客户端不支持,那么就关闭通信
    • 确认的加密算法列表
    • 生成一个随机数,我们叫第2随机数
  • 3、服务器再向客户端发送数字证书,这里敲重点了。服务器会把自己的公钥注册到CA(第三方证书机构),然后CA拿自己的私钥对服务器的公钥进行处理并颁发数字证书。
  • 4、服务器将公钥发送给客户端
  • 5、服务器发送Hello Done,表示发送完毕
  • 6、客户端收到服务端一系列响应后,确认数字证书和公钥,没有问题后向服务端发送:
    • 生成一个随机数,我们叫第3随机数或者预主密钥,此预主密钥会通过公钥进行加密
    • 客户端握手结束通知,表示客户端的握手结束
  • 7、服务端收到客户端数据后,使用私钥对加密后的预主密钥进行解密,没有其他人知道预主密钥,因为它加密了,除非服务器私钥泄漏。然后服务端通过第一、二、预主密钥计算出会话密钥。客户端也计算出了会话密钥。
  • 8、服务端向客户端发送:
    • 加密通信算法改变通知,以后通过会话密钥通信
    • 服务端握手结束

到此为止,SSL/TSL握手结束,在此之后都会通过会话密钥来进行加密和解密,也就是对称加密。

有小伙伴可能会说,https建立链接的过程太麻烦了吧。这里我想说,世界上没有事事都完美的东西,我们在不断优化的过程中,解决上一个问题可能也会产生新的问题,其实这也是世间万物的发展规律

三、补充

1、在http/1.1中加入了TCP长连接通信,每当建立起链接后,只要任意端口没有明确提出断开链接,TCP就会保持链接状态,大大减少了频繁建立链接的开销。

2、在http/2中,相对于http/1.1改进了一些内容:
- 头部压缩。http/2中会压缩头,如果客户端发送多个请求,头是相似或者相同,那么协议会消除重复的部分,减免了不必要的浪费。
- http/1.1中报文是文本格式,在http/2中报文是二进制格式,大大加快了传输效率。
- http2中使用了多路复用,解决了队头堵塞问题。什么是队头堵塞?在http/1.1中,队头堵塞指的是在TCP请求时,请求因为某种原因被阻塞,那么后面的请求无法继续进行(因为TCP是可靠链接,顺序执行)。多路复用是多个http复用一个TCP链接,那么多路复用后,请求和响应不再是按照顺序一一对应。如果一个请求被堵塞,其他请求可以继续。

3、http/2优化了http/1.1,但是也存在一些问题,就像上面说的,没有完美的事情。http/3对2进行了一些优化

  • 2在多路复用时是复用一个TCP链接,那么TCP一旦发送丢包,那么就会阻塞所以复用它的http,这就麻烦了,这里也是因为TCP是可靠传输,顺序要一一对应。所以http/3直接将TCP改为UDP,但是UDP是不可靠传输,所以也加入了基于UDP的QUIC协议,来实现类似TCP的了靠传输。
  • http/3将TCP三次握手和SSL/TSL三次握手直接合并成了三次握手,意思是将原来的6次合并成了3次,减少了链接次数。

我们可以看到http/3有很多优点,但是目前普及较慢,我也不清楚为什么,有知道的小伙伴可以评论区讨论讨论

四、参考资料

本篇文章的知识是看以下两位大佬讲解的:
1、小林coding
2、 技术蛋老师
没看明白的小伙伴也可以查看以上链接。

为了省时间,图也借用了一下,哈哈。
在此感谢二位为计算机行业做出的贡献!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46672151/article/details/123744429

智能推荐

如何用原生js封装一个类似jq的选择器_原声js实现jq元素选择器-程序员宅基地

文章浏览阅读1.4k次。1、我们先了解一下原生js中的选择器ID选择器(在整个文档中获取id为xxx的元素)document.getElementId([ID]);类名选择器(在整个文档中或者在指定上下文中获取类名为xxx的元素)document.getElementsByClassName(' ');[context].getElementsByClassName(' ');标签名选择器(在整个文档中或者..._原声js实现jq元素选择器

Hive中partition by和distribute by区别_partition by distribute by-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏4次。通常查询时会对整个数据库查询,而这带来了大量的开销,因此引入了partition的概念,在建表的时候通过设置partition的字段, 会根据该字段对数据分区存放,更具体的说是存放在不同的文件夹,这样通过指定设置Partition的字段条件查询时可以减少大量的开销。1)partition by [key..] order by [key..]只能在窗口函数中使用,而distribute by [key...] sort by [key...]在窗口函数和select中都可以使用。_partition by distribute by

游标(cursor )是什么?_c# cursor-程序员宅基地

文章浏览阅读7.3k次。Private SQL Area A private SQL area holds information about a parsed SQLstatement and other session-specific information for processing. When a serverprocess executes SQL or PL/SQL code, the process_c# cursor

listview使用的一些心得_listview的使用——购物商城实验心得-程序员宅基地

文章浏览阅读616次。近日在用ListView中的一些注意点,和公用代码,整理如下1.ListView.Items.Clear而不是ListView.Clear一般如果ListView是动态填充的,我们在填充之前都会先进行清理。但需要注意一下,我们是清理Items,如果去直接Clear整个ListView,就连原先定义好的列都没有了2.给ListView绑定数据ListView并不能直接_listview的使用——购物商城实验心得

【数据结构】哈希表——C语言_c语言哈希表-程序员宅基地

文章浏览阅读6.1k次,点赞19次,收藏74次。主要介绍C语言提供的哈希函数。_c语言哈希表

性能分析之两个性能瓶颈分析案例_客户性能分析案例-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏8次。最近处理了几个项目中的性能问题,来跟大家唠唠。这几个问题是非常常见的。性能瓶颈就有这么个特点,大部分瓶颈分析到最后,都给人有一种猛拍大腿突然醒悟的感觉。但是在分析到具体的原因之前,都是抓耳挠腮,百思不解。这就是性能瓶颈的魅力所在了。问题一:单队列网卡导致软中断高这个问题在专栏也好,公众号文章也好,都不止一次描述过。但是看到过的同学们似乎还是没办法在项目中非常快速地定位出来。问题的现象我就不描述了,无非就是 TPS 压不上去。先看一下这个压力的路径。这是一个清晰的路径。我们直接来说判断的关_客户性能分析案例

随便推点

上岸整理:2023前端面试题-vue,小程序,js,css_今年的前端面试难不难-程序员宅基地

文章浏览阅读774次,点赞4次,收藏11次。1、浏览器常见的报错信息与含义2、304与204的区别,http缓存,强缓存,协商缓存3、浏览器从输入地址到渲染,经历了什么状态?4、vue的界面渲染,经过哪些过程(生命周期)5、三次握手,四次挥手6、重排与重绘7、用css实现一个三角形8、常见的flex布局,有哪些功能9、用css实现一个水平垂直居中10、null与undefined的区别11、虚拟dom12、深拷贝与浅拷贝13、es6新增的功能15、async await 与promise。_今年的前端面试难不难

分享2024最新最全Java面试清单,Java后端高频考点500+-程序员宅基地

文章浏览阅读977次,点赞17次,收藏28次。针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)最新整理电子书《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。下面的面试题答案都整理成文档笔记。

python大小写字母转换_python把大写字母变成小写字母的编程-程序员宅基地

文章浏览阅读476次。【代码】python大小写字母转换。_python把大写字母变成小写字母的编程

【语音识别】MFCC+VQ说话人识别系统【含GUI Matlab源码 1153期】-程序员宅基地

文章浏览阅读24次。MFCC+VQ说话人识别系统完整的代码,方可运行;可提供运行操作视频!适合小白!

GPS数据处理——mooc《零基础学Java语言》-(浙大翁凯)第六周编程题(2)-程序员宅基地

文章浏览阅读351次。题目内容:NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。N..._7-1 gps数据处理分数 15全屏浏览题目切换布局作者 翁恺单位 浙江大学nmea-0183协

C#Winform DataGridView问题:列的 FillWeight 值总和不能超过 65535_fillweight值总和不能超过65535-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏2次。列的 FillWeight 值总和不能超过 65535这里写自定义目录标题写程序添加列时,超过655列会报错,而我的列为900多列。看了下报错,查了下fillweight是相对于其他列的显示宽度,初始值为100,所以655列就达到了上限。csdn上的建议基本是换控件或者循环绑定列,但我是绑定datatable,循环会很麻烦,在stackflow上搜索了下得到了一个很好的解决方案,记录一下://绑定datagridview事件columnAdded。private void dataGridViewN_fillweight值总和不能超过65535

推荐文章

热门文章

相关标签