| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 【前端知识体系梳理(一)】深入理解HTTPS协议 -> 正文阅读 |
|
[网络协议]【前端知识体系梳理(一)】深入理解HTTPS协议 |
? 目录 前言🔥????????聊到https,我们就得谈到http,了解http与https的关系是我们深入了解https的重点; ????????首先我们需要明白https为什么要比http安全; ? ? ? ? 这是因为https使用对称+非对称混合加密的方式解决安全问题; ? ? ? ? 我们先来了解一下什么叫做对称加密和非对称加密 一、对称加密🔥????????对称加密是指 在加密和解密的过程中使用相同的密钥的算法; ? ? ? ? 其中所谓相同的密钥就是加密和解密的工具,对称加密属于单钥密码加密; ? ? ? ? 而对称加密使用的加密算法也是公开的,只要获取到密钥就可以解密; 缺点?????????密钥的安全性很低,在密钥发送传达的过程中,密钥可能被第三方截取,导致第三方也可以破解密文; 优点?????????算法公开、效率高; 具体实现过程? ? ? ? 1)、在每一次发送真实数据之前,客户端会先生成一把密钥,然后把密钥传输给服务端。 ? ? ? ? 2)、客户端给服务端发送真实数据的时候,会用这把密钥对数据进行加密; ? ? ? ? 3)、服务端收到加密数据后,用刚才收到的密钥进行解密。 二、非对称加密🔥? ? ? ? 与对称加密不同,非对称加密需要两个密钥:公开密钥和私有密钥; ????????公钥与密钥是一对,如果使用公钥对数据进行加密,那么只有对应的私钥能够解密; ????????由于加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法 ????????传输双方均有一对密钥,也就是双方均有公、私密钥一对; ? ? ? ? 要知道,使用公钥加密的过程是真正加密的过程,使用私钥加密的过程其实是签名的过程,这个后面会说; 缺点?????????非对称加密的算法太复杂了,远远没有对称加密的速度快; 优点?????????由于加密算法复杂度高,安全性较高; 具体实现过程? ? ? ? 1)、如果客户端要向服务端发送消息,客户端和服务端都要产生一对用于加密和解密的公钥和私钥 ? ? ? ? 2)、客户端的私钥保密,客户端中的公钥告诉服务器; ????????3)、服务端的私钥也保密,把它的公钥告诉客户端; ? ? ? ? 4)、客户端要给服务端发送消息时,客户端用服务端的公开密钥加密信息,然后将这个已经经过加密的消息发送到服务端; ? ? ? ? 5)、服务端收到这个消息后,服务端用自己的密钥解密客户端的消息,只有这个指定服务端才具有解密的能力。 这样的话,第三方最多只能获取到用来加密的公钥和加密的密文,无法加密 三、对称加密+非对称加密🔥????????上面就说过了,https采用的是混合密钥加密; ? ? ? ? 下面我们先使用对称加密+非对称加密来大致模拟一下https通信的流程; ? ? ? ? 要注意,这并不是真正的流程,只是为了让大家加深理解模拟的流程 模拟流程????????1)、服务器用明文的方式给客户端发送自己的公钥; ????????2)、客户端收到公钥后,会随机生成一把会话密钥,然后用服务器传过来的公钥对这把新生成的会话密钥进行加密; ????????3)、服务器收到后解密,最后服务器就可以安全得到会话密钥; ? ? ? ? 4)、客户端与服务端使用会话密钥进行共享密钥加密通信; ????????在这个模拟的过程,相信大家已经发现这个流程中的缺陷; 缺点?????????如果在服务器明文传输公钥的时候。中间人截取了这把属于服务器的公钥,并且把中间人自己的公钥冒充服务器的公钥传输给了客户端; ?????????之后客户端就会用中间人的公钥来加密自己生成的密钥;在客户端发送给服务端的过程中,密文又被中间人截取,最后中间人就可以获取这个会话密钥; ? ? ? ? ?为了仍然保持两端通信,中间人假冒成客户端,使用服务端的公钥加密这把密钥,再发给服务器; ?????????那么之后,中间人就可以随意破解这双方的密文内容了; ? ? ? ? ?https为了解决服务器公钥的问题,使用了数字证书; 四、数字证书🔥????????HTTPS中的非对称加密之所以不安全,是因为客户端在接收服务端公钥的时候,不清楚这把公钥到底是不是服务器的; ????????我们需要使用数字证书来解决这个问题; ????????这个时候需要找到一个可靠的第三方机构,可以叫他们叫CA机构; ????????网站在使用HTTPS协议之前,需要向CA机构申请一份数字证书; ????????数字证书中包含证书持有者的信息、公钥信息等可以证明服务器身份的信息; ????????服务端把证书传输给客户端,客户端从证书中获取到公钥就行了; ? ? ? ? 在这里,大家应该也能够看出问题,如果数字证书在传输过程中被篡改,不久会出现问题吗?别急,数字证书没那么简单; 数字证书防伪????????为了防止数字证书在传输的过程中被篡改,我们要使用数字签名; 数字签名的制作过程????????1)、CA机构本身拥有一对非对称加密的公钥和私钥; ????????2)、CA机构对证书明文数据A进行hash散列加密; ????????3)、对hash散列之后的值使用私钥加密,得到数字签名B; ????????这样,明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了; ????????然后服务器在接收客户端请求后,将这个数字证书发送给客户端,客户端会用以下方式验证公钥是否正确; 客户端的验证过程????????1)、客户端拿到证书,得到明文A,签名B; ????????2)、用CA机构的公钥对B解密,得到B', ????????3)、使用证书里面指明的hash算法对明文进行hash处理得到A’;?? ????????4)、通过上述步骤,如果A'等于B',那么证书可信; ????????我们假设中间人这个时候拿到了证书,也就是拿到了明文和签名,中间人当然也知道这个CA机构的公钥,也能根据证书中指明的hash算法对明文进行加密,就这样,中间人也可以验证这个证书的真假,但他又能够做些什么呢? ????????中间人想要改变的东西是服务端提供的公钥,而这个写在了证书的明文中;所以中间人需要改变的是明文和签名中加密的明文,证书中自带的明文非常容易修改,而要瞒过客户端的验证是个问题; ? ? ? ? 因为数字签名通过公钥解密之后,得到的B'是不可变的; ????????如果中间人想要改变公钥并且使得A'==B',他只能改变证书指定的hash散列算法,但是破解hash散列算法的难度很大,这就是限制住中间人的难关; ? ? ? ? 到这里,我们基本清楚了https为什么那么安全; ????????我们再来梳理一下HTTPS的通讯步骤: ????????1)、客户端使用HTTPS的URL访问web服务器,要求与服务端与之建立SSL连接 ????????2)、web服务端收到客户端的请求后,会将网站的数字证书传送一份给客户端; ????????3)、客户端与web服务端协商SSL连接的安全等级,也就是信息加密等级 ????????4)、浏览器通过A‘和B'验证公钥确实真实可信,就生成本次的会话密钥,然后利用证书上的公钥加密会话密钥,并传输到服务端 ????????5)、web服务器利用自己的私钥解密出会话密钥; ????????6)、web服务器利用会话密钥加密与客户端的通信; https的优点????????1)、使用https协议可以认证用户和服务器,确保数据发送到正确的客户机和服务器; ????????2)、https协议是有ssl+http协议构建的可进行加密传输、身份认证的网络协议,要比http安全的多 ????????3)、使用https加密的网站在搜索中排名更高 https的缺点????????1)、https最初的握手阶段非常耗时间,会让页面的加载事件延长50%,增加10%-20%的耗电; ????????2)、https连接缓存不如http高效; 结束语🏆????????好了,以上就是我本篇文章的所有内容了,我应该是说清楚了个大概,深度不够,还望理解。 ? ? ? ? 看到这里了,给个赞吧,如果希望看到更多知识体系整理,请关注博主,及时更新!!~~ |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:31:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |