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

news2024/10/10 10:31:51

目录

一、加密算法

二、中间人攻击

三、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.coloradmin.cn/o/790333.html

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

相关文章

Java使用FFmpeg实现mp4转m3u8

Java使用FFmpeg实现mp4转m3u8 前言FFmpegM3U8 一、需求及思路分析二、安装FFmpeg1.windows下安装FFmpeg2.linux下安装FFmpegUbuntuCentOS 三、代码实现1.引入依赖2.修改配置文件3.工具类4.Controlle调用5.Url转换MultipartFile的工具类 四、播放测试1.html2.nginx配置3.效果展示…

QT读写ini文件

QT读写ini文件 源代码文件结构mysql.hmysql.cppmain.cpp my.ini文件截图运行截图QSettings 最开始的需求是使用qt读取不同电脑上的MySQL的my.ini文件实现在不同电脑上也可以成功登录数据库,不用担心密码和用户名不同的问题 到之后发现其实并没有什么用,因…

一文搞定Java IO流,输入流、输出流、字符流、缓冲流,附详细代码示例

目录 一、InputStream1、FileInputStream的代码示例2、ByteArrayInputStream的代码示例3、PipedInputStream的代码示例 二、 OutputStream1、FileOutputStream代码示例2、ByteArrayOutputStream代码示例:3、PipedOutputStream代码示例: 三、字符输入流Re…

7.25 作业 QT

手动实现登录框&#xff1a; widget.cpp: #include "widget.h" #include <QMovie> Widget::Widget(QWidget *parent): QWidget(parent) {//设置尺寸this->resize(800,600); //设置宽高//设置固定尺寸this->setFixedSize(800,600);//窗口标题操作qDebu…

C数据结构与算法——顺序栈 应用(C语言纯享版 迷宫)

实验任务 (1) 掌握顺序栈及其C语言的表示&#xff1b; (2) 掌握入栈、出栈等基本算法的实现&#xff1b; (3) 掌握顺序栈的基本应用&#xff08;求解迷宫通路&#xff09;。 实验内容 使用C语言实现顺序栈的类型定义与算法函数&#xff1b;编写main()函数并根据需要修改、补…

❓“如何创业?互联网创业又该如何入手?

&#x1f31f;5大创业建议&#xff0c;让你轻松入门&#xff01; 作为一名互联网创业者&#xff0c;我想分享一下我的创业经验。下面是我的五个建议&#xff0c;希望对你有所帮助&#xff01; &#x1f31f;了解市场需求 在创业之前&#xff0c;了解市场需求非常重要。你需要研…

【Rust日报】2023-07-24 使用 Rust 重写的InfluxDB 3.0

使用 Rust 重写的InfluxDB 3.0 InfluxDB 是一个开源的、分布式的时序数据库&#xff0c;用于存储和分析时间序列数据, 于 2013 年由 Brian Bondy 和 Nicholas Zakhariev 创立。 InfluxDB 最初是用 Go 语言编写的。 2018 年&#xff0c;InfluxData 决定将 InfluxDB 重写为 Rust …

kotlin 编写一个简单的天气预报app(一)

使用Android Studio开发天气预报APP 今天我来分享一下如何使用Android Studio开发一个天气预报APP。在文中&#xff0c;我们将使用第三方接口获取实时天气数据&#xff0c;并显示在APP界面上。 步骤一&#xff1a;创建新项目 首先&#xff0c;打开Android Studio并创建一个新…

Flutter 最佳实践和编码准则

Flutter 最佳实践和编码准则 视频 前言 最佳实践是一套既定的准则&#xff0c;可以提高代码质量、可读性和可靠性。它们确保遵循行业标准&#xff0c;鼓励一致性&#xff0c;并促进开发人员之间的合作。通过遵循最佳实践&#xff0c;代码变得更容易理解、修改和调试&#xff…

【如何训练一个中译英翻译器】LSTM机器翻译seq2seq字符编码(一)

