linux【网络编程】之HTTPS协议,一文了解HTTPS是保证通信安全的

news2024/12/23 23:13:00

linux【网络编程】之HTTPS协议

  • 一、什么是HTTPS协议
  • 二、加密和解密
    • 2.1 什么是加密解密
    • 2.2 为什么需要加密
    • 2.3 常见的加密方式
      • 2.3.1 对称加密
      • 2.3.2 非对称加密
      • 2.3.3 数据摘要(数据指纹)
      • 2.3.4 数字签名
    • 2.4 理智选择加密解密方式
      • 2.4.1 只使用对称加密✖️
      • 2.4.2 只使用非对称加密✖️
      • 2.4.3 双方都使用非对称加密✖️
      • 2.4.4 使用非对称加密+对称加密✖️
      • 2.4.5 中间人攻击破解问题
      • 2.4.6 引入数字证书
      • 2.4.7 使用非对称加密+对称加密+数字证书进行加密
  • 三、https协议总结

一、什么是HTTPS协议

在上篇文章中我们了解到什么事HTTP协议,HTTP协议内容都是按照⽂本的⽅式明⽂传输的.这就导致在传输过程中出现⼀些被篡改的情况,本期我们来探讨一下HTTPS协议。
HTTPS(超文本传输安全协议)也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层.

在这里插入图片描述
HTTPS:默认端口与HTTP默认端口(80)不一样,它的是443

二、加密和解密

2.1 什么是加密解密

加密就是把明⽂(要传输的信息)进⾏⼀系列变换,⽣成密文
解密就是把密⽂再进⾏⼀系列变换,还原成明⽂
在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥
在这里插入图片描述

2.2 为什么需要加密

因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双⽅察觉,这就是 中间人攻击 ,所以我们才需要对信息进⾏加密

2.3 常见的加密方式

2.3.1 对称加密

采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的(如上图)

  • 常见对称加密算法(了解一下):DES、3DES、AES、TDEA、Blowfish、RC2等

  • 特点:算法公开、计算量⼩、加密速度快、加密效率高

  • 对称加密其实就是通过同⼀个 “密钥” , 把明⽂加密成密文, 并且也能把密⽂解密成明文。

  • 按位异或就是⼀个简单的对称加密,不过HTTPS 中并不是使用按位异或。

2.3.2 非对称加密

需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

  • 常见非对称加密算法(了解):RSA,DSA,ECDSA

  • 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。 公钥和私钥是配对的. 最⼤的缺点就是运算速度非常慢,比对称加密要慢很多。公钥可以认为是一把锁,私钥是锁的钥匙,锁给谁都行,但是只有持有私钥的人才能打开。

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

  • 通过私钥对明⽂加密, 变成密文;通过公钥对密⽂解密, 变成明⽂

2.3.3 数据摘要(数据指纹)

数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改
数据摘要的特点

  1. 每一个字段都有一个数据摘要
  2. 唯一性
  3. 原始文章修改,形成一个差别非常大的新序列

摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)

摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息。

用处

  1. 通常用来进行前后数据的对比,是否是同一文件,用于实现网盘的秒传功能、公司数据库密码存储等。

  2. 一般涉及到用户密码的字段,都是要加密的。一般数据库中的密码字段,长度是固定的(便于设计表结构),而且会将用户密码进行哈希摘要。每次用户登录时都将转换成哈希摘要与数据库的哈希摘要进行对比,所以数据库泄露也不怕。

2.3.4 数字签名

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

2.4 理智选择加密解密方式

网络通信中,需要解决数据被监听、数据被篡改的问题

2.4.1 只使用对称加密✖️

如果通信双方只使用一个密钥进行加密通信,那么完全可以实现加密通信,除非密钥被破解。但服务器同⼀时刻其实是给很多客⼾端提供服务的,这么多客⼾端,每个⼈⽤的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,⿊客就也能拿到了).因此服务器就需要维护每个客⼾端和每个密钥之间的关联关系成本太大。
⽐较理想的做法,就是能在客⼾端和服务器建立连接的时候,双方协商确定这次的密钥是啥
在进行正常的加密数据通信之前,需要先解决密钥如何被对方安全收到的问题。密钥的密钥如何传递?仅使用对称加密是行不通的。

