当前位置: 首页 > news >正文

计算机网络-----详解HTTPS协议

文章目录

        • ✏️1. 什么是HTTPS
        • ✏️2. 什么是加密?
        • ✏️3. 对称加密
        • ✏️4. 非对称加密
        • ✏️5. 中间人攻击
        • ✏️6. 引入证书

✏️1. 什么是HTTPS

HTTPS 也是⼀个应⽤层协议。是在 HTTP 协议的基础上引⼊了⼀个加密层,HTTP 协议内容都是按照⽂本的⽅式明⽂传输的,这就导致在传输过程中出现⼀些被篡改的情况。

🌈例如:臭名昭著的 “运营商劫持”

当我们下载一个天天动听时

未被劫持的效果:点击下载按钮, 就会弹出天天动听的下载链接

在这里插入图片描述

已被劫持的效果:点击下载按钮, 就会弹出 QQ 浏览器的下载链接

在这里插入图片描述
因为我们通过⽹络传输的任何的数据包都会经过运营商的⽹络设备(路由器, 交换机等),那么运营商的⽹络设备就可以解析出你传输的数据内容,并进⾏篡改。

点击 “下载按钮”,其实就是在给服务器发送了⼀个 HTTP 请求,获取到的 HTTP 响应其实就包含了该APP 的下载链接。运营商劫持之后,就发现这个请求是要下载天天动听,那么就⾃动的把交给⽤⼾的响应给篡改成 “QQ浏览器” 的下载地址了。

在这里插入图片描述

🌈为什么运营商要进行劫持呢?

在这里插入图片描述
不⽌运营商可以劫持,其他的⿊客也可以⽤类似的⼿段进⾏劫持,来窃取用户隐私信息,或者篡改内容。所以在互联网上进行明文传输是很危险的,HTTPS 就是在 HTTP 的基础上进⾏了加密,进⼀步的来保证用户的信息安全。

✏️2. 什么是加密?

加密就是把明⽂(要传输的信息)进⾏⼀系列变换,⽣成密⽂。解密就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂

在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密钥

既然要保证数据安全, 就需要进⾏ “加密”.

⽹络传输中不再直接传输明⽂了, ⽽是加密之后的 “密⽂”.

加密的⽅式有很多, 但是整体可以分成两⼤类: 对称加密 和 ⾮对称加密

✏️3. 对称加密

对称加密其实就是通过同⼀个 “密钥” , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂

⼀个简单的对称加密, 按位异或假设 明⽂ a = 1234, 密钥 key = 8888
则加密 a ^ key 得到的密⽂ b 为 9834
然后针对密⽂ 9834 再次进⾏运算 b ^ key, 得到的就是原来的明⽂ 1234
(对于字符串的对称加密也是同理, 每⼀个字符都可以表⽰成⼀个数字)
当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使⽤按位异或.

在这里插入图片描述

引⼊对称加密之后, 即使数据被截获, 由于⿊客不知道密钥是啥, 因此就⽆法进⾏解密, 也就不知道请求的真实内容是啥了。

但是,服务器同⼀时刻其实是给很多客⼾端提供服务的,这么多客⼾端,每个⼈⽤的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, ⿊客就也能拿到了). 因此服务器就需要维护每个客⼾端和每个密钥之间的关联关系, 这也是个很⿇烦的事情。

在这里插入图片描述

⽐较理想的做法, 就是能在客⼾端和服务器建⽴连接的时候, 双⽅协商确定这次的密钥是啥。

在这里插入图片描述

但是如果直接把密钥明⽂传输, 那么⿊客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了,所以密钥也需要加密传输

但是要想对密钥进⾏对称加密, 就仍然需要先协商确定⼀个 “密钥的密钥”. 这就成了 “先有鸡还是先有蛋” 的问题了. 此时密钥的传输再⽤对称加密就⾏不通了

所以就需要引⼊⾮对称加密

✏️4. 非对称加密

⾮对称加密要⽤到两个密钥,⼀个叫做 “公钥”,⼀个叫做 “私钥”。公钥和私钥是配对的,最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多。

非对称加密有两种用法:

  1. 通过公钥对明⽂加密,变成密⽂。通过私钥对密⽂解密,变成明⽂。
  2. 通过私钥对明⽂加密,变成密⽂。通过公钥对密⽂解密,变成明⽂。

🌰真正的非对称加密数学原理很复杂,涉及到了一些数论的知识,这里我们举一个生活中的例子:

A 要给 B ⼀些重要的⽂件,但是 B 可能不在。于是 A 和 B 提前做出约定:

B 说: 我桌⼦上有个盒⼦,然后我给你⼀把锁,你把⽂件放盒⼦⾥⽤锁锁上,然后我回头拿着钥匙来开锁取⽂件。

