认识HTTPS以及了解HTTPS的加密过程

news/2024/4/24 18:24:15/

目录

简单认识HTTPS:

运营商劫持: 

加密的理解: 

HTTPS的工作过程: 

对称加密: 

非对称加密: 

中间人攻击

证书 


简单认识HTTPS:

HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层。加密层之前叫做SSL,现在叫TLS了,所以也叫SSL/TLS协议。

我们知道HTTP是按照文本的明文方式进行传输的,这就使得传输过程中容易出现被篡改的情况。提到这些我们就不得不说一下“运营商劫持”。

运营商劫持: 

运营商劫持的事情想必各位应该都遇到过,比如你想要下载一个qq音乐,正常情况下点击下载后会直接下载qq音乐,而有些情况会出现点击下载后给你下载了一个360手机助手,这就是典型的运营商劫持事件。那为什么会出现运营商劫持?为了钱!!!我们通过网络传输的数据包会经经过运营商的网络设备(如路由器,交换机等等),那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。点击下载本质上就是向服务器发送一个http请求,然后从服务器获得的http响应当中包含了下载的链接,然而运营商劫持之后,就会把给你的响应中的下载链接更换为360手机助手了。

当然,除了运营商之外也会有黑客利用相同的手段来窃取用户的隐私信息和篡改信息来谋取利益。我们都知道在互联网上进行明文传输是非常危险的,试想一下登录支付宝的时候被黑客获取到余额甚至密码有多可怕...

所以HTTPS就是在HTTP的基础上进行了加密,通过加密来进一步保障用户的信息安全。那么具体是怎么加密的呢? 

加密的理解: 

简单来说加密就是把要传输的明文,也就是要传输的信息,通过一些手段进行变换生成密文。  

解密就是把加密过的密文经过一系列的变换还原成明文的过程。

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

举个简单的例子:比如我们经常在电视中看到的电报,当A给B发送电报的时候,为了防止电报被直接截取并破译,就会进行一个加密的操作,即使被截获了,敌人也不能在短时间内破译,但是对于AB双方来说,他们之间有一个约定,别人是不知道的,所以B得到加密的电报的时候就可以直接还原成明文了。

在这其中:

密文:发送的电报

密钥:约定

明文:电报本身要传递的信息

HTTPS的工作过程: 

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

对称加密: 

对于对称加密就是通过同一个密钥,可以把明文加密成密文,也可以把密文还原的明文。

举个例子:我们用按位异或充当一个密钥,假设明文a=1234,密钥key=8888,那么加密后的密文b=a^key=9834。针对b再次进行使用按位异或得到明文为1234。对于字符串来说也是同理,每个字符都可以表示成一个数字。这里只是简单举个例子,HTTPS当中并不是使用按位异或。

 如图:

在这个过程当中客户端发送的是通过密钥加密过的密文,即便黑客截取到了密文,不知道密钥也是无法解密的。尽管如此,我们需要注意的是,这是一个客户端的情况,如果是多个客户端呢?这个时候服务器就需要知道每个对应客户端的密钥是什么了,也就是说服务器需要记录每个客户端的密钥,不仅如此,也想要保证客户端和服务器之间能够传递密钥。但是只要就又会引出一些安全问题:

比如我们在在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥。但是这样的话黑客也就可以获取到密钥了!!!



 

如果我们直接这样传输,黑客就轻松的获得了密钥,就变得更危险了,所以我们需要对密钥的内容也进行加密!这样的话我们就需要对密钥再加一个密钥,这就出现了一个无限循环的套娃问题,就行不通了。

所以我们可以考虑使用非对称加密!  

非对称加密: 

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

公钥和私钥是配对的 。最大的缺点就是 运算速度非常慢 ,比对称加密要慢很多 ;

通过公钥对明文加密, 变成密文,通过私钥对密文解密,变成明文。

也可以反着用:
通过私钥对明文加密, 变成密文
通过公钥对密文解密, 变成明文

这里举个例子: 

A 要给 B 一些重要的文件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:
B 说: 我桌子上有个盒子, 然后我给你一把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件。在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥。公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有。持有私钥的人才能解密。

