HTTPS的概念和工作过程

一.HTTPS是什么

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层(SSL)

HTTP协议内容都是按照文本的方式明文传输的,这就导致传输过程中可能出现被篡改的情况

最著名的就是十多年前网络刚发展的时期,出现“运营商劫持”,当时普遍使用的HTTP协议,因此就出现客户端发给服务器请求,服务器返回响应的结果,在返回的过程中被运营商劫持了,运营商就更改其中某些响应的数据,再发回给客户端

最典型的就是广告模块,广告商投钱给网站,网站就会当用户查询后,返回其相关的广告

其中广告收费模式大多也是CPC(按点击计费),那么这计算点击次数肯定不可能只让其中一方进行统计,而是广告商和网站双方都进行统计,最后核对双方统计是否一致,如果不一致,那么程序员再来查到底是哪里出现问题

当时就经常出现,广告商统计的次数比网站统计的次数少,那么网站方的程序员就去查程序记录,但是怎么也没找到问题,查询的次数就是网站当前统计的次数,广告商也不服气,自己这边明明也只被点击了这么多次,却要交网站多统计出来钱,最后网站也只能哑巴吃榴莲,有苦说不出

时间一长,这种事就流传开来了,因为不止一家网站会出现这种情况,而是许多家,最后内部人员也透露,是被运营商劫持了

即用户发给网站请求,网站接收请求并返回响应,其中就包括广告商的广告,但是这个返回的响应被运营商劫持了,将其中的广告换成跟自己运营商有利益关系的广告商,这时再返回给用户,那么此时用户点击广告,但这个广告不是网站返回的广告,而是运营商劫持后修改的广告,那么就导致网站这边统计了广告点击次数,而真正的广告商根本没有接收到点击,因此就出现了不一致的情况

所以网站作为反制手段,就对HTTP协议进行了加密,即HTTPS,这样就能防止运营商对其中的内容进行篡改

二.什么是加密

要传输的内容叫做明文,明文经过加密,再看到的就是密文

解密则是将密文经过解密,得到的就是明文

而加密和解密的过程中,往往需要密钥

而密钥又往往分为公钥和私钥,公钥是公开的,大家都知道的,而私钥则是私密的,别人不知道的,公钥是由私钥推导而生成的

三.HTTPS的工作过程

1.引入对称加密

首先加密方式主要有两种:对称加密和非对称加密

对称加密是指加密解密用的是同一个密钥,这个密钥是私钥

非对称加密是指加密解密用不同的密钥,一个公钥,一个私钥

这两个加密方式各有优缺点,其中非对称加密的运输速度非常慢,比对称加密要慢的多

那么也许就会说,我们就选对称加密就好了呀

但是有一个问题,即一开始客户端和服务端要设置对称加密的密钥,如果客户端说“我们使用密钥*****”,服务端说“好的好的”

那么这两段话是没有使用密钥加密的,必须要等这两段话后,双方才使用刚刚设定的密钥进行加密解密,所以在这两段对话时就有可能已经被其他人知道了,那么后面的加密解密操作也就相当于掩耳盗铃了

如果你说那给这两段话也进行密钥加密,当然也可以,但是新生成的这个密钥又要先经过双方沟通才能知道,而这段沟通也是未被加密的,因此就陷入俄罗斯套娃的情况了

因此我们就需要引入非对称加密

2.引入非对称加密

服务端生成非对称加密的私钥,然后匹配出公钥并公开给客户端,客户端拿到公钥,同时生成对称密钥

客户端说“我们使用对称加密密钥****”,然后使用非对称加密的公钥进行加密

而此时服务器接收到这段密文,用非对称加密的私钥解密,获取到“我们使用对称加密密钥****”这段话,于是服务端说“好的好的”,并用对称加密密钥进行加密

客户端接收到服务端的密文,用对称加密密钥解密得到“好的好的”

然后双方就可以抛弃非对称加密,使用约定的对称加密进行对话即可

3.中间人攻击

虽然上述使用非对称加密后,再使用对称加密,看起来似乎好像就安全了,但实际上并不安全

比如AB要做生意,双方仅仅只是听说过但没有联系方式,这时有个中间人C,C认识AB且有联系方式,于是AB就让C搭桥牵线,C也有一个朋友D,于是剧情如下

一开始AB都以为:

A找C联系B,B来人跟A磋商,一来一回就能达成交易

实际上:

A找C联系B,结果C却让D来,于是A以为D是B,将交易条件和细节告诉了D

D把A的交易条件和细节告诉B,B以为D是A,于是又将交易条件和细节告诉了D

于是一来一回,AB也能达成交易,但是神不知鬼不觉的情况下就多了一个中间人,而这个中间人把握了双方所有的交易信息

回到客户端和服务端上

刚刚介绍的都是双方以为的

但实际上就有可能:

