【图解计算机网络】简单易懂的https原理解析

简单易懂的https原理解析

  • https与http的区别
  • 混合加密
    • 对称加密
    • 非对称加密
    • 混合加密解析
    • 混合加密问题
  • 摘要算法
  • 数字证书
    • 数字证书原理
    • 为什么通过CA证书可以解决中间人攻击的问题呢?
  • https握手流程

https与http的区别

http是明文传输的,非常不安全,容易被人窃取和篡改传输的内容。

https通过混合加密、摘要算法、数字证书等技术解决了http传输不安全的问题。

在这里插入图片描述

https其实就是在http与TCP之间多加一层SSL或TLS协议。

在这里插入图片描述

混合加密

要理解混合加密,需要先理解对称加密和非对称加密。

对称加密

对称加密就是加密和解密都使用同一个密钥,这种方式加解密速度快但是不安全,如果密钥被对方窃取到,就可以很简单的解密出数据。

在这里插入图片描述

非对称加密

非对称加密就是加解密使用的密钥不是同一个密钥,而是一对密钥——公钥和私钥。这密钥对是由服务端生成的,私钥一般是服务端自己保存,而公钥则会通过某种途径发放给客户端。非对称加密的特点就是公钥加密的数据只有对应的私钥能解密,私钥加密的数据只有对应公钥能解密。

比如客户端利用服务端发放的公钥对即将传输的数据进行加密,服务端利用私钥对客户端发送过来的数据进行解密。

在这里插入图片描述

但是由于非对称加密的性能较低,所以一般不会直接使用非对称加密传输数据。非对称加密更常用的场景是数字签名,这种场景一般是服务端用自己的私有加密,客户端用服务端的公钥解密。而且加解密的对象不是数据,而是通过hash算法以即将传输的数据作为参数算出的一个hash值,这个hash值经过服务端的私钥进行加密之后,就是数字签名。

在这里插入图片描述

  1. 服务端对要传输的数据通过hash算法算出一个hash值,然后对这个hash值使用私钥进行加密。
  2. 客户端接收到加密后的数字签名和数据后,通过公钥解密得到服务端算出的hash值。
  3. 客户端自己再通过相同的hash算法计算得出hash值。然后两个hash值进行比较,如果相等则说明数据确实是来源于服务端,这个数据是可信的;如果两个hash值比较后发现不相等,那就说明这个数据是被篡改过的,不是来源于服务端的数据。

非对称加密由于使用的是一对密钥而不是同一个密钥,所以安全度相比对称加密要高,但是加解密速度较慢。

混合加密解析

由于对称加密不安全,非对称加密性能又较差,所以就组合它们俩,就有了混合加密。

首先通过非对称加密,客户端使用服务端公钥把数据传输时使用的对称密钥加密传输给服务端,服务端使用私钥解密得到对称密钥。然后后续客户端与服务端之间使用对称密钥进行数据传输。

在这里插入图片描述

  1. 一开始,客户端利用服务端发放的公钥,给对称密钥进行加密,加密后的对称密钥发送给服务端。
  2. 服务端接收到加密后的对称密钥之后,就利用自己的私钥进行解密,得到客户端发来的对称密钥。
  3. 此时客户端和服务端都拥有了同一对称密钥,后续客户端和服务端之间的数据传输都使用该对称密钥进行加密。

混合加密问题

混合加密有一个问题,就是服务端的公钥如何传输给客户端而不被中间者篡改,如果这个问题不解决,单靠混合加密也是不安全的,典型的例子就是中间人攻击。

在这里插入图片描述

所以还需要数字签名和数字证书。数字签名是通过摘要算法算出的hash值再利用服务端私钥加密得到的,而数字证书则是由有公信力的CA机构颁发的CA证书。

摘要算法

摘要算法可以让数据接收方校验接收到的数据是否与数据发送方发送的数据一致。

数据发送方通过一个约定好的hash算法,待传输的数据作为参数,算出一个hash值,把这个hash值与数据一起传输。接收到数据的一方,根据约定好的hash算法,利用接收到的数据作为参数,算法出一个hash值,然后把这个算出来的hash值与接收到的hash值进行比较,如果两hash值相等,则校验通过,否则校验不通过。

在这里插入图片描述

通过摘要算法,数据接收方就可以验证数据发送方发来的数据是否完整,是否与数据发送方发出的数据一致。这种方式可以解决数据在传输的过程中由于一些意外情况导致的数据错乱的问题,但是无法防止他人的恶意攻击。

比如发送的报文被第三者截获,可以修改掉数据,然后用相同的算法重新计算hash值,这样接收数据的一方也无法发现。因此通常这个hash值还要用私钥进行加密,变成一个数字签名。

在这里插入图片描述

数字签名的原理上面已经描述过,可以看出有了数字签名,只要不发生中间人攻击,就没啥问题。但是如果服务端颁发的公钥被中间人截获,他自己重新生成一对新的公私钥,再把中间人自己的公钥冒充服务端的发给客户端,那么客户端还是不知道的。于是就需要用到数字证书。