2.4.2 只使用非对称加密✖️

只使用非对称加密,可以保证客户端->服务器的通信是安全的,但是服务器返回给客户端响应是不安全的,因为服务器发送响应给客户端时,手里有公钥和私钥,使用公钥加密的密文发给客户端,客户端没有私钥,解不了密;响应的时候把私钥传过去也不行,因为私钥一但暴露到公网中,就可能被劫持,黑客拿到私钥原地破解密文。

在这里插入图片描述

2.4.3 双方都使用非对称加密✖️

既然单方使用非对称加密只能保障一个方向的通信安全,那么双方都使用非对称加密不就可以实现通信的安全了?

  1. 服务端拥有公钥S与对应的私钥S’,客⼾端拥有公钥C与对应的私钥C’
  2. 客⼾和服务端交换公钥
  3. 客⼾端给服务端发信息:先⽤S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
  4. 服务端给客⼾端发信息:先⽤C对数据加密,在发送,只能由客⼾端解密,因为只有客⼾端有私钥C’
    在这里插入图片描述
    但是这种加密方式仍存在问题,第一个问题是通信速度慢,第二个问题是这种加密解密方式仍然存在安全问题

2.4.4 使用非对称加密+对称加密✖️

  1. 服务端具有⾮对称公钥S和私钥S’
  2. 客⼾端发起https请求,获取服务端公钥S
  3. 客⼾端在本地⽣成对称密钥C,通过公钥S加密,发送给服务器.
  4. 由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密
    钥(真的吗?)
  5. 服务器通过私钥S’解密,还原出客⼾端发送的对称密钥C.并且使⽤这个对称密钥加密给客⼾端返回的响应数据.
  6. 后续客⼾端和服务器的通信都只⽤对称加密即可.由于该密钥只有客⼾端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义.

在这里插入图片描述
只有首次使用了非对称加密,后续所有的通信都将采用对称加密,提高了通信速度

2.4.5 中间人攻击破解问题

  1. 服务器具有⾮对称加密算法的公钥S,私钥S’
  2. 中间⼈具有⾮对称加密算法的公钥M,私钥M’
  3. 客⼾端向服务器发起请求,服务器明⽂传送公钥S给客⼾端
  4. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M,
    并将伪造报⽂发给客⼾端
  5. 客⼾端收到报文,提取公钥M(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥X,⽤公钥M加
    密X,形成报⽂发送给服务器
  6. 中间⼈劫持后,直接自己的的私钥M’进⾏解密,得到通信秘钥C,再⽤曾经保存的服务端公钥S加
    密后形成Y,将报⽂推送给服务器
  7. 服务器拿到报⽂,⽤自己的私钥S’解密,得到通信秘钥C
  8. 双⽅开始对称加密进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚
    ⾄修改,都是可以的

在这里插入图片描述
问题是服务器在返回公钥的时候,被中间人截取并替换了公钥,并且客户端没有能力辨别公钥是否合法。所以需要客户端具有判别公钥是否合法的能力

2.4.6 引入数字证书

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。客户端向服务器请求公钥时,服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如⾝份证,是服务端公钥的身份证明。
在这里插入图片描述
这个证书可以理解成是⼀个结构化的字符串, ⾥⾯包含了以下信息:证书发布机构、证书有效期、公钥、证书所有者、签名等。

申请证书的时候,需要在特定平台⽣成CSR,同时⽣成公钥和私钥。这对密钥就是用来在网络通信中进行明文加密以及数字签名时使用的。

其中公钥会随着CSR⽂件,⼀起发给CA进⾏权威认证,私钥服务端自己保留,后续用于通信使用,主要就是⽤来交换对称密钥

在这里插入图片描述
当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:

  1. CA机构拥有⾮对称加密的私钥A和公钥A’
  2. CA机构对服务端申请的证书明⽂数据进⾏hash,形成数据摘要
  3. 然后对数据摘要⽤CA私钥A’加密,得到数字签名S
    服务端申请的证书明⽂和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了;验证需要对明文进行hash摘要,然后浏览器内置CA公钥,将用CA密钥加密的签名进行解密形成的hash摘要与前面的对比。

2.4.7 使用非对称加密+对称加密+数字证书进行加密

非对称加密用来交换公钥,对称加密用来对真正通信内容加密,证书用来保证公钥的合法性
在这里插入图片描述

三、https协议总结

https整个工作过程中涉及的密钥有三组:

第⼀组(非对称加密): ⽤于校验证书是否被篡改。服务器持有私钥(用于交换的密钥), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的CA公钥)。服务器在客户端请求是,返回携带签名的证书.客户端通过这个公钥进行证书验证,保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性

