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

了解https原理,对称加密/非对称加密原理,浏览器与服务器加密的进化过程,https做了些什么

最开始的加密

浏览器与服务器之间需要防止传输的数据被黑客破解。因此,浏览器在发送数据时会对数据进行加密,并把加密的密钥(或密钥的某些部分)放在数据的某一个区域中。服务器收到数据后,会提取密钥并用它来解密数据。这样的加密方式称为 对称加密

对称加密的缺点

问题在于,当多个客户端都使用相同的加密算法时,黑客可以通过拦截和分析加密数据,推测出加密密钥的位置。这个过程叫做密钥泄漏,因此,对称加密 在密钥管理上有较大风险,一旦密钥被泄漏,通信的安全性就会受到威胁。因此,传统的对称加密不完全安全。


非对称加密

后来,科学家们发现了 非对称加密 的方法,这种方法解决了对称加密中的密钥管理问题。

非对称加密原理

非对称加密的基本思想是:使用公钥加密,使用私钥解密。其中,公钥可以公开,任何人都可以用它来加密消息,而私钥只有对应的接收方才能拥有,只有拥有私钥的人才能解密消息。

加密过程如下:
  1. 服务器拥有一对 公钥私钥,其中 公钥 是公开的,任何人都可以获取,而 私钥 则严格保密。
  2. 客户端想要与服务器进行通信时,会使用 服务器的公钥 来加密消息。
  3. 服务器收到消息后,用自己的 私钥 解密消息。

通过这种方式,只有服务器能够解密客户端发送的消息,确保了数据的机密性。

非对称加密的缺点

  • 这种方法存在一个问题,即 服务器到客户端 的消息并没有加密,黑客依然可以拦截服务器发送的消息,因为它们是明文的。

双向非对称加密

为了更好地保护通信的双方,提出了 双向非对称加密。在这种加密模式中,双方都有公钥和私钥,并通过交换公钥进行加密和解密。

双向非对称加密流程:

  1. 客户端和服务器都各自拥有一对公钥和私钥。
  2. 客户端向服务器发送请求时,会先发送自己的公钥给服务器。
  3. 服务器收到客户端的公钥后,也发送自己的公钥给客户端。
  4. 然后,客户端和服务器互相使用对方的公钥加密消息,自己用私钥解密对方的消息。

双向非对称加密的缺点

  • 计算资源消耗大:非对称加密算法(如 RSA)相较于对称加密(如 AES)来说,计算资源消耗较大,可能会导致网页渲染变慢,影响用户体验。

非对称加密 + 对称加密的结合

为了解决双向非对称加密中的性能问题,现代网络通信通常结合了 非对称加密对称加密

加密流程:

  1. 第一次请求:客户端在与服务器建立连接时,使用 服务器的公钥 加密一个随机生成的 对称密钥(例如 AES 密钥)。
  2. 服务器使用 自己的私钥 解密该对称密钥。
  3. 一旦密钥交换完成,客户端和服务器就可以使用这个对称密钥进行加密和解密数据,后续的数据传输都使用高效的对称加密进行保护。

这种方式既保证了通信的安全性,又避免了非对称加密带来的性能问题。


非对称加密 + 对称加密的结合 —— 升级版

在实际应用中,单纯的非对称加密和对称加密结合方式依然存在一些潜在的安全隐患,尤其是客户端生成的私钥较容易被猜测出来。为此,引入了 随机数生成 来进一步提高安全性。

升级版的加密流程:

  1. 客户端随机数:客户端在第一次通信时,向服务器发送一个随机数 1。
  2. 服务器随机数:服务器回应时,会发送一个包含随机数 2 的请求。
  3. 客户端生成随机数:客户端收到服务器的请求后,会生成一个随机数 3,并用 服务器的公钥 加密后发送给服务器。
  4. 双方密钥生成:客户端和服务器通过这三个随机数生成对称加密密钥(如 AES 密钥)。
  5. 双方用这个密钥进行后续的数据加密和解密。

校验密钥一致性

在密钥生成后,双方需要校验生成的对称密钥是否一致,以确保双方的随机数生成的秘钥都是正确的


非对称加密 + 对称加密的结合的漏洞 —— 中间人攻击

虽然 非对称加密 + 对称加密 的结合在理论上很安全,但仍然存在 中间人攻击 的风险。

中间人攻击示意图:

客户端 <----> 恶意服务器 <----> 目标服务器