在这个场景中,这把锁就相当于公钥,钥匙就是私钥。公钥给谁都⾏(不怕泄露),但是私钥只有 B ⾃⼰持有。持有私钥的⼈才能解密。

在这里插入图片描述

  1. 客户端在本地⽣成对称加密的密钥,通过公钥加密,发送给服务器。(因为中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称加密地方密钥)
  2. 服务器通过私钥解密,还原出客户端发送的对称加密的密钥,并且使⽤这个对称加密的密钥加密给客户端返回响应数据
  3. 后续客户端和服务器的通信都只⽤对称加密即可。因为该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义。

由于对称加密的效率⽐⾮对称加密⾼很多,因此只是在开始阶段协商密钥的时候使⽤⾮对称加密,后续的传输仍然使⽤对称加密。

那么问题就来了:1.客户端如何获取到公钥呢? 2.客户端获取到的公钥是正确的吗?

✏️5. 中间人攻击

⿊客可以使⽤中间⼈攻击,获取到对称加密的密钥。

在这里插入图片描述

  1. 服务器具有⾮对称加密的公钥G1,私钥S1
  2. 中间人具有非对称加密的公钥JG1,私钥JS1
  3. 客户端向服务器发起请求,服务器明⽂传送公钥G1给客户端
  4. 中间⼈劫持数据报⽂,提取公钥G1并保存好,然后将被劫持报⽂中的公钥G1替换成为⾃⼰的公钥JG1,并将伪造报⽂发给客户端
  5. 客户端收到报⽂,提取公钥JG1(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥的密钥X,⽤公钥JG1加密X,形成报⽂发送给服务器
  6. 中间⼈劫持后,直接⽤⾃⼰的私钥JS1进⾏解密,得到对称加密的秘钥X,再⽤曾经保存的服务端公钥G1加密后,将报⽂推送给服务器
  7. 服务器拿到报⽂,⽤⾃⼰的私钥S1解密,得到对称加密的秘钥X
  8. 双⽅开始采⽤X进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改,都是可以的。
✏️6. 引入证书

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性。

在这里插入图片描述

🌈理解数字签名

数字签名,就是一个加密过的校验和。公正机构生成证书时,会针对数据生成一个校验和,同时公正机构会有自己的私钥PRI和公钥PUB,使用PRI将校验和加密后得到的就是数字签名。

客户端得到的传输的数据后会根据相同的校验和算法重新算一下校验和,得到checksum1(客户端自己算的)

同时客户端会使用公正机构的公钥PUB对数字签名解密得到checksum2(公正机构算的)

如果checksum1等于checksum2,则证明证书是没有被篡改过的

🌈在上述流程中:

  1. 黑客能自己伪造一个假证书吗?

不能,证书中包含着服务器的地址,域名等关键字信息,伪造证书会被客户端看出来

  1. 黑客在篡改公钥的同时也篡改数字签名呢?

不能,数字签名是CA机构用私钥PRI加密的校验和,黑客永远也拿不到这个私钥PRI

http://www.lqws.cn/news/524287.html

相关文章:

  • 日本生活:日语语言学校-日语作文-沟通无国界(5)-题目:我的一天
  • C# 中 string.Equals 以及 StringComparison 枚举的不同选项
  • SQL进阶:CASE表达式
  • 数组基础知识
  • IBMS 智能化系统:让建筑提前进入 AIoT 智慧纪元​
  • Linux基本指令篇 —— mv指令
  • 时序数据库 TDengine 助力华锐 D5 平台实现“三连降”:查询快了,机器少了,成本也低了
  • 以太坊执行客户端和共识客户端各自的作用及意义
  • java 对接ETH(以太坊) 交易相关资料
  • 区间求最值问题高效解决方法
  • Linux下使用docker nginx部署vue前端项目工程
  • vue2 使用el-form中el-form-item单独绑定rules不生效问题
  • IoT/HCIP实验-5/基于NB-IoT的智慧农业实验(平台侧开发+端侧编码+基础调试分析)
  • LOOP如何让长周期交互LLM代理在复杂环境中实现突破?
  • 正则表达式匹配实现
  • Boosting:从理论到实践——集成学习中的偏差征服者
  • Prompt:面向目标的提示词
  • WeakAuras Lua Script [ICC BOSS 12 - The Lich King]
  • Objective-C面向对象编程:类、对象、方法详解(保姆级教程)
  • 自动驾驶数据特征提取实战:用Python打开智能驾驶的新视角
  • 深入理解残差网络(ResNet):原理与PyTorch实现
  • Mysql数据库操作大全万字详解
  • 【Redis】Redis的下载安装和配置
  • 检查StringBuilder是否包含字符串
  • ARM内核之CMSIS
  • 【机器学习】非参数贝叶斯回归方法 GPR
  • ipfs在windows下载和安装
  • JSON框架转化isSuccess()为sucess字段
  • C++(智能指针)
  • Liunx操作系统笔记2