【Linux后端服务器开发】HTTPS协议

目录

一、加密算法

二、中间人攻击

三、CA认证


一、加密算法

HTTPS协议是什么?HTTPS协议也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层。

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

什么是加密?加密就是把明文(需要传输的内容)进行一系列变换,生成密文。解密就是加密的逆过程,将密文还原成明文。

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

对称加密

  • 采用单密钥的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称作对称加密,也称单密钥加密
  • 特点:算法公开、计算量小、安全性低、加密速度快

非对称加密

  • 需要两个密钥来进行加密和解密,这两个密钥是公钥(public key)和私钥(private key)
  • 通过公钥对明文加密,变成密文;通过私钥对密文解密,得到明文,公钥和私钥可以反着用
  • 特点:算法复杂、安全性较高、加密速度较低

对称加密&&非对称加密

由于对称加密存在密钥易泄漏问题,非对称加密存在加密效率低的问题,我们可以使用非对称加密完成服务器公钥的传递,通过服务器的公钥形成密钥再进行对称加密传输数据。

表面上看对称加密&&非对称加密的组合使用解决了安全性和效率性的问题,但是依然存在被中间人攻击的风险。

二、中间人攻击

中间人攻击 (Man-in-the-MiddleAttack),简称MITM攻击

  1. 服务器有非对称密钥的公钥S、私钥S'
  2. 中间人有非对称密钥的公钥M、私钥M'
  3. 客户端向服务器发送公钥请求,服务器明文传送公钥给客户端
  4. 中间人劫持数据报文,提取S并保存好,然后将被劫持报文中的公钥S替换成自己的公钥M,并将伪造报文发送客户端
  5. 客户端收到报文,提取公钥M(客户端不知道服务器的公钥S已经被换过了),自己形成对称密钥C,用公钥M加密得到密文X,形成报文发送给服务器
  6. 中间人再次劫持后得到密文X,直接用自己的私钥M'进行解密,得到密钥C,再用自己之前保存的服务器公钥S加密C,得到密文Y,再将报文推送给服务器
  7. 服务器拿到密文Y,用私钥S'解密,得到通信密钥C
  8. 双方开始采用对称密钥C进行对称加密通信,但是一切都在中间人的掌握中,劫持数据、进行切图或者篡改数据......

三、CA认证

服务端在使用HTTPS之前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性

CA证书可以理解为一个结构化的字符串,里面包含的信息是:证书发布机构、证书有效期、公钥、证书所有者、签名......

当服务端申请CA证书的时候,CA机构会对服务端进行审核,并专门为该网站形成数字签名,过程如下:

  1. CA机构拥有非对称加密的公钥A和私钥A'
  2. CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
  3. CA机构最后对数据摘要用私钥A'加密,得到数字签名S

服务端申请的证书明文和数字签名S共同组成了数字证书,这样的一份数字证书就可以发送给服务端了

数据摘要&&数据指纹

  • 数字指纹(数据摘要),其基本原理是利用单向散列Hash函数对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
  • 特点:和加密算法的区别是摘要严格意义上不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比

数字签名

摘要经过加密,就得到数字签名,签名的形成是基于非对称加密算法的

数字签名的本质是为了防篡改,保证服务器公钥的合法性

非对称加密&&对称加密&&证书认证

在客户端和服务器刚建立连接的时候,服务器给客户端返回一个证书,证书包含了之前服务器的公钥,也包含了网站的身份信息

 

客户端获取到这个证书的时候,会对证书进行校验:

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置受信任的证书发布机构)
  • 验证证书是否被篡改(从系统中拿到该证书发布机构的公钥,对签名解密,得到一个hash值,称为数字摘要,设为hash1,然后计算整个证书明文信息的hash值,设为hash2,对比hash1和hash2是否相等,如果相等则证明证书是没有被篡改过的) 

HTTPS工作过程中涉及到的密钥有三组:

  • 第一组(非对称加密):用于校验证书是否合法
  • 第二组(非对称加密):用于协商生成对称加密的密钥
  • 第三组(对称加密):客户端和服务器的数据通信

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

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

相关文章

vray GPU渲染如何设置?最适合 VRay 渲染的 GPU 是什么?

Chaos 提供的 Vray GPU是一个独立的渲染引擎,提供 GPU 硬件加速。它还与 CPU(处理器)配合使用,并利用 CPU 和 GPU 硬件进行无缝混合渲染。 GPU 渲染使 Vray GPU 渲染引擎能够在系统的 GPU 而不是 CPU 上执行光线跟踪计算。由于 G…

STM32MP157驱动开发——按键驱动(阻塞与非阻塞)

“阻塞与非阻塞 ”机制: 阻塞: 使用 休眠唤醒机制,read函数会休眠,是阻塞的使用 poll 时,如果传入的超时时间不为 0,表示 read函数会休眠,这种访问方法也是阻塞的。 非阻塞 使用 poll 时&am…

解析数据可视化工具:如何选择最合适的软件

在当今信息爆炸的时代,数据已成为各行各业的重要资源。为了更好地理解和分析数据,数据可视化成为一种必不可少的工具。市面上数据可视化工具不说上千也有上百,什么帆软、powerbi、把阿里datav,腾讯云图、山海鲸可视化等等等等&…

N位分频器的实现