攻击流程:

  1. 客户端发起请求时,恶意服务器伪装成目标服务器,并向客户端发送自己的 公钥
  2. 客户端误将数据用恶意服务器的 公钥 加密,并发送给恶意服务器。
  3. 恶意服务器用自己的 私钥 解密数据,获得客户端的私钥和密钥信息。
  4. 恶意服务器将数据转发给目标服务器,并伪装成客户端进行后续通信。
  5. 通过这种方式,恶意服务器可以窃取通信双方的敏感信息。

CA证书(HTTPS认证)

为了防止中间人攻击,SSL/TLS 引入了 CA(证书颁发机构)认证。CA机构充当了一个“公证人”的角色,帮助验证服务器的身份。

证书签发过程:

  1. 服务器将域名、公司信息等提交给 CA 进行认证。
  2. CA 使用其 私钥 对服务器信息进行加密,生成一个 数字签名
  3. 将该签名与服务器信息一起打包,返回给服务器,这样就完成了认证。

证书验证过程:

当客户端与经过 CA 认证的服务器建立连接时:

  1. 服务器将自己的证书(包含公钥和数字签名)发送给客户端。
  2. 客户端计算该证书的 hash 值(称为 hash1),然后使用 CA 的公钥 解密数字签名得到 hash2
  3. 如果 hash1hash2 相同,则说明证书没有被篡改,通信是安全的。
  4. 如果证书验证失败,浏览器会警告用户连接不安全。

CA证书服务器的认识

为了避免单个 CA 证书服务器的负担过重,CA 采用了分层认证架构。根级 CA 服务器是最权威的,下面的中级 CA 服务器可以为下级的证书颁发机构提供认证服务。

CA 证书验证过程:

  1. 客户端验证服务器证书时,首先验证证书的签发机构。
  2. 如果证书由根证书服务器签发,验证成功。如果证书不是根证书,则会向上逐层验证签发证书,直到找到根证书。
  3. 根证书通常已经预安装在操作系统或浏览器中,一旦找到可信根证书,验证过程就完成。

图示:SSL/TLS通信过程

±------------------+ ±---------------------+
| Client | | Server |
|-------------------| |----------------------|
| 1. Request data | <---------> | 2. Send certificate |
| 3. Encrypt with | | 4. Decrypt using |
| server’s pub | | private key |
| 5. Send encrypted | | 6. Send response |
| data to server | | encrypted with |
±------------------+ | shared key |
±---------------------+

通过图示可以更清晰地看到客户端与服务器在 SSL/TLS 握手过程中如何进行加密通信。

相关文章:

了解https原理,对称加密/非对称加密原理,浏览器与服务器加密的进化过程,https做了些什么

最开始的加密 浏览器与服务器之间需要防止传输的数据被黑客破解。因此&#xff0c;浏览器在发送数据时会对数据进行加密&#xff0c;并把加密的密钥&#xff08;或密钥的某些部分&#xff09;放在数据的某一个区域中。服务器收到数据后&#xff0c;会提取密钥并用它来解密数据…...

山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程

山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程 一、赛项名称 赛项编号&#xff1a;GZ035 赛项名称&#xff1a;5G 组网与运维 赛项组别&#xff1a;高职学生组、教师组 二、竞赛目的 2019 年 6 月 6 日&#xff0c;5G 牌照正式发放&#xff0c;标志着我国全面进…...

tcpdump编译 wireshark远程抓包

https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar -zxvf flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make installwget http://ftp.gnu.org/gnu/bison/bison-3.2.1.tar.gz ./configure make sudo make install以上两个库是…...

Web开发 -前端部分-CSS

CSS CSS&#xff08;Cascading Style Sheet&#xff09;:层叠样式表&#xff0c;用于控制页面的样式&#xff08;表现&#xff09;。 一 基础知识 1 标题格式 标题格式一&#xff1a; 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…...

用 Python Turtle 绘制流动星空:编程中的璀璨星河

用 Python Turtle 绘制流动星空&#xff1a;编程中的璀璨星河 &#x1f438; 前言 &#x1f438;&#x1f41e;往期绘画>>点击进所有绘画&#x1f41e;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f438; 前言 &#x1f438; 夜空中繁星…...

Java从入门到工作2 - IDEA

2.1、项目启动 从git获取到项目代码后&#xff0c;用idea打开。 安装依赖完成Marven/JDK等配置检查数据库配置启动相关服务 安装依赖 如果个别依赖从私服下载不了&#xff0c;可以去maven官网下载补充。 如果run时提示程序包xx不存在&#xff0c;在项目目录右键Marven->Re…...

