网络原理 - HTTP/HTTPS(5)

HTTPS

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

HTTP协议内容都是按照文本的方式明文传输的.

这就导致了在传输过程中出现了一些被篡改的情况.

臭名昭著的"运营商劫持"

下载一个天天动听.

未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接.

已被劫持的效果,点击下载按钮,就会弹出QQ浏览器的下载链接.

 

由于我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的内容,并进行篡改.

点击"下载按钮",其实就是在给服务器发送了一个HTTP请求,获取到的HTTP响应就包含了该APP的下载链接.运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动把交给用户的响应给篡改成"QQ浏览器"的下载地址了.

 

当然,他们这么做,是为了钱~

不止运营商可以劫持,其它的黑客也可以用类似的手段进行劫持,来窃取用户隐私信息,或者篡改内容

试想一下:如果黑客在用户登录支付宝的时候获取到用户余额,甚至是密码~ 

在互联网上,明文传输是比较危险的事情!!! 

HTTPS就是在HTTP的基础上进行了加密,进一步来保护用户的信息安全~

"加密"是什么

加密就是把明文(要传输的信息)进行一系列变换,生成密文.

解密就是把密文再进行一系列变换,还原成密文.

在加密和解密的过程中,往往需要一个或者多个的中间数据,辅助进行这个过程,这样的数据称为密钥.

HTTPS的工作过程

既然要保证数据安全,就需要进行"加密".

网络传输中不再直接传输明文,而是加密以后的"密文".

加密的方式有很多,但可以整体分为两大类:对称加密和非对称加密.

引入对称加密

对称加密其实就是通过同一个"密钥",把明文加密成密文,

一个简单的对称加密,按位异或.

假设明文a=1234,密钥key=8888

则加密a^key得到的密文b为9834.

然后针对密文9834再次运算b^key,得到的就是原来的明文1234.

(当然对于字符串的对称加密也是同理,每一个字符都可以表示成一个服务器).

当然,按位异或只是最简单的对称加密,HTTPS中并不是使用按位异或.

 

引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法解密,也就不知道真实的请求内容是啥了.

但是事情没有这么简单,服务器同一时刻肯定是给很多客户端提供服务的.这么多客户端,每个人用的密钥都必须是不同的(如果是相同那密钥就容易扩散了,黑客也就拿到了),因此每个服务器就需要维持每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情~ 

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥~

 

但是如果直接把密钥明文传输,那么黑客也就能获取到密钥了~后续的加密操作也就形同虚设了.

因此密钥的传输也必须加密传输!

但是想要对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥".这个也会被黑客截获,所以密钥的传输再用对称加密就行不通了.就需要引入非对称加密.

引入非对称加密

非对称加密要用到两个密钥,一个叫做"公钥",一个叫做"私钥".

公钥和私钥是配对的,最大的缺点就是运算速度非常慢(因此不会用来加密header和body的,只用来加密对称密钥),比对称加密要慢很多. 

通过公钥对明文加密,变成密文.

通过私钥对密文解密,变成明文.

也可以反着用

通过私钥对明文加密,变成密文.

通过公钥对密文解密,变成明文.

举个栗子:A要给B一些重要的文件,因此A和B提前做出约定:

B说:我桌子上有一个盒子,然后我给你一把锁,你把文件放盒子里用锁锁上,然后我回头拿着钥匙来开锁取文件.

在这个场景中,这把锁就相当于公钥,要是就是私钥.公钥给谁都行(不怕泄露),但是私钥只有B自己持有.持有私钥的人才能进行解密. 

 

客户端在本地生成对称密钥,通过公钥加密,发送给服务器.

由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥.

服务器通过私钥解密,还原出客户端发送的对称密钥.并且使用这个对称密钥加密给客户端返回的响应数据.

后续客户端和服务器通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其它设备/主机不知道密钥,即使截获了信息也没有意义. 

由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密. 

那么接下来问题又来了:

客户端如何获取到正确的公钥?

客户端如何确定这个公钥不是黑客伪造的?

中间人攻击

黑客可以使用中间人攻击,获取到对称密钥.

服务器可以创建出公钥和私钥,那么黑客就可以冒充服务器,也创建出一个自己的公钥和私钥.

过程如下:

 

引入证书

 服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息,公钥信息等.服务器把证书传递给浏览器,浏览器从证书中获取公钥就行了,证书就如同身份证,

证明服务端公钥的权威性.

