网络协议学习——HTTPS

news2024/11/23 6:25:12

目录

​编辑

一,认识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.coloradmin.cn/o/1564354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFmpeg获取视频详情

话不多说&#xff0c;直接上代码&#xff1a; pom依赖&#xff1a; <!--视频多媒体工具包 包含 FFmpeg、OpenCV--><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.3</versi…

day4|gin的中间件和路由分组

中间件其实是一个方法&#xff0c; 在.use就可以调用中间件函数 r : gin.Default()v1 : r.Group("v1")//v1 : r.Group("v1").Use()v1.GET("test", func(c *gin.Context) {fmt.Println("get into the test")c.JSON(200, gin.H{"…

vue项目入门——index.html和App.vue

vue项目中的index.html文件 在Vue项目中&#xff0c;index.html文件通常作为项目的入口文件&#xff0c;它包含了Vue应用程序的基础结构和配置。 该文件的主要作用是引入Vue框架和其他必要的库&#xff0c;以及定义Vue应用程序的启动配置。 import Vue from vue import App …

论文浅尝 | cTBLS:使用对话表格增强大型语言模型

笔记整理&#xff1a;金日辉&#xff0c;东南大学硕士&#xff0c;研究方向为表格模态数据相关的处理任务 链接&#xff1a;https://arxiv.org/pdf/2303.12024.pdf 1、动机 让人工智能对话具备多模态能力&#xff0c;可以拓宽人类与此类系统的对话范围。多模态会话人工智能面临…

【Linux】查看某个进程的tcp全连接队列长度

TCP三次握手成功后,会把连接放到全连接队列里,等待服务器端accept后移除。 如下图所示,图片转自:https://zhuanlan.zhihu.com/p/547279481 下图转自博客:https://zhuanlan.zhihu.com/p/340016138 TCP三次握手过程中,第一次握手server收到client的syn后,内核会把该连接存…

面向C++程序员的Rust教程(二)

先序文章请看&#xff1a; 面向C程序员的Rust教程&#xff08;一&#xff09; 所有权与移动语义 要说Rust语言跟其他语言最大的区别&#xff0c;那笔者觉得非数这个所有权和移动语义莫属。 深浅复制 对于绝大多数语言来说&#xff0c;变量/对象之间的赋值通常都是复制语义。…

Spring中BeanFactoryPostProcessor详解

目录 功能与作用 使用案例 spring提供的常见BeanFactoryPostProcessor 1.EventListenerMethodProcessor 2.BeanDefinitionRegistryPostProcessor 功能与作用 使用案例 spring提供的唯一BeanDefinitionRegistryPostProcessor 总结 功能与作用 参考BeanFactoryPostProce…

Kaggle:收入分类

先看一下数据的统计信息 import pandas as pd # 加载数据&#xff08;保留原路径&#xff0c;但在实际应用中建议使用相对路径或环境变量&#xff09; data pd.read_csv(r"C:\Users\11794\Desktop\收入分类\training.csv", encodingutf-8, encoding_errorsrepl…

蓝桥杯练习笔记(十六)

蓝桥杯练习笔记&#xff08;十六&#xff09; 一、 输入示例&#xff1a; 3 1 2 1 11 3 4 74 5 3这是用到了m叉树的结论&#xff1a;对于某个m叉树的一个节点n&#xff0c;假如其有完整子树&#xff0c;则其左子节点l为l(n-1)m2&#xff0c;右子节点r为rmn1。基于此我们可以快…

SpringBoot+thymeleaf完成视频记忆播放功能

一、背景 1)客户要做一个视频播放功能,要求是系统能够记录观看人员在看视频时能够记录看到了哪个位置,在下次观看视频的时候能够从该位置进行播放。 2)同时,也要能够记录是谁看了视频,看了百分之多少。 说明:由于时间关系和篇幅原因,我们这里只先讨论第一个要求,第…

如何使用极狐GitLab 启用自动备份功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何极狐GitLab 自…

【面试八股总结】传输控制协议TCP(三)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、TCP拥塞控制⭐ 1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立&#xff0c;一点一点地提速&#xff0c;试探一下网络的承受能力&#xff0c;以免直接扰乱了网络通道的秩序。 慢启动算法&#xff1a; 初始拥塞窗口…

IDEA中连接SQLserver数据库(DataGrip相同连接)

IDEA中连接SQLserver数据库(DataGrip相同连接) 1. 打开IDEA-database组件 2. 新建SQL server连接 3. 填写信息进行连接 填写连接名称&#xff0c;连接主机IP&#xff0c;端口&#xff0c;默认端口1433&#xff0c;数据库用户名密码&#xff0c;默认数据库用户名是sa 第一次连接…

CMakeLists.txt编写简单介绍:CMakeLists.txt同时编译.cpp和.cu

关于CMakeLists.txt的相关介绍,这里不赘诉,本人的出发点是借助于CMakeLists.txt掌握基本的C++构建项目流程,下面是本人根据网络资料以及个人实践掌握的资料。 CMakeList.txt构建C++项目 下图是一个使用CUDA实现hello world的项目,一般来说,一个标准的C++项目包括三个文件…

nginx | nginx反向代理/负载均衡/缓存

文章目录 一、Nginx 反向代理1.1 nginx 文件结构1.2 默认的nginx配置文件1.3 实践中的 nginx.conf 二、Nginx 负载均衡2.1 热备负载均衡2.2 轮询负责均衡2.3 加权轮询负载规则2.4 ip_hash 负载均衡2.5 对特定资源实现负载均衡2.6 对不同域名实现负载均衡2.7 实现带有URL重写的负…

探索 ZKFair 的Dargon Slayer蓝图,解锁新阶段的潜力

在当前区块链技术的发展中&#xff0c;Layer 2&#xff08;L2&#xff09;解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术&#xff0c;但它仍面临一些关键问题和挑战&#xff0c;例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

【已解决】Error: error:0308010C:digital envelope routines::unsupported

前言 场景&#x1f3ac; 使用 Ant Design &#xff0c; 执行 npm run dev 出现异常。 文章目录 前言场景&#x1f3ac; 异常信息解决方案方案一(推荐)MAC | Linux 电脑成功⬇️ Windows 电脑 方案2&#xff1a; 不懂留言 JavaPub 异常信息 我直接异常信息&#xff0c;你可以…

关于C#操作SQLite数据库的一些函数封装

主要功能&#xff1a;增删改查、自定义SQL执行、批量执行&#xff08;事务&#xff09;、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装&#xff1a; using System; using System.Collections.Generic; using System.Data.SQLite; using System.…

Linux提权!!!

上一篇文章讲了Windows的提权&#xff0c;那么这篇文章就来讲一下Linux的提权 1.SUID提权 suid权限 作用&#xff1a;让普通用户临时拥有该文件的属主的执行权限&#xff0c;suid权限只能应用在二进制可执行文件&#xff08;命令&#xff09;上&#xff0c;而且suid权限只能设置…

【前端面试3+1】09 ES6新特性、Promise原理 、浏览器从输入到页面渲染的过程、【罗马数字转整数】

一、ES6新特性 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript的一个重要更新版本&#xff0c;引入了许多新特性和语法改进&#xff0c;下面详细说明一些主要的新特性&#xff1a; 1. let 和 const 声明&#xff1a; 使用let和const关键字可以声明块级作用域的变量&a…