N位分频器的实现 一、 目的 使用verilog实现n位的分频器,可以是偶数,也可以是奇数 二、 原理 FPGA中n位分频器的工作原理可以简要概括为: 分频器的作用是将输入时钟频率分频,输出低于输入时钟频率的时钟信号。n位分频器可以将输入时钟频率分频2^n倍…

redis中缓存雪崩,缓存穿透,缓存击穿的原因以及解决方案

一 redis的缓存雪崩 1.1 缓存雪崩 在redis中,新,旧数据交替时候,旧数据进行了删除,新数据没有更新过来,造成在高并发环境下,大量请求查询redis没有数据,直接查询mysql,造成mysql的…

算法竞赛入门【码蹄集新手村600题】(MT1040-1060)

算法竞赛入门【码蹄集新手村600题】(MT1040-1060) 目录MT1041 求圆面积和周长MT1042 求矩形的面积和周长MT1043 椭圆计算MT1044 三角形面积MT1045 平行四边形MT1046 菱形MT1047 梯形MT1048 扇形面积MT1049 三角形坐标MT1050 空间三角形MT1051 四边形坐标MT1052 直角…

promise的链式调用和promise的嵌套的实现

前言 话不多说 直接看下面 Promise的链式调用(Chaining)和Promise的嵌套(Nesting)是常见的Promise使用场景,下面我将为您展示它们的实现方法。 链式调用 在链式调用中,我们可以通过多次调用then方法来串联…

LabVIEW使用支持向量机对脑磁共振成像进行图像分类

LabVIEW使用支持向量机对脑磁共振成像进行图像分类 医学成像是用于创建人体解剖学图像以进行临床研究、诊断和治疗的技术和过程。它现在是医疗技术发展最快的领域之一。通常用于获得医学图像的方式是X射线,计算机断层扫描(CT),磁…

Python基于PyTorch实现循环神经网络回归模型(LSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 LSTM网络是目前更加通用的循环神经网络结构,全称为Long Short-Term Memory,翻…

使用API获取商品详情的方法和步骤详解

随着电子商务行业的快速发展,越来越多的企业开始关注如何通过API获取商品详情信息。API(Application Programming Interface)是一种允许不同应用程序之间相互通信和交换数据的技术接口。在这篇文章中,我们将详细介绍使用API获取商…

MongoDB 基础学习记录

MongoDB 基础 mongoDB 是由 C语言编写,基于分布式文件存储的开源数据库系统,是一个 nosql 数据库. 在高负载的情况下,添加更多的节点,保证服务器性能,MongoDB 旨在为 web 引用提供可扩展的高性能存储解决方案,将数据存储为给文档, 数据结构由键值(key,value)对组成,MongoDB 文…

全志F1C200S嵌入式驱动开发(spi-nor驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s本身也支持spi-nor flash。当然,不管是norflash,还是nandflash,都是为了能够让程序脱离sd卡,直接依靠板子上面的flash,就可以完成正常地加载和运行工作。tf…

flutter开发实战-jsontodart及 生成Dart Model类

flutter开发实战-jsontodart及 生成Dart Model类。 在开发中,经常遇到请求的数据Json需要转换成model类。这里记录一下Jsontodart生成Dart Model类的方案。 一、JSON生成Dart Model类 在开发中经常用到将json转成map或者list。通过json.decode() 可以方便 JSON 字…

华为数通HCIP-BGP基础

AS(自治系统/路由域) 定义:运行相同路由协议,具有相同管理规则的区域(一般为一个企业网); 指具有相同路由管理策略的区域合集,一般为一个园区网; 标识:…

制作一个简易的计算器app

1、Ui开发 笔者的Ui制作的制作的比较麻烦仅供参考,在这里使用了多个LinearLayout对屏幕进行了划分。不建议大家这样做最好使用GridLayout会更加快捷简单 笔者大致划分是这样的: 使用了四个大框,在第四个大框里面有多个小框 最终界面如下&am…

机器学习 day31(baseline)

语音识别的Jtrain、Jcv和人工误差 对于逻辑回归问题,Jtrain和Jcv可以用分类错误的比例,这一方式来代替单单只看Jtrain,不好区分是否高偏差。可以再计算人类识别误差,即人工误差,作为基准线Jtrain与baseline对比只高了…

每日一题(注意string里是char)-771. 宝石与石头

题目 771. 宝石与石头 题解思路 题目本身没啥难度,两个for循环就可以解决但是如果使用set可以将时间复杂度优化到o(n) 注:之前python写多了,需要注意c中string类中是char 代码 C class Solution { public:int numJewelsInStones(string…

深入探究 SOCKS5 代理与 IP 代理应用

一、SOCKS5 协议简介及工作原理 SOCKS5(Socket Secure 5)是 SOCKS 协议的最新版本,它允许客户端向代理服务器发送请求,并将数据传输到目标服务器。相较于 SOCKS4,SOCKS5 提供更强大的身份验证和数据加密功能&#xff0…

鸿合一体机怎么系统还原

系统还原方法:先用牙签按住电脑还原按钮不松,然后按一下电源按钮开机,直到电脑进入系统还原画面,就可以松开还原按钮了,系统还原完成后会自动重启,重启完成就可以用了。

YOLOv7改进:CVPR 2023 | SCConv: 即插即用的空间和通道重建卷积

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:添加 SCConv,经过测试,有效涨点。…