https的加密流程

文章目录

  • 一、两种加密方式
  • 二、https的加密流程
    • 2.1对称加密
    • 2.2非对称加密
    • 2.3中间人攻击问题
    • 2.4使用证书来校验客户端收到的公钥是否是服务器生成的公钥
      • 2.4.1证书的校验
      • 2.4.2证书的校验所得到的效果

一、两种加密方式

https在http的基础之上引入了加密机制(加密层)。https加密的一系列流程是由SSL(后来改名为了TLS)协议来规定的,SSL(后来改名为了TLS)协议不仅用在https中,也应用在其它很多的场景里。
使用密钥(yue/yao/shi)加密,主要有两种方式:
①对称加密。加密和解密使用的密钥是同一个密钥。相当于明文+密钥=密文,密文+密钥=明文。
②非对称加密。有两个密钥,一个称为公钥一个称为私钥(公钥可以公开,私钥不公开)。相当于明文+公钥=密文,密文+私钥=明文或者明文+私钥=密文,密文+公钥=明文。

二、https的加密流程

https加密的目标是对http的header和body进行加密。

2.1对称加密

客户端使用密钥对数据进行对称加密,服务器拿着同一个密钥对数据进行解密。由于黑客没有密钥,所以黑客无法获取到加密之前的内容。

然而上面的加密流程存在问题:
服务器会给多个客户端提供服务,这多个客户端用的密钥必须是不同的,因为客户端用的密钥都是相同的话那么密钥就扩散得太严重了黑客也容易拿到密钥,如果用服务器来维护多个客户端和多个密钥之间一一对应的关系,那么服务器的开销太大了。所以更推荐的做法是在客户端和服务器建立连接的时候协商好这次传输的密钥是什么(涉及到随机数机制,保证每个客户端生成的密钥都不相同),然后客户端把密钥通过网络传输给服务器。
这时会有问题,因为如果黑客截获到网络传输中的密钥,那么密钥就泄露了,后续的加密流程就毫无意义了。所以要对用于对称加密的密钥(下面简称对称密钥)进行加密,而对对称密钥加密又要在网络上传输一个新的对称密钥,如此往复循环下去,最终还是有对称密钥泄漏的风险,所以仅用对称加密的方式进行加密是行不通的,由此在对称加密的基础上引入非对称加密。

2.2非对称加密

①服务器生成一对公钥和私钥,服务器把公钥返回给客户端,服务器自身把私钥藏好。
②客户端仍然生成对称密钥,使用服务器的公钥对对称密钥进行加密,然后把这个加密后的对称密钥发送给服务器。如果黑客拿到加密后的对称密钥是无法对其进行解密的,因为公钥加密后的对称密钥需要用私钥才能解密,而私钥只有服务器才有。
③加密后的对称密钥到达服务器之后服务器用私钥解密出对称密钥,然后服务器返回一个响应给客户端告诉客户端这次传输确认用的是这个对称密钥(响应用对称密钥进行加密)。
④接下来客户端和服务器就使用这个对称密钥对业务数据进行加密即可。

为什么不全部流程都用非对称加密呢,这样安全性不就更高了吗?因为非对称加密和解密的运算成本很高速度慢,对称加密运算成本低速度快,如果全部流程都使用非对称加密则数据整体的传输效率将会变得很慢。

比较科学的做法是:使用非对称加密加密的是某个关键环节(体积不大的一次性工作,比如加密对称密钥),这时运算成本还是比较低的。后续使用效率更高的对称加密来加密大量的业务数据。

但上述对称加密+非对称加密还存在一个问题,就是中间人攻击问题。

2.3中间人攻击问题