数字证书

数字证书原理

为了解决公钥被伪造的问题,就需要用到数字证书,数字证书使得客户端能够验证他接收到的公钥是否可信。

在这里插入图片描述

  1. 首先,服务端把自己的公钥注册到CA机构。
  2. CA机构利用摘要算法,以服务端的公钥为参数,算出一个hash值,然后利用CA机构自己的私钥对这个hash值进行加密得到一个数字签名。CA机构把数字签名和服务端公钥作为CA证书的一部分,给服务端颁发一个证书。
  3. 客户端请求服务端时,服务端首先给客户端发送CA机构颁发的证书。
  4. 由于有公信力的CA机构的公钥都已经预置到操作系统里面,客户端可以通过操作系统内置的CA机构公钥对证书中的数字签名进行解密,得到hash值,再以证书中的服务端公钥为参数算出另一个hash值,如果两个hash值一致,则校验通过,说明服务端公钥可信,否则就是校验不通过,不会使用该公钥加密传输数据。
  5. 如果校验通过,客户端使用这个公钥进行加密传输。

为什么通过CA证书可以解决中间人攻击的问题呢?

因为CA机构的私钥,中间人是没有的。而CA机构的公钥又是操作系统内置,操作系统内置的都是有公信力的CA机构的公钥。

因此,即使中间人截获了服务器传输给客户端的证书,自己搞一个假证书,里面带上自己的公钥,等这个假证书传到客户端,客户端也是校验不通过的。

https握手流程

如果使用https协议,那么在TCP三次握手完毕后,要进行TLS协议的握手流程。

在这里插入图片描述

  1. 客户端生成一个随机数C并向服务端发送,服务端返回一个ack报文
  2. 服务端生成一个随机数S并向客户端发送,再发送证书,然后再发送一个Done报文,客户端收到Done报文后返回一个ack报文
  3. 客户端验证证书是否有效,如果证书验签通过,则取出里的服务端公钥,然后客户端生成一个随机数pre-master key,使用服务端的公钥加密,发送个服务端
  4. 客户端和服务端双方,使用随机数C、随机数S、随机数pre-master key生成一个对称密钥
  5. 客户端发送报文告知服务端后续使用对称密钥通讯,然后发送Finished报文,服务端返回一个ack报文
  6. 服务端发送报文告知客户端后续使用对称密钥通讯,然后发送Finished报文,客户端返回一个ack报文

可以看到,客户端使用服务端公钥加密传输的并不是对称密钥本身,而是一个随机数。而对称密钥是通过三个随机数计算生成的,这三个随机数分别是客户端生成的随机数C、服务端生成的随机数S、以及客户端生成并使用服务端公钥加密传输的pre-master。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

呆马科技——智慧应急执法监管平台

在当今社会,安全生产的重要性日益凸显。对于各级政府和企事业单位,当务之急是如何高效地对突发事件进行执法管理。平台应运而生,旨在通过信息化、智能化技术,提升安全管理的效率与准确性。 一、平台特点 整合各类平台的信息资源&…

添加github SSH Key

添加github SSH Key 使用 SSH 协议,您可以连接远程服务器和服务并对其进行身份验证。使用 SSH 密钥,您可以连接到 GitHub,而无需在每次访问时提供您的用户名和个人访问令牌。您还可以使用 SSH 密钥来签署提交。 #3224333333qq.com替换为你自己…

6.NVIC中断配置(ST的精简ARM中断体系)

void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)//设置优先级分组,整个项目共用一个分组 uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) //计算优先级编码值,(组号&…

Python爬虫--Ajax异步抓取腾讯视频评论

在某些网站 ,当我们滑下去的时候才会显示出后面的内容 就像淘宝一样,滑下去才逐渐显示其他商品 这个就是采用 Ajax 做的 然后我们现在就是要编写这样的爬虫。 规律分析: 这个时候就要用到我们的 Fiddler 了 我们需要分析加载评论的规律 …

GateWay具体的使用之局部过滤器接口耗时

