网络协议学习——HTTPS

目录

​编辑

一,认识HTTPS

二,加密方式

 1,对称式加密

2,非对称式的加密

3,数据指纹(数据摘要)

4,数据签名

三,HTTPS的工作原理

实现方式

 数字证书


 

一,认识HTTPS

在HTTP中,在发起请求或者响应的时候,我们的报头的cookie信息会被明文的显示出来。所以这就会导致不安全。导致隐私的泄露。所以HTTPS协议便应运而生。如下便是HTTPS协议的图示:

HTTPS协议其实就是在HTTP协议的条件之下再加上一个加密解密层。 

二,加密方式

 1,对称式加密

对称加密的实现是通过产生一个密钥来对客户端要发出去的报文进行加密的方式,然后在服务端接收到了报文以后便通过相同的密钥来对这段报文进行解密,进而得到这一段报文。

特点:加密算法简单,加密速度快,加密效率高。

2,非对称式的加密

非对称式的加密方式是通过产生两个密钥的方式来实现的。这两个密钥中,一个叫做私钥,一个叫做公钥。公钥是公开的,大家都能获取得到。私钥是私密的,只有我自己有。当我们使用公钥来对报文进行加密时,只有拥有私钥的人才能解密。当使用私钥来对报文进行加密是大家都能进行解密。

特点:加密算法复杂,加密速度慢。

3,数据指纹(数据摘要)

数据指纹(摘要)是一种通过哈希散列的方式将某段报文变成相应的字符串的过程。因为使用了特定的哈希方法,所以当报文被修改时这段字符串也会发生变化。

数据指纹(摘要)不是严格意义上的加密方法,但是因为使用了哈希的方式处理字符串从而让字符串的内容很难被反推得到。从而可以用来比对我得到的内容是否被修改过,也可以用来实现网盘当中的秒传功能或者是数据库中的密码管理。

网盘秒传功能

当我们要将某个资源放到网盘上面时,通常我们的资源中的某一段内容会被网盘服务端抽取出来。然后这段资源便会被哈希加密得到一段字符串。然后,网盘服务器会去相应的库里面查询是否由相同的资源,如果有便不会在将相同的资源上传到服务器,而是会在你的用户空间下建立软连接指向对应的已有的资源

4,数据签名

 数据签名其实就是在数据指纹(摘要)基础上再进行一次加密。进而让数据摘要也让别人看不到。

三,HTTPS的工作原理

再数据传输的过程中,要解决的问题有两个:

1,传输的数据被监听。

2,传输的数据被篡改。

实现方式

1,对称式加密

再客户端和服务端进行通信时,我在客户端进行对称式加密。这样,便可以将加密后的报文发给服务端了。但是,这样做的问题是加密后的报文我的服务端也解析不了,不知道是什么意思。所以,客户端就要将密钥一并打包发给服务端,让服务端拥有能够解密报文的能力。

如果发生中间劫持怎么办?

 但是,上面的方式其实还是有问题的。因为我们的数据不是直接发送给服务端的,而是要经过第三方才能将数据发送到服务端。

 如果其中的第三方是一个黑客,那我们的的数据就暴露无遗了。因为黑客也拿到了密钥,他便能随意的解开我们的数据。这就是发生了中间劫持。所以,对称式加密是不安全的。

2,非对称式加密

非对称式加密的实现,有两种方式:

1,客户端和服务端都非对称式加密

 客户端和服务端都对数据进行加密,此时客户端便会形成两把密钥:C (公钥) C'(私钥)

服务端也会形成两把密钥:S(公钥) S‘(私钥)。然后服务端和客户端再收发数据时便将公钥发给对方来实现加密功能,而私钥自己保存用于解密。

第一步:生成密钥,交换密钥

第二步:使用对方的密钥来对数据进行加密

这样便能对数据进行加密且不会发生出现在第一种加密方式下的问题。

但是,太慢怎么办?

 前面已经提到过了,非对称式加密的算法都是比较复杂的,所以加密会很慢。所以,为了解提升效率,我们可以让服务器和客户端两端一个做非对称加密,一个做对称加密。

第一步:服务端形成非对称密钥  客户端形成对称密钥

第二步:客户端再对服务端发起请求得到密钥S

第三步:客户端使用S对C进行加密发送到服务端,服务端再用私钥S'来对加密后的C进行解密进而得到C

这样便能实现报文传输时的加密和解密功能。

如果发生掉包怎么办?

还是和上一个问题一样,客户端的数据不是直接到达服务端的,服务端的数据也不是直接到达客户端的。还是要经过中间人,如果按照上面的方式传输其实还是会发生问题的。比如中间人掉包。

中间人加入:

中间人生成非对称密钥:

客户端向服务端请求得到密钥S,但是中间人将密钥掉包:

如果发生上面的情况,那我们的数据便不会是安全的了。因为C会使用M加密,M加密后会被M'解开,进而中间人会得到C。然后中间人再用S来对C加密转给服务端,这样便能神不知鬼不觉的监听客户端和服务端间传输的数据。

 数字证书

1.什么是数字证书

服务端在使用HTTPS协议在使用前,需要向CA机构申请一份证书。这份证书便是一个数字证书。