服务端生成非对称加密的私钥A,然后匹配出公钥A并公开给客户端的时候,被黑客拦下了,然后修改为公钥B,并自己生成私钥B,再传给客户端

客户端拿到公钥B,说“我们使用对称加密密钥****”,并用公钥B加密,此时黑客用私钥B对此解密,获取到“我们使用对称加密密钥****”这段话,得到对称加密密钥,然后再将这段话用公钥A加密,返回给服务端

服务端用私钥A进行解密,获取到“我们使用对称加密密钥****”这段话,于是客户端和服务端就抛弃非对称加密密钥,使用对称加密密钥进行加密解密

但是对称加密密钥已经被黑客得知了,所以客户端和服务端之间的加密也是如同虚设的,且还是在双方毫无察觉的情况下知道的

这就是中间人攻击

4.引入证书

中间人攻击之所以能成功,就是因为客户端无法分辨发来的信息是否来自服务端,同理,服务端也无法分辨发来的信息是否来自客户端,所以要防止中间人攻击,就必须解决识别信息来源的问题

简单来说就是引入第三方公证机构,服务器将自己的信息发给公证机构

信息包括:证书的公证机构是谁,证书有效期多久,服务器的非对称加密的公钥,服务器的域名

公证机构就会对上述信息进行一些公式计算,也就是密钥加密,得到一串数字,叫做“校验和”,也就作为数字签名返回给服务器

于是服务器就将信息和数字签名发给客户端,其中信息还是发给公证机构的信息,信息和数字签名统称为一张数字证书

其中信息都是明文公开的,谁都看得到

这时客户端拿到数字证书,将信息也发给公证机构计算校验和,如果校验和=数字签名,就说明这个信息未被篡改,可以信息,如果!=,则说明信息被修改了,不可信

也许你会说黑客难道就不能伪造修改证书吗

如果黑客拦截了服务器发来的数字证书,按照往常修改信息中非对称加密的密钥,那么再返回给客户端,客户端拿到公证机构验证,就会发现数字签名对不上,所以不行

那黑客能不能再把数字签名也给篡改了呢,那就是不行了,因为黑客要将自己篡改后的信息生成符合公证机构的校验和,只有两种选择,一是将篡改后的信息也按正常流程去申请证书,但此时黑客的实际域名和篡改信息中服务器的域名发生冲突,公证机构拒绝颁布证书。二是获取公证机构的私钥,将篡改信息自己进行加密,这风险难度很大,公证机构比较是专业的,不是黑客想偷就能偷走的,如果真有这种技术,那还不如直接去偷服务器公开给客户端公钥对应的私钥,然后用私钥解密客户端采用的对称加密密钥,这难度也比去偷公证机构私钥简单

所以综上,就解决了中间人攻击的问题

所以通过这一套HTTPS工作流程下来,之前出现的“运营商劫持”这种中间人攻击就失效了,同时也基本替代了HTTP协议,如今网络上大部分都是HTTPS协议的网站,几乎没有纯HTTP协议的网站了

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

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

相关文章

Unity —— Android 应用构建与发布​

文章目录1 ​Gradle模板​​:了解Gradle模板的作用及使用方法,以增强对构建流程的控制。​2 ​Gradle模板变量​​:参考文档——自定义Gradle模板文件中可用的变量列表。2.1 修改Unity应用的Gradle工程文件2.1.1 通过Gradle模板文件2.1.2 导出…

【iOS】strong和copy工作流程探寻、OC属性关键字复习

文章目录前言strong和copy的区别为什么要用copy?什么时候用什么修饰?strong(ARC自动管理)strong修饰变量的底层流程图底层代码核心实现小结copy底层流程图对比与strong的关键不同之处内部调用关系(伪代码)小…

程序代码篇---多循环串口程序切换

上位机版(Python)要实现根据串口接收结果高效切换四个 while 循环函数,我们可以采用状态机模式,配合非阻塞串口读取来设计程序结构。这种方式可以实现快速切换,避免不必要的资源消耗。下面是一个高效的实现方案&#x…

rk3568上,实现ota,计算hash,验证签名,判断激活分区,并通过dd命令,写入对应AB分区

通过自定义升级程序&#xff0c;更直观的理解ota升级原理。 一、模拟计算hash&#xff0c;验证签名&#xff0c;判断激活分区&#xff0c;并通过dd命令&#xff0c;写入对应分区 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

数据分析—numpy库

numpy库NumPy 库全面指南NumPy (Numerical Python) 是 Python 科学计算的基础库&#xff0c;提供了高性能的多维数组对象和工具。以下是 NumPy 的核心功能和使用方法。一、安装与基础1. 安装 NumPypip install numpy2. 导入 NumPyimport numpy as np # 标准导入方式二、数组创建…

Vue3 setup、ref和reactive函数