1.找规律 局部过滤器命名规则 XXXGatewayFilterFactory, 必须以GatewayFilterFactory结尾。 /* 注意名称约定 * AddRequestHeaderGatewayFilterFactory 配置的时候写的是 AddRequestHeader * AddRequestParameterGatewayFilterFactory 配置的时候写的是 A…

【语音识别】搭建本地的语音转文字系统:FunASR(离线不联网即可使用)

参考自: 参考配置:FunASR/runtime/docs/SDK_advanced_guide_offline_zh.md at main alibaba-damo-academy/FunASR (github.com)参考配置:FunASR/runtime/quick_start_zh.md at 861147c7308b91068ffa02724fdf74ee623a909e alibaba-damo-aca…

上位机图像处理和嵌入式模块部署(树莓派4b下使用sqlite3)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 嵌入式设备下面,有的时候也要对数据进行处理和保存。如果处理的数据不是很多,一般用json就可以。但是数据如果量比较大&…

CISSP通关学习笔记:共计 9 个章节(已完结)

1. 笔记说明 第 0 章节为开篇介绍,不包括知识点。第 1 - 8 章节为知识点梳理汇总,8 个章节的知识框架关系如下图所示: 2. 笔记目录 「 CISSP学习笔记 」0.开篇「 CISSP学习笔记 」1.安全与风险管理「 CISSP学习笔记 」2.资产安全「 CISSP…

Ps 滤镜:置换(工作原理篇)

执行“置换”滤镜时,目标图像会发生位移变形,而变形的程度及方向与一个称为“置换图”的 PSD 文件有密切关系。 总体而言,置换所产生的位移变形是基于置换图的通道中的灰度信息进行的。 一、当置换图是灰度模式文件时 在灰度模式下&#xff0…

[leetcode] B树是不是A树的子结构

给定两棵二叉树 tree1 和 tree2,判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 注意,空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 示例 1: 输入:tree1 [1,7,5], tree2 [6,…

《QT实用小工具·四十四》支持图片和动图的文本编辑器

1、概述 源码放在文章末尾 该项目实现了一个功能丰富的文本编辑器,除了包含文本常规的编辑功能,还包括图片的插入功能和动图的插入功能,项目demo演示如下所示: 项目部分代码如下所示: #include "imagehelper.…

基于深度学习神经网络的AI图片上色DDcolor系统源码

第一步:DDcolor介绍 DDColor 是最新的 SOTA 图像上色算法,能够对输入的黑白图像生成自然生动的彩色结果,使用 UNet 结构的骨干网络和图像解码器分别实现图像特征提取和特征图上采样,并利用 Transformer 结构的颜色解码器完成基于视…

循环单链表的介绍与操作

定义 区别 链表合并 整合代码 typedef struct node{int data;node* next;; }lnode,*linklist; lnode* n; linklist l;//定义 void init(linklist &l){lnode lnew lnode;l->nextl;lnode *rl; } //单循环链表的合并 linklist merge(linklist &a,linklist b){//存头结…

注意力机制:SENet详解

SENet(Squeeze-and-Excitation Networks)是2017年提出的一种经典的通道注意力机制,这种注意力可以让网络更加专注于一些重要的featuremap,它通过对特征通道间的相关性进行建模,把重要的特征图进行强化来提升模型的性能…

ZISUOJ 高级语言程序设计实训-基础C(部分题)

说明&#xff1a; 有几个题是不会讲的&#xff0c;我只能保证大家拿保底分。 题目列表&#xff1a; 问题 A: 求平均数1 思路&#xff1a; 送分题…… 参考题解&#xff1a; #include <iostream> #include <iomanip> using std::cin; using std::cout;int main(…

C++项目在Linux下编译动态库

一、说明 最近在Windows下开发了一个C线程池项目&#xff0c;准备移植到Linux下&#xff0c;并且编译成动态库进行使用。现将具体过程在此记录。 二、准备 1、项目文件 我的项目文件如下&#xff0c;其中除main.cpp是测试文件之外&#xff0c;其他都是线程池项目相关的 将C…

双系统下删除ubuntu

絮絮叨叨 由于我在安装Ubuntu的时候没有自定义安装位置&#xff0c;而是使用与window共存的方式让Ubuntu自己选择安装位置&#xff0c;导致卸载时我不知道去格式化哪个分区&#xff0c;查阅多方资料后无果&#xff0c;后在大佬帮助下找到解决方案 解决步骤 1、 插上Ubuntu安…

【IR 论文】DPR — 最早提出使用嵌入向量来检索文档的模型

论文&#xff1a;Dense Passage Retrieval for Open-Domain Question Answering ⭐⭐⭐⭐⭐ EMNLP 2020, Facebook Research Code: github.com/facebookresearch/DPR 文章目录 一、论文速读二、DPR 的训练2.1 正样本和负样本的选取2.2 In-batch negatives 技巧 三、实验3.1 数据…

医学影像增强:空间域方法与频域方法等

医学影像图像增强是一项关键技术,旨在改善图像质量,以便更好地进行疾病诊断和评估。增强方法通常分为两大类:空间域方法和频域方法。 一、 空间域方法 空间域方法涉及直接对医学影像的像素值进行操作,以提高图像的视觉质量。以下是一些常用的空间域方法: 对比度调整:通过…

双向链表的介绍

引入 特点 操作 定义 插入 删除 小结 整合代码&#xff1a; //定义 typedef struct node{int data;node* next,prior; }Dlnode,*Dlinklist;//初始 void init(Dlinklist &l){Dlnode lnew Dlnode;l->nextNULL;l->priorNULL; }//插入&#xff1a;插入指定位置&#…