中间人攻击问题产生的原因以及过程:
①客户端向服务器发送询问公钥的请求,服务器收到请求后生成一对公钥1和私钥1并将公钥1返回给客户端。
②返回给客户端的公钥1在网络传输的过程中经过黑客入侵的网络设备,此时黑客截获公钥1并且生成一对公钥2和私钥2,黑客把公钥2返回给客户端。
③客户端以为公钥2是服务器返回的公钥,于是用公钥2对对称密钥进行了加密,并把加密后的对称密钥发送给服务器。
④加密后的对称密钥在网络传输的过程中经过黑客入侵的网络设备,因为这个密文是用公钥2进行加密的,要有私钥2才能对其进行解密,而黑客手中正好有私钥2,所以黑客对密文解密后拿到对称密钥。然后用截获到的公钥1对对称密钥重新进行加密(这样就能瞒天过海地让服务器不会发现黑客的存在了),并发送给服务器。
⑤服务器收到加密的对称密钥后,用私钥1对其进行解密也拿到了对称密钥。然后服务器返回一个响应给客户端告诉客户端这次传输确认用的是这个对称密钥(响应用对称密钥进行加密)。
⑥接下来客户端和服务器就使用这个对称密钥对业务数据进行加密。因为黑客已经拿到了对称密钥,所以对称密钥对业务数据的加密就形同虚设了。

那么如何解决中间人攻击问题呢?出现中间人攻击问题是因为客户端对发过来的公钥没有分辨能力,比如上面例子中客户端无法识别出公钥2是黑客发送过来的而不是服务器发送过来的。
因此要引入第三方公正机构,让公正机构来辨别发过来给客户端的公钥是黑客生成的公钥还是服务器生成的公钥。

2.4使用证书来校验客户端收到的公钥是否是服务器生成的公钥

①网站的开发人员搭建服务器的时候会生成一份公钥和私钥(这里的公钥和私钥只要一份就行,不用像对称密钥那样每个客户端都要有不一样的对称密钥。因为针对每个客户端都要有不同的一份公钥和私钥的话那服务器的压力太大了,服务器针对每个客户端都要生成公钥和私钥并且保存,还要验证是哪个客户端发来的信息并解密等)。
然后服务器向公证机构提出申请(提交申请要有材料比如域名、服务器的公钥、厂商……),公证机构对申请进行审核,审核通过就会给服务器颁发一个证书,服务器会保存好这个证书。证书是一段结构化的数据,这段结构化的数据包括一些重要信息,比如网站域名、服务器的公钥、证书的过期时间、数字签名……
②这时开始时就不是客户端向服务器发送询问公钥的请求了,而是客户端向服务器发送询问服务器证书的请求,然后服务器返回证书给客户端。
③客户端拿到了证书也就拿到了证书中服务器的公钥,客户端会验证这个公钥是否是服务器的公钥,这个验证过程叫证书的校验。

2.4.1证书的校验

①数字签名(被加密后的证书的校验和):证书中有一个数字签名,数字签名是一个被加密后的证书的校验和。公正机构在颁发证书给服务器的时候,会把针对证书中的内容计算出校验和并且对这个校验和进行加密,这个加密后的校验和就是数字签名。
②得到数字签名(被加密后的证书的校验和)的加密过程:数字签名的加密是非对称加密。公证机构会生成一对自己的公钥和私钥,公证机构自己持有私钥,公钥发布给各个客户端设备(公钥会内置到主机的操作系统中),然后公正机构用自己的私钥对证书的校验和进行加密就得到了数字签名。
③客户端收到服务器发来的证书之后,也就拿到了数字签名,然后客户端通过操作系统内置的公正机构的公钥对数字签名进行解密得到证书的校验和。客户端再重新计算发送过来的证书的校验和,和解密出来的校验和进行对比,如果两个校验和一致,就认为证书没有被黑客篡改过,证书的公钥就是服务器生成的公钥而不是黑客生成的公钥。

2.4.2证书的校验所得到的效果