一、setup函数1.理解&#xff1a;Vue3.0中一个新的配置项&#xff0c;值为一个函数。2.setup是所有Composition API(组合API)的“表演舞台”。3.组件中用到的&#xff1a;数据、方法等等&#xff0c;均要配置在setup中。4.setup函数的两种返回值&#xff1a;(1).若返回一个对象…

python中appium 的NoSuchElementException错误 原因以及解决办法

错误收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus从入门到入土(四):持久层接口之BaseMapper和选装件

大家好&#xff0c;今天继续更新MybatisPlus从入门到入土系列&#xff0c;上一次的持久层接口还没讲完&#xff0c;只讲了IService接口&#xff0c;今天我们继续来讲一下。 BaseMapper BaseMapper中的方法也比较简单&#xff0c;都是增删改查的基础API&#xff0c;不知道大家还…

数组和指针的关系

在 C 语言中&#xff0c;​指针和数组有着非常紧密的联系&#xff0c;但它们本质上是 ​不同的概念。理解它们的关系是掌握 C 语言内存操作的关键。下面我会从多个角度帮你梳理 ​指针和数组的直接联系&#xff0c;并解释它们的异同点。1. 数组和指针的本质区别​概念本质存储方…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之github网站在线搜索

系列篇章💥 No. 文章 1 AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践 2 AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索 3 AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践) 4 AI大模型探索之路…

从0到1学PHP(十二):PHP 框架入门与项目实战

目录一、主流 PHP 框架介绍1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的优势二、框架基本使用&#xff08;以 Laravel 为例&#xff09;2.1 框架的安装与配置2.2 路由定义、控制器创建、视图渲染2.3 数据库操作&#xff08;ORM 的使用&#xff09;三、小型项目实战3.1 项目需求分…

MPLS LSP

一、概述上一章我们已经介绍过,LSP是MPLS报文在MPLS网络中转发时经过的路径,可以看作是由报文传输方向节点为对应FEC分配的MPLS入标签组成的,因为每台设备上为每个FEC分配的入标签是唯一 的&#xff0c;并与由下游节点为本地节点上该FEC分配的出标签建立映射关系&#xff0c; 所…

图像、视频、音频多模态大模型中长上下文token压缩方法综述

多模态大模型MLLMs 能够处理高分辨率图像、长视频序列和冗长音频输入等复杂上下文&#xff0c;但自注意力机制的二次复杂度使得大量输入 token 带来了巨大的计算和内存需求。 如下图&#xff0c;上&#xff1a;图像、视频和音频数据类型可以在其表示维度上进行扩展&#xff0c;…

Spring MVC 九大组件源码深度剖析(一):MultipartResolver - 文件上传的幕后指挥官

文章目录一、为什么从 MultipartResolver 开始&#xff1f;二、核心接口&#xff1a;定义文件上传的契约三、实现解析&#xff1a;两种策略的源码较量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首选&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何实现电源控制的?

STM32的电源控制主要通过内置的电源管理模块&#xff08;PWR&#xff09;实现&#xff0c;涵盖电压调节、功耗模式切换和电源监控等功能。以下是其核心机制及实现方式&#xff1a;​​1. 电源架构与供电区域​​STM32的电源系统分为多个供电区域&#xff0c;各司其职&#xff1…

《R for Data Science (2e)》免费中文翻译 (第3章) --- Data transformation(1)

写在前面 本系列推文为《R for Data Science (2)》的中文翻译版本。所有内容都通过开源免费的方式上传至Github&#xff0c;欢迎大家参与贡献&#xff0c;详细信息见&#xff1a; Books-zh-cn 项目介绍&#xff1a; Books-zh-cn&#xff1a;开源免费的中文书籍社区 r4ds-zh-cn …

rclone、rsync、scp使用总结

数据同步工具使用总结【rclone、rsync、scp】一、数据处理背景二、数据处理方法对比1、数据关系梳理2、不同工具处理方法3、经验总结三、工具扩展知识1、rclone工具介绍&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安装工具及配置本地文件迁移到云上服务…

用latex+vscode+ctex写毕业论文

文章目录前言一、安装latex二、安装ctex包三、更新ctex包四、使用ctex文档类前言 用latexvscodectex写毕业论文。&#xff08;英文论文不用安装ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;为中文 LATEX 文档提供了汉字输出支持、标点压缩、字…

深度学习·mmsegmentation基础教程

mmsegmentation的使用教程 mmsegmentation微调方法总结 自定义自己的数据集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注册&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定义训练和测试的pipeline&#xff1a;mmsegme…

InfluxDB 与 Node.js 框架:Express 集成方案(二)

四、优化与注意事项 &#xff08;一&#xff09;性能优化技巧 连接池管理&#xff1a;使用连接池可以有效减少创建和销毁数据库连接的开销。在 Node.js 中&#xff0c;可以借助influx模块结合第三方连接池库&#xff0c;如generic-pool来实现连接池的管理 。通过设置连接池的…