fastadmin批量压缩下载远程视频文件

后端代码 // 批量下载并压缩 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(记录不存在);}$arr [];$tempFiles []; // 用来存储临时下载的视频文…...

【保姆级】Mac如何安装+切换Java环境

本文从如何下载不同版本的JDK,到如何丝滑的切换JDK,以及常见坑坑的处理方法,应有尽有,各位看官走过路过不要错过~~~ 下载⏬ 首先上官网: https://www.oracle.com/ 打不开的话可以使用下面👇这个中文的 https://www.oracle.com/cn/java/technologies/downloads/a…...

2024首届世界酒中国菜国际地理标志产品美食文化节成功举办篇章

2024首届世界酒中国菜国际地理标志产品美食文化节成功举办&#xff0c;开启美食文化交流新篇章 近日&#xff0c;首届世界酒中国菜国际地理标志产品美食文化节在中国国际地理标志大厦成功举办&#xff0c;这场为期三天的美食文化盛会吸引了来自世界各地的美食爱好者、行业专家…...

Springboot静态资源

默认位置 静态资源访问目录下的资源可以直接访问&#xff0c;默认的四个位置 classpath:/META-INF/resources/&#xff08;默认加载&#xff0c;不受自定义配置的影响&#xff09; classpath:/resources/ classpath:/static/ classpath:/public/ 如果在静态目录下存在favic…...

MTK修改配置更改产品类型ro.build.characteristics

文章目录 需求场景实际问题 参考资料解决方案MTK 修改方案修改点一&#xff1a;build\core\product_config.mk修改点二&#xff1a;build\make\core\main.mk修改是否成功&#xff0c;adb 验证 实战项目中解决案例 需求场景 更改产品设备属性 table-phone-device&#xff0c;使…...

SQL 查询中的动态字段过滤

这段代码是一个 SQL 查询中的动态字段过滤部分&#xff0c;使用了 MyBatis 的 标签和 标签。以下是逐步的解释&#xff1a; <!-- 动态字段过滤 --><if test"parameters ! null and parameters.size() > 0"><foreach collection"parameters&qu…...

数字IC后端零基础入门基础理论(Day1)

数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level&#xff08;门级&#xff09;网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…...

【LC】240. 搜索二维矩阵 II

题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,…...

Redis应用—4.在库存里的应用

大纲 1.库存模块设计 2.库存缓存分片和渐进式同步方案 3.基于缓存分片的下单库存扣减方案 4.商品库存设置流程与异步落库的实现 6.库存入库时"缓存分片写入 渐进式写入 写入失败进行MQ补偿"的实现 7.库存扣减时"基于库存分片依次扣减 合并扣减 扣不了…...

selenium获取请求头

【原创】Selenium获取请求头、响应头-腾讯云开发者社区-腾讯云 selenium 4.0.0 selenium-wire 5.1.0 python 3.10 from seleniumwire import webdriver import time from selenium.webdriver.common.by import By import re def get_request_headers(driver):"""…...

Rust中自定义Debug调试输出

在 Rust 中&#xff0c;通过为类型实现 fmt::Debug&#xff0c;可以自定义该类型的调试输出。fmt::Debug 是标准库中的一个格式化 trait&#xff0c;用于实现 {:?} 格式的打印。这个 trait 通常通过自动派生&#xff08;#[derive(Debug)]&#xff09;来实现&#xff0c;但你也…...

docker离线安装、linux 安装docker

之前写过一篇docker的离线安装&#xff0c;现在从头再看繁琐了&#xff0c;服务器换了&#xff0c;既然要重搭一遍就要改进一下了。下面步入正题&#xff1a; 1.下载离线软件包 https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz 2.下载安装工具包…...

卓易通:鸿蒙Next系统的蜜糖还是毒药?

哈喽&#xff0c;我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节&#xff0c;觉得还是蛮有意思的&#xff0c;我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…...

AI大模型学习笔记|神经网络与注意力机制(逐行解读)

来源分享链接&#xff1a;通过网盘分享的文件&#xff1a;详解神经网络是如何训练的 链接: https://pan.baidu.com/s/12EF7y0vJfH5x6X-0QEVezg 提取码: k924 内容摘要&#xff1a;本文深入探讨了神经网络与注意力机制的基础&#xff0c;以及神经网络参数训练的过程。以鸢尾花数…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...