有了证书的校验这一套机制,就可以有效缓解中间人攻击问题了,因为如果黑客篡改了证书中的内容会很容易被发现,而且黑客也无法申请一个证书来替换掉服务器的证书。
①客户端很容易发现黑客篡改了证书中除数字签名之外的内容:当证书到达黑客入侵的网络设备时,如果黑客将证书中的服务器的公钥替换成自己的公钥,客户端在进行证书校验的时候,就会发现校验和不一样,客户端就可以认为证书内容已经被黑客篡改过了,客户端这时往往会弹出一些对话框来警告用户存在安全风险。
2)客户端很容易发现黑客篡改了数字签名:因为得到数字签名是加密后的证书的校验和,加密过程使用的是公证机构的私钥来进行加密。如果黑客截获到证书后计算出证书中除数字签名之外的内容的校验和,然后用自己的私钥对校验和进行加密得到自己的数字签名替换掉证书中的数字签名,这时这个证书发送给客户端的时候客户端就无法使用公证机构的公钥对数字签名进行解密然后拿到证书的校验和了。而操作系统中公证机构的公钥是客户端操作系统内置的,黑客无法将其替换。
3)黑客无法申请一个证书来替换掉服务器的证书:因为申请证书需要提交材料,比如提交的材料中有网站的主域名,公证机构会认证网站的主域名是否是黑客所有,黑客想要说别人的主域名是自己的,这显然是不能通过审核的。

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

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

相关文章

Android数据对象序列化原理与应用

序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中,对象通常是指内存中的数据结构,如数组、列表、字典等。通过序列化,可以将这些对象转换为字节流或文本格式,以便在不同的系统之间进行传输或存…

基于模型预测控制的三相逆变器仿真研究

摘 要 基于模型预测控制的三相逆变器应用广泛,比如电子设备、电力系统、工业等行业,都会运用到基于模型预测控制的三相逆变器系统或工具。更高效率和更高精度的基于模型预测控制的三相逆变器一直是研究的热点。在我们日常生活中,基于模型预测…

SQL IN 运算符