分为六步:1.服务端申请认证(证书). 2.CA机构审核信息 3.CA机构为服务端签发证书

                4.服务端给客户端返回证书 5. 客户端验证证书 6.客户端向服务端发起密钥协商.

这个证书可以理解成是一个结构化的字符串,里面包含了以下信息:

证书发布机构

证书有效期

公钥

证书所有者

签名

...... 

需要注意的是:申请证书的时候,需要在特定的平台生成,会同时生成一对儿密钥对儿,即公钥和私钥.这对密钥对儿就是用来在网络通信中进行明文加密及数字签名的.

此时就有:

 

一个关键问题:返回证书的时候,证书数据也是经过了黑客的设备,此时黑客是否能修改证书中的公钥?替换成自己的公钥呢?

不行!!! 客户端拿到证书之后,会先针对证书校验真伪

证书的验证过程

关键就是证书的签名. 

颁布证书的公正机构,会在发布证书的时候,给这个证书计算出一个校验和.

然后公证机构使用自己的私钥(和服务器的私钥无关)针对校验和进行加密,此时就得到了证书的签名. (市面上的公证机构一共也没多少.这些公证机构持有自己的私钥,对应的公钥都包含在常见的系统中,windows里面就内置了大量的公钥,如果没有,也可以额外安装).

此处所谓的签名本质上就是经过加密的校验和!!

当客户端获取到这个证书之后,会对证书进行校验(防止证书是伪造的).

1.判定证书的有效期是否过期.

2.判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)

3.把证书中其它的字段通过一系列算法(CRC,MD5等),得到一个较短的字符串=>校验和

如果两份数据的内容一样,此时,校验和,就一定是相同的.

如果校验和不同,两份数据的内容则一定不同.(逆否命题)

中间人有没有可能篡改该证书?

中间人篡改了该证书的明文.

由于他没有CA机构的证明,所以无法hash之后用私钥加密形成签名,那么也就没法对篡改后的证书形成匹配的签名.

如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传递信息,防止把信息泄露给中间人. 

中间人整个掉包证书?

因为中间人没有CA私钥,所以无法制作假的证书.

所以中间人只能向CA机构申请真的证书,然后用自己申请的信息进行掉包.

这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来.

永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的. 

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

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

相关文章

【word技巧】word文档如何设置限制编辑

Word文档中为了提高办公效率以及文档安全,我们可以考虑为word文档设置一个限制编辑起到保护文档的作用。今天介绍word文档设置限制编辑的方法。 打开word文档之后,点击功能栏中的【审阅】功能,选择【限制编辑】功能 这是我们勾选右边弹框中的…

.netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项

1、SqlSugarCore 相关 1.1 主项目添加数据&#xff0c;否则会报数据库连接错误&#xff1a; <InvariantGlobalization>false</InvariantGlobalization> <PropertyGroup><TargetFramework>net8.0</TargetFramework><Nullable>enable</…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

Python Web开发记录 Day1:HTML

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、HTML1、前端引入和HTML标签①前端引入②浏览…

ClickHouse 指南(三)最佳实践 -- 稀疏主索引

在ClickHouse主索引的实用介绍 ClickHouse release 24.1, 2024-01-30 1、简介 在本指南中&#xff0c;我们将深入研究ClickHouse索引。我们将详细说明和讨论: ClickHouse中的索引与传统的关系数据库管理系统有何不同ClickHouse是如何构建和使用表的稀疏主索引的什么是在Clic…

linux上安装bluesky的步骤

1、设备上安装的操作系统如下&#xff1a; orangepiorangepi5b:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy 2、在用户家目录下创建一个目录miniconda3目录&a…

自动化操作读写Excel —— xlrd 和 xlwt 模块参数说明与代码实战【第95篇—自动化操作读写Excel 】

自动化操作读写Excel —— xlrd 和 xlwt 模块参数说明与代码实战 在日常工作中&#xff0c;Excel表格是不可或缺的数据处理工具。为了提高工作效率&#xff0c;Python中的xlrd和xlwt模块为我们提供了强大的功能&#xff0c;使得自动化操作Excel变得更加简便。本文将介绍xlrd和…

CentOS7 安装SSH

说实话&#xff0c;感觉CentOS有点难用。初始配置不是很友好&#xff0c;连自动获取IP地址都是关着的。当然&#xff0c;我这里本地用的是虚拟机。 开启获取IP 首先是获取IP地址&#xff0c;这是一些的起点。 首先使用ip addr 看看网卡地址和名称。我这边是ens33。然后打开自…