对于非对称加密,服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥,此时客户端的公钥从服务器拿,黑客也会知道公钥,但是黑客不知道私钥,私钥是服务器自己的,别人没法知道。

客户端使用公钥,对对称密钥进行加密,传输给服务器,然后服务器拿着自己的私钥来解密获得对称密钥,此时客户端服务器就可以使用这个对称密钥进行后续的传输了。

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

同时非对称密钥也不是绝对安全的,比如出现中间人攻击的情况。

中间人攻击

中间人攻击就类似于《毒战》中孙红雷扮演的角色,属于卧底。比如客户端向服务器发出请求,询问公钥,同时黑客在中间截获,向服务器也发出请求获取到服务器生成的非对称密钥中的公钥pub1,于是黑客将公钥告诉客户端公钥是pub2(公钥是黑客生成的非对称密钥中的),之后客户端生成对称密钥key,同时使用使用pub2对对称密钥key进行加密,准备将对称密钥发送给服务器,但由于使用的是pub2加密的key,所以黑客有相应的私钥pri2,可以进行解密,同时把对称密钥通过获取到的pub1公钥发送给服务器,这样黑客就完成了信息的获取。

如图所示:

那么怎么知道公钥是黑客的还是服务器的?(解决中间人攻击的关键)

证书 

证书本质上是引入第三方的公证机构。

服务器(网站)在设立的时候就需要去专门的机构进行认证,申请证书,审核通过会颁发证书。同时服务器生成的公钥也包含在证书中。(类似你去公安局办个身份证,身份证包含了你的各种信息) 

有证书之后,客户端向服务器请求公钥的时候,就不止是请求一个公钥了,是要把整个证书请求过来,当客户端拿到证书之后就可以对证书进行校验(看看证书是不是假的,是不是被改的,是不是无效的等等),如果发现证书无效,浏览器就会弹框报警。

证书中的签名是一个被加密的字符串,客户端可以通过认证机构提供的公钥进行解密,解密之后得到一个hash1值,然后客户端在通过同样的方法对其他字段算一次hash值得到hash2,看看hash1(从签名中接出来的)和hash2(客户端自己算的)是不是相同,相同说明有效,否则无效。同时黑客是无法进行更改证书的,比如把公钥换了,这样hash1和hash2就对不上了,就认为是无效的。而且黑客也无法重新生成签名,因为黑客不知道认证机构的私钥。

 

 


http://www.ppmy.cn/news/46502.html

相关文章

ESP32设备驱动-VEML6040颜色传感器驱动

VEML6040颜色传感器驱动 文章目录 VEML6040颜色传感器驱动1、VEML6040介绍2、硬件准备3、软件准备4、驱动实现1、VEML6040介绍 VEML6040 颜色传感器可感应红光、绿光、蓝光和白光,并使用 CMOS 工艺将光电二极管、放大器和模拟/数字电路集成到单个芯片中。 通过应用颜色传感器…

从功能到外企测开,工作1年半拿下年薪30万的测开 offer,未来可期

说一下我的大致情况,女,2018年毕业于末流211计算机本科。后来待业两年,完全没有从事互联网方面的工作。去年来到北京,在小公司做了一年多功能测试。今年11月底跳槽到外企,开始了我钱多事少离家近,每周965的…

阿里云服务器安装宝塔面板搭建网站全流程(一步步详解)

阿里云服务器安装宝塔面板教程,云服务器吧以阿里云Linux系统云服务器安装宝塔Linux面板为例,先配置云服务器安全组开放宝塔所需端口8888、888、80、443、20和21端口,然后执行安装宝塔面板命令脚本,最后登录宝塔后台安装LNMP&#…

继续学习Easyx

画圆角矩形函数:roundrect,前四个参数是和矩形一样的,表示先画一个矩形,然后就是要画它的圆角了,要怎么画它的圆角?这里使用四个一样的椭圆来将它的四个角画出来,而在这个里面的椭圆不再需要四个…

Java基础——IO流+字节/字符流使用

IO流 (1)IO流的概述: IO流也称为输入,输出流,就是用来读写数据的。I表示input,是数据从硬盘文件读入到内存的过程,称之输入,负责读。O表示output,是内存程序的数据从内…