第二组(非对称加密):服务端生成的非对称密钥对,用于协商⽣成对称加密的密钥。

第三组(对称加密): 客户端生成的对称密钥,客⼾端和服务器后续传输的数据都通过这个对称密钥进行加密解密。

其实⼀切的关键都是围绕这个对称加密的密钥.其他的机制都是辅助这个密钥⼯作的
第⼆组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器
第⼀组非对称加密的密钥是为了让客户端拿到第⼆组非对称加密的公钥

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

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

相关文章

OpenMMLab-AI实战营第二期——2.人体关键点检测与MMPose

文章目录 1. 人体姿态估计的介绍和应用2-1. 2D姿态估计概述2.1 任务描述2.2 基于回归2.3 基于热力图2.3.1 从数据标注生成热力图(高斯函数)2.3.2 使用热力图训练模型2.3.3 从热力图还原关键点 2.4 自顶向下2.5 自底向上2.6 单阶段方法 2-2. 2D姿态估计详…

搞什么飞机?快速排序算法都没搞懂,还敢说自己值20k?

引言 之前面试过一位求职者,其期望薪资是20k,面试时问到了排序算法,结果就是模棱两可,说这说那的… 所以,还是有必要学一些基础算法的 首先,搞明白学算法的重要性和为什么学算法 算法我认为是一种解决问题…

Midjourney摄影真人风,超高清图片一篇足够

欢迎小伙伴光临,本博主打的就是一个真实,关注点赞不迷路,毫无保留奉献,欢迎大家来探讨,以上图片均是万能咒语篇出品。 有些小伙伴感觉我的咒语水分很大,出不来效果,如果出不来效果的&#xff0c…

windows sql server 如何卸载干净?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 windows sql server 怎么卸载干净? 前言一、windows sql server是什么?二、如何卸载干净 1、关闭sql server服务2、到控制面板,卸载sql …

深入Mybatis框架:解读数据源的实现,整合MyBatis框架,事务管理,集成JUnit测试

深入Mybatis框架 文章目录 深入Mybatis框架了解数据源解读Mybatis数据源实现非池化的数据源实现池化的数据源实现 整合Mybatis框架使用HikariCP连接池Mybatis事务管理使用Spring事务管理 集成JUnit测试 前面已经了解了JavaBean的创建和注入到IoC容器中,接下来深入My…

Nginx服务优化

配置nginx隐藏版本号 隐藏nginx版本号,避免安全漏洞泄漏 方法一:修改配置文件法 [rootwww conf]# vim /usr/local/nginx/confnginx.conf17 http { 18 include mime.types; 19 default_type application/octet-stream; 20 21 serve…

Generative AI 新世界 | 大型语言模型(LLMs)概述

在上一篇《Generative AI 新世界:文本生成领域论文解读》中,我带领大家一起梳理了文本生成领域(Text Generation)的主要几篇论文:InstructGPT,RLHF,PPO,GPT-3,以及 GPT-4…

jQuery的引入/jQuery筛选/菜单下拉案例/对类操作/封装的动画/自定义动画/获取元素属性