浅析SpringBoot框架常见未授权访问漏洞

文章目录 前言Swagger未授权访问RESTful API 设计风格swagger-ui 未授权访问swagger 接口批量探测 Springboot Actuator未授权访问数据利用未授权访问防御手段漏洞自动化检测工具 CVE-2022-22947 RCE漏洞原理分析与复现漏洞自动化利用工具 其他常见未授权访问Druid未授权访问漏…

Ps:原色通道直方图(CMYK)

在 CMYK 颜色模式下&#xff0c;Photoshop 的“通道”面板中有青色、洋红、黄色及黑色四个原色通道。 与 RGB 颜色模式基于光的加法混合不同&#xff0c;CMYK 颜色模式基于颜料的减法混合&#xff0c;更适合反映实际印刷中油墨的使用情况。 默认情况下&#xff0c;CMYK 原色通道…

【扩散模型】【网络结构探索】神经网络扩散:Neural Network Diffusion(论文解读)

项目地址&#xff1a;https://github.com/NUS-HPC-AI-Lab/Neural-Network-Diffusion 文章目录 摘要一、前言二、Nerual Network Diffusion &#xff08;神经网络扩散&#xff09;2.1扩散模型&#xff08;预备知识&#xff09;2.2 总览2.3 参数自动编码器2.4 参数生成 三、实验3…

多输入时序预测|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 灰狼优化算法&#xff1a; 卷积神经网络-长短期记忆网络&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容…

v-rep插件

v-rep官网插件汉化教程 官网教程 插件是什么 插件本质上就是遵循一定规范的API编写出来的程序&#xff0c;在v-rep中最终需要编译为动态库。 linux下是libsimXXXX.so&#xff1b; 其中XXXX是插件的名称。 请至少使用4个字符&#xff0c;并且不要使用下划线&#xff0c;因为…

【MySQL】数据类型(常见类型)-- 详解

一、数据类型分类 二、数值类型 1、tinyint 类型 在 MySQL 中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 有符号&#xff1a; 插入数据越界测试&#xff1a; 在 MySQL 表中建立属性列时&#xff0c;我们可以发现列名称在前&#xff0c;类型在…

互联网加竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

IO进程线程复习

标准IO&#xff1a; 1.打开文件 #include<myhead.h>int main(int argc, const char *argv[]) {//定义文件指针FILE *fpNULL;//以只读的形式打开文件//fpfopen("./text.txt","r");//以只写的形式打开文件fpfopen("./time.c","w"…

蓝桥杯:真题讲解2(C++版)附带解析

星系炸弹 来自&#xff1a;2015年六届省赛大学B组真题&#xff08;共6道题) 分析&#xff1a;这题涉及到平年和闰年的知识&#xff0c;如果我们要解这题&#xff0c;首先要知道每月有多少天&#xff0c;其实也就是看2月份的天数&#xff0c;其它月份的天数都是一样的&#xff…

飞行机器人专栏(十三)-- 智能优化算法之粒子群优化算法与多目标优化

一、理论基础 1.1 引言 粒子群优化算法&#xff08;Particle Swarm Optimization, PSO&#xff09;自1995年由Eberhart和Kennedy提出以来&#xff0c;已经成为解决优化问题的一种有效且广泛应用的方法。作为一种进化计算技术&#xff0c;PSO受到社会行为模式&#xff0c;特别是…

金南瓜SECS/GEM如何添加工程?

公开资料皆为是2、3年前版本 编译SecsEquip.dll依赖库 ① 打开示例程序中的SecsEquip项目 ② 选中SecsEquip工程&#xff0c;右键选择属性 如果没有“解决方案资源管理器”页面&#xff0c;可以从菜单的“视图”->“解决方案资源管理器”打开 ③ 选择跟设备相同的NET版本…

2月24日(周六)比赛前瞻:曼联 VS 富勒姆、拜仁 VS 莱比锡

大家好&#xff0c;博主将持续更新胜负14场前瞻&#xff0c;此处每日赛事间歇更新&#xff0c;胃信号每日更新。 精选赛事&#xff1a;曼联 VS 富勒姆 曼联近期状态显著提升&#xff0c;上一轮联赛客场2-1战胜卢顿&#xff0c;连续7场正赛取得6胜1平的成绩&#xff0c;保持不败…