【DES详解】(一)处理input block(64 bits)

一、DES 加密算法总览 0-1、初识置换 IP(Initial Permutation) 输入:明文(64 bits) 过程:初识置换 输出:处理后的明文permuted input(64 bits) 首先,对需要解…

扫清盲点:带你学习 树状数组 这种数据结构

什么是树状数组 树状数组是一种用于维护数列前缀和的数据结构,它可以在 O(logn) 的时间复杂度内修改单个元素的值,以及查询某个区间的元素和。 树状数组的特点是什么? 树状数组的特点其实就是,在单点修改 ,和区间查询…

Java 线程

线程:线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程。线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源。它与父进程的其他线程共享该进程的所有资源。 …

JSON学习|一篇就够了|(超详细|保姆级)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

BZOJ 2940 条纹

题目大意 条纹游戏是一个双人的游戏。所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色、绿色和蓝色。红色条纹的尺寸是 c 1 c\times 1 c1,绿色条纹的尺寸是 z 1 z\times 1 z1,蓝色条纹的尺寸是 n 1 n\times 1 n1。…

Qt使用std::thread更新QPlainTextEdit内容

Qt使用std::thread更新QPlainTextEdit内容 一、演示二、部分代码讲解1. 启动函数2. 线程函数 三、代码片段1. 主函数2. MainWindow.h3. MainWindow.cpp 源文件 四、TCP相关解释 导言:记录Qt使用std::thread更新QPlainTextEdit内容 在写一个简易的服务端发送软件中&a…

全链路压测时动态路由数据源MySQL、MongoDB、Redis

目录 一、全链路压测 二、动态路由Mysql 1. 参数配置application-localDynamic.yml 2. 加载配置参数DynamicDataSourceProperties.java 3. 动态数据源DynamicDataSource.java 4. 动态数据源供应DynamicDataSourceProvider.java 5. 动态数据源bean 6. 动态数据源上下文D…

docker上面安装mysql

一、docker安装mysql 新建配置 /data/mysql3306/conf/my.cnf(新建logs,data,conf/my.cnf 后面要用) 详情: [mysql] #设置mysql客户端默认字符集 default-character-setUTF8MB4[mysqld] #设置3306端口 port3306#允许最大连接数 max_connections200#允许连接失败的次…

Diffusion模型系列文章

DDPM 论文 扩散模型包括两个过程:前向过程(forward process)和反向过程(reverse process),其中前向过程又称为扩散过程(diffusion process),如下图所示,从 …

Echarts总结

Echarts简介 echarts,是一个使用js实现得开源可视化库,可以流畅的运行在pc和移动设备上,兼容当前绝大部分浏览器(IE9/10/11, Chrome,Firefox,Safari等),底层依赖矢量图形库ZRender,提供直观,交…

面试官:自动化测试都没弄明白,你怎么敢来面试的?

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

【深度学习】windows10环境配置详细教程

【深度学习】windows10环境配置详细教程 文章目录 【深度学习】windows10环境配置详细教程Anaconda31.安装Anaconda32.卸载Anaconda33.修改Anaconda3安装虚拟环境的默认位置 安装cuda/cudnn1.安装合适的CUDA2.安装对应的CUDNN3.卸载CUDA/CUDNN conda虚拟环境独立安装cuda/cudnn…

多线程并发编程笔记07(小滴课堂)容器

同步容器 我们写这样一段代码。 我们想对vector容器在遍历时,去根据条件删除: 会出现异常。 那正确的方式应该如何去写呢,这里就涉及到了迭代器: 单线程中我们是这么做的。 那么多线程中呢? 有的时候它会报这个错误…

通达信欧奈尔RPS指标公式编写和设置方法(完全版)

通达信欧奈尔RPS指标公式的编写和设置较为复杂,对于初学者来说可能具有一定挑战性。在编写口袋支点公式时,需要使用RPS指标公式作为基础条件,因此有必要先了解其编写和设置方法。 一、上市一年以上选股 首先选出上市一年以上的股票&#xff…

代码随想录_二叉树_leetcode700、98

leetcode700.二叉搜索树中的搜索 700. 二叉搜索树中的搜索 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。 示例 1: 输入&…