SQL IN 运算符 IN 运算符允许您在 WHERE 子句中指定多个值。 IN 运算符是多个 OR 条件的简写。 SQL IN 语法 SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...); 或者 SELECT column_name(s) FROM table_name WHERE column_name IN (SELE…

docker中安装rabbitMq并配置启动

目录 1. 拉取镜像并安装(此处实例安装的是最新版)2.查看docker中已安装的镜像和版本3.启动RabbitMq4.配置管理端5.安装完成 1. 拉取镜像并安装(此处实例安装的是最新版) docker pull rabbitmq2.查看docker中已安装的镜像和版本 …

uni-app微信小程序打开第三方地图

需求 小程序中有个按钮点击以后会调用手机中第三方地图进行导航。参数 位置信息 经度 与纬度。 实现方法 uni.openLocation({latitude: Number(地址纬度),longitude: Number(地址经度),name: 地址名称,address: 地址详情,success: function (res) {console.log(打开系统位置地…

FPGA与ASIC有什么差异?二者该如何选用?

前言 对于一个数字电路的新手来说,这可能是会经常遇到的一个问题:FPGA和ASIC之间的区别是什么? 接下来本文将尝试讲解 “什么是FPGA?” 和 “什么是ASIC?”,然后讲述一些关于FPGA和ASIC的问题,例如它们之间…

【嵌入式】【GIT】如何迁移老的GIF到新的仓库时使用LFS功能并保持LOG不变

一、正常迁移流程 假设有仓库 ssh://old/buildroot-201902 需要迁移到新的仓库 ssh://old/buildroot-201902时,我们可以使用以下命令来完成: # 下载老的仓库 git clone ssh://old/buildroot-201902 # 向新的仓库上传所有的tags git push ssh://new/buildroot-201902 --tag…

Centos7下生成https自签名证书

1、安装openssl yum install openssl2、生成带密码的私有秘钥文件 openssl genrsa -des3 -out server.key 2048使用带密码的私有秘钥文件时需要输入密码,这里直接输入:123456 3、生成不带密码的私有秘钥文件 openssl rsa -in server.key -out serve…

vscode debug skills

1) VSCode 调试 C/C 代码时,如何显示动态分配的指针数组。 创建一个动态分配的一维数组: int n 10; int *array (int *)malloc(n*sizeof(int)); memset(array, 1, n*sizeof(int)); 如果直接 Debug 时查看 array 指针,并不能看到数组所有的值。 查看…

约会杭州云栖2023:为了无法计算的价值一起努力

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

阿里云CTO周靖人:打造一朵AI时代最开放的云

10月31日,在2023云栖大会上,阿里云CTO周靖人表示,面向智能时代,阿里云将通过从底层算力到AI平台再到模型服务的全栈技术创新,升级云计算体系,打造一朵AI时代最开放的云。在现场,周靖人公布了云计…

1. PPT高效初始化设置

1. PPT高效初始化设置 软件安装:Office 2019 主题和颜色 颜色可以在白天与黑夜切换,护眼 切换成了黑色 撤回次数 撤回次数太少,只有20次怎么办 自动保存 有时忘记保存就突然关闭,很需要一个自动保存功能 图片压缩 图…

信息系统项目管理师教程 第四版【第10章-项目进度管理-思维导图】

信息系统项目管理师教程 第四版【第10章-项目进度管理-思维导图】 课本里章节里所有蓝色字体的思维导图

oracle创建视图 并分配用户

创建视图 create view VI_BR_SURGICAL_INFO(视图名) as select a.BRID,a.BRXM,a.HISSQDH,VISIT_ID,b.SSMC as opm_oprt_name ,b.SSDM as opm_oprt_code, a.MZFF as anst_way,a.MZYS as anstdr_code, a.SSYS as oper_dr_code ,a.OPER_BEGIN as opm_oprt_b…

Ubuntu 中添加新用户并给予 root 权限

在 Ubuntu 中添加新用户并给予 root 权限的步骤如下: 打开终端,以 root 身份登录。sudo su - 使用 adduser 命令添加新用户。 adduser username 为新用户设置密码 passwd username 将新用户添加到 sudo 组。 usermod -aG sudo username…

[计算机提升] Windows所有设置

2.2 系统 主要对桌面显示、系统通知、电源等进行设置。 2.2.1 显示 设置多个显示器 设置更改文本、应用等项目的大小 设置桌面分辨率 2.2.2 通知和操作 修改快速操作 设置通知 2.2.3 电源和睡眠 设置屏幕关闭时间 设置睡眠时间 其它电源设置 2.2.4 存储 查看本地存储情…

Apache Hive

目录​​​​​​​ 数据仓库(DW) SQL语法分类 Hive 和Hadoop之间的关系(底层是Hadoop Hive将SQL转换为MapReduce) 为什么使用Hive 使用Hadoop MapReduce直接处理数据所面临的问题 使用Hive处理数据的好处 对Hive的理解 A…

CentOS、linux安装squid搭建正向代理,window11配置正向代理

1.CentOS安装配置squid 1.1.安装 yum install -y squid1.2.修改配置文件 在配置文件添加以下2行代码 acl localnet src 0.0.0.0/0.0.0.0 # add by lishuoboy http_access allow all # add by lishuoboy1.3.启动squid systemctl restart squid2.win11…

golang的类型断言

前言:原因很简单,写的代码panic了。报错如下。为此专门看下golang的类型断言。 “[PANIC]interface conversion: interface {} is string, not float64”。 1、类型断言(assertion) 所谓“类型断言”即判断一个变量是不是某个类型的实例(简单来讲就是判…

【教程】R语言生物群落(生态)数据统计分析与绘图

查看原文>>>R语言生物群落(生态)数据统计分析与绘图实践 暨融合《R语言基础》、《tidyverse数据清洗》、《多元统计分析》、《随机森林模型》、《回归及混合效应模型》、《结构方程模型》、《统计结果作图》七合一版本方案 R 语言作的开源、自…