系列文章 【如何训练一个中译英翻译器】LSTM机器翻译seq2seq字符编码&#xff08;一&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型训练与保存&#xff08;二&#xff09; 【如何训练一个中译英翻译器】LSTM机器翻译模型部署&#xff08;三&#xff09; 【如何训…

新能源电动车充电桩控制主板的技术

新能源电动车充电桩控制主板的技术 你是否曾经遇到过电动车行驶到一半没电的情况?这不仅尴尬&#xff0c;还可能对你的生活造成困扰。然而&#xff0c;随着充电桩主板技术的出现&#xff0c;这个问题得到了有效的解决。那么&#xff0c;这个技术到底包括哪些方面呢?让我们一起…

IDEA代码自动格式化工具

1.自动import 在IDEA中&#xff0c;打开 IDEA 的设置&#xff0c;找到 Editor -> General -> Auto Import。勾选上 Add unambiguous imports on the flyOptimize imports on the fly (for current project) 2.gitee 提交格式化 设置方法如下: 1.打开设置 2.找到版本…

如何写好测试报告?

目录 一、目标 二、模板的使用 三、修订记录 四、内容应该清晰易懂&#xff0c;简明扼要 五、绝不放过一个错字 六、遗留问题单 七、产出成果恰当呈现 一、目标 本文介绍测试人员编写软件测试报告常见的疏漏&#xff0c;以便大家避免&#xff0c;更好让测试成果呈现给客…

Kotlin 协程 CoroutineScope

协程定义&#xff1a; 19年官方是这样说的&#xff1a;协程是轻量级的线程&#xff0c;协程就是 Kotlin 提供的一套线程封装的 API&#xff1b; 现在官方是这样说的&#xff1a;协程是一种并发设计模式&#xff1b; 协程作用&#xff1a; 1.处理耗时任务&#xff1b; 2.保…

【雕爷学编程】Arduino动手做(172)---WeMos D1开发板模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

RL 实践(4)—— 二维滚球环境【DQN Double DQN Dueling DQN】

本文介绍如何用 DQN 及它的两个改进 Double DQN & Dueling DQN 解二维滚球问题&#xff0c;这个环境可以看做 gym Maze2d 的简单版本参考&#xff1a;《动手学强化学习》完整代码下载&#xff1a;5_[Gym Custom] RollingBall (DQN and Double DQN and Dueling DQN) 文章目录…

智能喷涂机器人的制作分享

作者&#xff1a;朱家谊、吾丽江、管孝天 单位&#xff1a;天津工业大学 指导老师&#xff1a;李鹏 1. 概念说明 智能喷涂机器人是一种具有自主感知、决策和执行能力的机器人&#xff0c;专门用于自动化喷涂任务&#xff0c;它可以应用于各种领域&#xff0c;如汽车制造、建…

【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败

在jupyter notebook中运行Python代码&#xff0c;明明已经安装了第三方库&#xff0c;还是提示导入失败。 以导入pandas库为例&#xff0c;其他库同理&#xff1a; 报错代码&#xff1a; import pandas报错原因&#xff1a; 电脑上存在多个python运行环境&#xff08;比如&a…

JavaScript学习 -- Hex编码

Hex编码是一种十六进制数字的表示方式。在JavaScript中&#xff0c;我们可以使用Hex编码来表示数字、颜色和其他二进制数据&#xff0c;并将其用于各种场景&#xff0c;例如Web开发、图像处理和加密解密等。在本篇博客中&#xff0c;我们将介绍Hex编码的基础知识和相关技术&…

Xilinx FPGA平台GTX简易使用教程(汇总篇)

GTX简易使用教程&#xff0c;先“知其然”&#xff0c;慢慢再研究“所以然”。 目录 一、GTX必备基础知识 二、时钟篇 三、复位与初始化 四、GTX IP核配置介绍 五、GTX收发测试 六、后记 一、GTX必备基础知识 虽说搬砖只需要会用IP就行&#xff0c;但是为了把砖搬好&a…