jQuery的使用与引入 点击链接后进入页面 复制整个页面,随后后新建文件,把复制的粘进去 jQuery入口函数 样式处理/隐式迭代 小案例 排他思想 淘宝服饰 链式编程 操作css方法 封装的动画 淡入淡出 自定义动画 获取元素固有属性值

添加程序到右键菜单打开项目文件夹

以Pycharm为例 第一部分: 添加程序到右键菜单。这里实验程序为pycharm,路径是形如D://pycharm/pycharm.exe。实际路径不是,这里是为了简便。 1、打开注册表,找到如下:HKEY_CLASSES_ROOT\Directory\Background\shell …

JVM学习(十四):垃圾收集器(万字介绍CMS、G1)

目录 一、垃圾收集器们 二、CMS(Concurrent-Mark-Sweep):低延迟 2.1 什么是CMS 2.2 CMS工作流程 2.3 详细描述 2.4 CMS的优缺点 2.4.1 优点 2.4.2 弊端 2.5 CMS常用参数 三、G1(Garbage First)收集器:区域化分代…

【2023最新】C站最全的Python实战项目合集(附源码),练完即可就业,从入门到进阶,基础到框架,你想要的全都有

不管是从编程语言排行榜来说,还是流行程度来说,Python目前都算得上是最好的编程语言之一。由于入门简单对初学者友好,而被广泛使用。 部分中小学已将Python编入教材,浙江高考加入Python,计算机二级也加入Python&#…

Redis数据结构简介

对redis来说,所有的key(键)都是字符串。 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value。 String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串&am…

【数据库从0到1】-入门基础篇

【数据库从0到1】-入门基础篇 🔻一、数据库产生背景🔻二、数据库有关概述🔻三、数据库访问接口🔻四、数据库种类🔻五、数据库有关术语🔻六、常见DBMS排名🔻七、常见数据库介绍7.1 RDS(关系型数据…

前端gulp的安装和使用,你或许用得到

gulp安装 1.npm install --global gulp-cli全局安装(只需要执行成功一次,之后就不需要再全局安装了) 2.npx mkdirp my-project创建项目并进入 3.cd my-project进入目录 4.npm init在项目目录下创建 package.json 文件 5.npm install --sav…

分享24个强大的HTML属性,建议每位前端工程师都应该掌握!

HTML属性非常多,除了一些基础属性外,还有许多有用的特别强大的属性 本文将介绍24个强大的HTML属性,可以使您的网站更具有动态性和交互性,让用户感到更加舒适和愉悦。 让我们一起来探索这24个强大的HTML属性吧! 1、Ac…

tqdm.notebook显示进度条

需要安装hbox插件 如图是无法正常显示进度条插件的 要在Jupyter Notebook中使用HBox(即水平盒子)布局插件,您需要执行以下步骤: 确认您已经安装了Jupyter Notebook和ipywidgets。如果没有安装,您可以使用如下命令进行…

【蓝桥杯单片机第八届国赛真题】

【蓝桥杯单片机第八届国赛真题】 文章目录 【蓝桥杯单片机第八届国赛真题】前言一、真题二、源码 前言 有幸进入国赛,为自己大学最后一个比赛画上完满的句号^^ 下面为蓝桥杯单片机第八届国赛程序部分,功能差不多都实现了,可能存在小bug&#…

Qt(C++)使用QChart动态显示3个设备的温度变化曲线

一、介绍 Qt的QChart是一个用于绘制图表和可视化数据的类。提供了一个灵活的、可扩展的、跨平台的图表绘制解决方案,可以用于各种应用程序,如数据分析、科学计算、金融交易等。 QChart支持多种类型的图表,包括折线图、散点图、柱状图、饼图等。它还支持多个数据系列(data…

Emacs之magit提交代码(一百零八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【Python】导出docx格式Word文档中的文本、图片和附件等

【Python】导出docx格式Word文档中的文本、图片和附件等 零、需求 为批量批改学生在机房提交的实验报告,我需要对所有的实验文档内容进行处理。需要批量提取Word文档中的图片和附件以便进一步检查。如何提取?我想到了用起来比较方便的Python&#xff0…