在服务端申请CA证书之前,服务端得先形成自己的公钥和私钥。然后,在特定的平台下将服务器的信息和公钥提交给CA机构。服务器端提交的信息便是明文信息+公钥。然后CA机构先对数据使用特定的哈希算法来形成数据摘要(数据指纹),然后CA机构用自己的密钥对数据摘要进行加密形成数据签名。再将明文+数据签名打包形成CA证书发给服务端

所以,当客户端申请服务端的公钥时。服务器便会将CA证书发给客户端,让客户端得到一个没有被修改后的公钥。

 中间人能不能替换掉数据签名?

答案是不能,因为只有CA机构才有这段签名的私钥。如果中间人改了这段数据,客户端便会不认识。

中间人能不能替换掉整个证书?

答案是可以的,但是在比对的过程当中客户端还是会发现一些不同并警告用户。

 所以,HTTPS协议采用的加密方式便是:对称加密+非对称加密+CA证书

但还是要说一句,世界上没有不透风的墙。这个世界上也没有不能被攻破的加密方式,但是只要攻破这个加密方式的成本远高于加密的成本,那我们便可以说这个加密方式是安全的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/587866.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pygame--坦克大战(二)

加载敌方坦克 敌方坦克的方向是随机的,使用随机数生成。 初始化敌方坦克。 class EnemyTank(Tank):def __init__(self,left,top,speed):self.images {U: pygame.image.load(img/enemy1U.gif),D: pygame.image.load(img/enemy1D.gif),L: pygame.image.load(img/e…

Golang学习系列1-pprof性能调优

1. pprof 简述 一位亦师亦友的话让我记忆犹新,他说“学习一个新事务,应该从三个方面入手what,why,how;且三者的重要程度应该是递减”。所以在本文的第一部分先叙述下pprof的what & why。 1.1 What? pprof是golang自身提供的一种性能分…

大模型量化技术-GPTQ

大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…

剑指offer打卡 JZ6 从尾到头打印链表

在牛客网刷的,还是跟leetcode一样非acm模式,由于急着暑期实习题量不固定,八股算法轮刷 打卡内容偏个人笔记,本人水平一般(代码随想录稀里糊涂刷了一遍),从小白开始分析(甚至会分析语法),尽量一题多解深入探…

SpringBoot | Spring Boot“整合Redis“

目录: 1. Redis 介绍2. Redis 下载安装3. Redis “服务开启”和“连接配置”4. Spring Boot整合Redis的“前期准备” :① 编写实体类② 编写Repository 接口③ 在“全局配置文件”中添加 “Redis数据库” 的 “相关配置信息” 5. Spring Boot整合“Redis” (案例展示) 作者简介…

不同设备使用同一个Git账号

想要在公司和家里的电脑上用同一个git账号来pull, push代码 1. 查看原设备的用户名和邮箱 第1种方法, 依次输入 git config user.name git config user.email第2种方法, 输入 cat ~/.gitconfig2. 配置新设备的用户名和邮箱 用户名和邮箱与原设备保持…

C-偶遇行军蚁(遇到过的题,做个笔记)

我的代码: 思路就是把每一行看成一个字符串&#xff0c;然后逐渐增加字符就行 #include <iostream> #include <vector> using namespace std; int main() {string s;int n;cin >> n; //读入行数cin >> s; //读入字符串vector<string>arr(n…

黄金票据制作

1、黄金票据 黄金票据在内网渗透中主要用于权限维持&#xff0c;即留下后门。使用黄金票据前提是你已经控制了整个域的域控制器。其核心原理与服务器中的krbtgt用户相关。从以下可以了解krbtgt原理&#xff1a; 前言 | windows protocolhttps://daiker.gitbook.io/windows-pro…

开源布道 共创生态——2024 AutoMQ 布道师计划启动!

我们是来自 Apache RocketMQ 和 Linux LVS 项目的核心团队&#xff0c;曾经见证并应对过消息队列基础设施在大型互联网公司和云计算公司的挑战。基于对象存储优先、存算分离、多云原生等技术理念&#xff0c;我们重新设计并实现 Apache Kafka 和 Apache RocketMQ&#xff0c;带…

Vue2(完结):replace属性、编程式路由导航、缓存路由组件、两个新钩子、路由守卫、history与hash

一、router-link的replace属性 1、作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 2、浏览器的历史记录有两种写入方式&#xff1a;分别为push和replace&#xff0c;push是追加历史记录&#xff0c;replace是替换当前记录。路由跳转时候默认为push 3、如何开启repla…

Node.js知识点总结:从入门到入土

Node.js知识点总结&#xff1a;从入门到入土 node.js概念说明与相关知识储备了解基本概念&#xff1a;JavaScript基础能力&#xff1a;安装和设置Node.js环境&#xff1a;核心能力模块&#xff1a;重点能力-异步编程&#xff1a;使用npm管理依赖&#xff1a;构建Web应用&#x…

JVM垃圾收集——相关概念

本贴讲解的内容包括System.gc()、内存溢出、内存泄漏、STW机制以及垃圾收集的串行、并行、并发三种情况&#xff0c;还有强引用、软引用、弱引用、虚引用四种引用。 1、System.gc()的理解 在默认情况下&#xff0c;通过System.gc()或者Runtime.getRuntime().gc()的调用&#…