Linux网络基础:HTTPS 网络传输协议

news2024/11/27 11:26:18

HTTPS

  • HTTPS 网络传输协议
    • 加密
    • 常见的加密方式(对称/非对称加密)
    • 数据摘要、数字签名
    • HTTPS 加密过程探索的方案
      • 只使用对称加密(效率低下、不安全)
      • 只使用非对称加密(不靠谱、不安全)
      • 双方都使用非对称加密(效率低下、不安全)
      • 使用非对称加密+对称加密(不安全)
    • 中间人攻击
    • CA认证
      • 申请数字证书
      • 生成数字证书细节
    • 客户端认证
    • HTTPS最终确定方案
    • 常见的问题
      • 中间人为什么篡改不了数据
      • 中间人可以掉包证书吗?
      • 为什么签名不直接加密,而是要先hash形成摘要

HTTPS 网络传输协议

HTTP 协议是通过明文传输的,这个数据明文在网络传输过程时,每个人都可以查看到,甚至可以进行修改。

为了解决数据传输安全问题,提出了 HTTPS 安全的网络传输协议。

在 HTTP 协议的基础上加入了 SSL 或 TLS 协议层来提供加密通信和身份验证。保护在客户端(如网页浏览器)和服务器之间传输的数据不被窃听和篡改,同时确保通信双方的身份真实性。

加密

加密/解密,就是在原本的数据之上,添加一个或多个中间数据,辅助进行加密/解密过程(多添加的数据就是 密钥)。

  • 加密就是把明文(要传输的信息)进行一系列变换,文成密文
  • 解密就是把密文再进行一系列变换,还原成明文

常见的加密方式(对称/非对称加密)

  • 对称加密:使用一个密钥就可以同时进行加密和解密
  • 非对称加密:需要用到两个密钥,公开密钥(公钥)、私有密钥(私钥)

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

数据摘要、数字签名

  • 数据摘要:也被称为哈希值,将任意长度的数字信息通过特定算法压缩成较短的字符串的过程

这个短字符串通常被称为数字指纹或哈希值,它唯一地代表了原始数据的内容。

在数据库中,为了保证数据的安全性。用户的输入的密码就是通过 数据摘要 的方式存储在表中。等下次用户输入密码时,通过输入的密码再次生成 数据摘要 对比数据库表中的数据,来验证密码的正确性。

常见的生成数据摘要的算法:MD5、SHA系列…

  • 数字签名:使用发送者的私钥对数据摘要后的数据进行再加密,生成的密文就是数字签名

HTTPS 加密过程探索的方案

前面提到,HTTP传输数据是不安全的。为了保证数据安全,网络传输就不能再进行明文传输要对明文进行加密处理

HTTPS 网络传输协议并不是一蹴而就定下来的。为了使用更好的加密方式,在此期间提出了几个加密的方案,我们来看看:

只使用对称加密(效率低下、不安全)

使用对称加密,需要自身和对方都拥有相同的密钥。这个密钥只有双方才知道,双方通信的安全是可以得到保证的,前提是密钥密钥被破解。

来看看这样的一张图解:
在这里插入图片描述
使用了对称加密,即使是获取了请求数据,没有对应的解密方法,也就获取不到数据的内容。

但是,只使用对称加密就是好的吗?

服务器是为客户端进行服务的,客户可以有多个,但是服务器只有一台。就形成了 一对多 的关系。

一个客户端一个密钥,有多少客户,服务器就要维护多少个密钥,并且 维护数据是需要成本的在这里插入图片描述
这样就会导致,服务器工作效率低下

如果使用的还是相同的密钥,那就太容易扩散了,别忘了黑客也是用户,黑客也能拿到相同的密钥。

所以只使用对称加密的方式是不行的。

只使用非对称加密(不靠谱、不安全)

基于非对称加密的机制,客户端与服务端使用非对称加密方式如下:

  1. 服务器将公钥发给客户端,客户端通过公钥对数据加密后传给服务器,服务器通过私钥解密获得数据
  2. 服务器通过私钥对数据进行加密,发送给客户端后,客户端可以通过公钥进行解密

乍一看,好像没有问题。客户端加密后将数据发给服务器这条路是安全的

但是仔细想想,服务器将数据发送给客户端这条路是安全的吗?公钥从服务器发送给客户端时,是明文传输的,数据容易被抓包截获,别人也可以使用这个公钥,对服务器发送的数据进行篡改。

反过来,如果服务器使用私钥加密数据的话,客户端是不能进行解密的。所以,只使用非对称加密是不靠谱的

双方都使用非对称加密(效率低下、不安全)

双方都使用非对称加密,客户端与服务器传输数据加密过程如下:

服务器拥有公钥S、私钥S’; 客户端拥有公钥C、私钥C’;

  1. 开始前协商,相互交换公钥。客户端获取服务器的公钥S,服务器获取客户端的公钥C
  2. 客户端先用S公钥对发送的数据加密,再发送给服务端,发送的数据只能由服务器解密
  3. 同样的,服务端先用C公钥对发送的数据加密,再发送给客户端,发送的数据只能由客户端解密

看上去还行,数据被捕获的基本问题好像解决了。但是这样做有一个不好的地方,双方都采用非对称加密的话,会导致传输速率变得很慢

本来开开心心的网上冲浪,搜索个资源慢的要死。忍不了一点,耐心都消耗完了。非对称加密算法本来就耗时耗力,一方采用还行,双方都采用,直接拉低的网络数据传输效率。

都使用非对称加密的话,也防不住另一个安全问题:中间人攻击

讲完第四种方案后,再来仔细讲讲中间人攻击,这里先跳过。

使用非对称加密+对称加密(不安全)

上面提到,双方都使用非对称加密的方法不是不行,但是传输的效率不好。

非对称加密则使用公钥和私钥进行加密和解密,其加密和解密的过程复杂。对称加密使用相同的密钥进行加密和解密,加密和解密的速度较快

专家就提出,使用 非对称加密对称加密 进行网络数据传输。可以有效减少加密解密的时间。

具体过程如下:

服务器拥有公钥 S、私钥 S’客户端生成对称加密的密钥 X

  1. 客户端发送请求,获得服务器公钥S
  2. 客户端通过对称加密,生成密钥X
  3. 客户端通过服务器的公钥S,对生成的密钥X进行加密处理,形成报文后发送给服务器
    (中间传输过程,没有私钥解密是不能获取到密钥X的)
  4. 服务器通过私钥S’ 解密,还原出客户端发送的对称密钥X。并且在发送数据时,使⽤这个对称密钥X加密数据传输给客户端

此后,客户端与服务器的通信都只用对称加密的密钥X对数据加密传输即可。

图示:
在这里插入图片描述

第四种方案解决了方案三效率低下的问题。但是都避免不了 中间人攻击,当然啦,上面提到的4种方案都避免不了。

那么,什么是中间人攻击呢?

中间人攻击

  • 中间人攻击:是指攻击者冒充服务器与客户端建立连接,并与双方分别建立非对称加密连接(也就是在三次握手前,就进行攻击)

具体过程如下:

服务器拥有公钥 S、私钥 S’中间人拥有公钥H、私钥H‘

  1. 客户端向服务器发起请求连接,服务器将公钥S以报文的形式发送客户端
  2. 中间人劫持报文,将服务器公钥S并且保存起来,重新伪造报文将自己的公钥H发送给客户端
  3. 客户端获取到公钥H,通过这个公钥H加密(对称加密)密钥X,形成报文发送给服务器
  4. 中间人再次劫持,通过自己的私钥H’解密,获取到密钥X。将上次保存的服务器公钥S对密钥X加密处理,形成报文后发送给服务器
  5. 服务器通过私钥S’解密,还原出客⼾端发送的对称密钥X
  6. 此后的服务器客户端之间进行的对称加密通信,在中间人看来是毫无作用。密钥X中间人也有,当前面两者进行通信时,中间人直接解密获取对应的数据,甚至修改数据都可以

中间人攻击是发生在 TCP连接之前,所以上面提到的几个方案都不能很好解决这个问题。

如何解决呢?下面先来简单介绍一下 CA认证,了解后就知道解决方案了。

CA认证

关于CA的权威性,大家可以查阅这个连接内容:CA认证

申请数字证书

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书书含有证书申请者信息、公钥信息等。

证书就如身份证,证明服务端公钥的权威性

证书的申请流程如下:
在这里插入图片描述

申请要求通过审核后,CA会发一个证书,这个证书可以理解成一个结构化的字符串,其中包含以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所持者
  • CA签名

生成数字证书细节

申请者认证申请通过后,CA机构会对该服务端进⾏审核,并专门为该网站形成 数字签名 (这里采用非对称加密)。过程如下:

CA机构拥有非对称加密的私钥A和公钥A’

  1. CA机构将数据证书进行 hash 计算,生成一串 数据摘要
  2. 再通过 私钥A 对数据摘要进行加密处理,形成数字签名S
    在这里插入图片描述
    最后,将 证书明文数字签名S 合在一起共同构成数字证书,最后颁发给服务器:
    在这里插入图片描述

客户端认证

验证就很简单了,客户端收到服务端发送的数据证书后,将其拆分成 证书明文、数字签名

客户端会先对证书进行认证(防止证书伪造):

  • 判断证书是否过期
  • 验证颁发证书机构是否值得信任(OS内部内置了受信任的证书发布机构)
  • 验证证书内容是否被篡改

如何进行验证证书内容是否被篡改呢?

  1. 客户端先通过服务器发送证书中的 CA 公钥,对数字签名进行解密获取散列值
  2. 过hash函数计算证书明文得到的散列值,与数字签名得到的散列值进行对比是否相等
    在这里插入图片描述

通过上面两个步骤,就可以知道传输内容是不是被修改过。

当内容被修改后,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈。

HTTPS最终确定方案

  • 证书认证 + 非对称加密 + 对称加密

在这里插入图片描述

HTTPS工作流程:

  • 非对称加密(认证):用于校验证书是否被篡改

服务器持有私钥(私钥在形成CSR⽂件与申请证书时获),客户端持有公钥(OS中包含了可信任的CA认证机构,同时持有对应的公钥)服务器在客户端请求是,返回携带签名的证书。客户端通过这个公钥进行证书验证,保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。

  • 非对称加密:⽤于协商⽣成对称加密的密钥

客户端用收到的CA证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥。

  • 对称加密:客户端和服务器后续传输的数据都通过这个对称密钥加密解密

第二次非对称加密的密钥是为了让客户端把这个对称密钥传给服务器

第一次非对称加密的密钥是为了让客户端拿到第⼆组非对称加密的公钥

常见的问题

中间人为什么篡改不了数据

中间人如果篡改了证书的明文,就会造成证书明文生成的散列值与客数字签名的散列值在解密后内容对不上。

那么可以改数字签名的数据吗?答案是改不了,改了也会被发现。

由于中间人没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名。

中间人可以掉包证书吗?

  • 掉包不了,只有 CA 有私钥,中间人通过公钥解密后,无法进行再加密形成证书

中间⼈不死心,通过向CA申请真证书,然后用自己申请的证书强行进行掉包,这样不是也可以达到目标?

这样不是不可以,但是客户端还是会识别出来。因为证书明⽂中包含了域名等服务端认证信息。

中间⼈没有CA私钥,所以对任何证书都无法进行合法修改、生成

为什么签名不直接加密,而是要先hash形成摘要

可以说是一切为了效率。前面提到过,证书明文一个结构化的字符串。

网络传输讲究的是效率。直接使用原始数据进行加密,传输效率会变低、解密后进行数据对比也会消耗大量的时间

对此,要需要缩小签名密文的长度,加快数字签名的验证签名的运算速度

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

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

相关文章

js中的深拷贝与浅拷贝 手写深拷贝代码

1 什么是深拷贝和浅拷贝? 深拷贝和浅拷贝都是复制对象时常用的两种方式,区别在于对于嵌套对象的处理,浅拷贝只复制属性的第一层属性,双方修改嵌套对象将会互相影响。深拷贝会递归复制每一层的属性,修改任意一方互不影响…

YOLO11项目实战1:道路缺陷检测系统设计【Python源码+数据集+运行演示】

一、项目背景 随着城市化进程的加速和交通网络的不断扩展,道路维护成为城市管理中的一个重要环节。道路缺陷(如裂缝、坑洞、路面破损等)不仅影响行车安全,还会增加车辆的磨损和维修成本。传统的道路缺陷检测方法主要依赖人工巡检…

[云服务器17] 搭建PMail个性邮箱!我的邮箱我做主

哈喽大家好啊! 我们先来看一个邮箱: 123456example163.com你发现了吗?后面有163的域名! 这个就标志了邮箱服务提供商的名字,像常见的Outlook 163等。 那么作为一个追求自由主义的人,今天,我们就要使用开…

exe4j安装使用教程

A-XVK258563F-1p4lv7mg7sav A-XVK209982F-1y0i3h4ywx2h1 A-XVK267351F-dpurrhnyarva A-XVK204432F-1kkoilo1jy2h3r A-XVK246130F-1l7msieqiwqnq A-XVK249554F-pllh351kcke50

出口企业财务管理,六款热门产品测评与推荐

本文介绍了ZohoBooks、QuickBooks、Xero等6款外贸管理软件,各有特点如全球化管理、移动应用、自动对账等,适合不同出口企业需求。选择时应考虑企业规模、业务复杂度和预算,建议先试用再购买。 一、Zoho Books Zoho Books是一款适合外贸企业跨…

【C++】迭代器失效问题解析

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 一、迭代器失效的概念 迭代器的作用…

每日OJ题_牛客_游游的水果大礼包_枚举_C++_Java

目录 牛客_游游的水果大礼包 题目解析 C代码 Java代码 牛客_游游的水果大礼包 游游的水果大礼包 (nowcoder.com) 描述: 游游有n个苹果,m个桃子。她可以把2个苹果和1个桃子组成价值a元的一号水果大礼包,也可以把1个苹果和2个桃子…

GO网络编程(二):客户端与服务端通信【重要】

本节是新知识,偏应用,需要反复练习才能掌握。 目录 1.C/S通信示意图2.服务端通信3.客户端通信4.通信测试5.进阶练习:客户端之间通信 1.C/S通信示意图 客户端与服务端通信的模式也称作C/S模式,流程图如下 其中P是协程调度器。可…

【Qt】控件概述——按钮类控件(2)

控件概述(2) 1. PushButton2. RadioButton——单选按钮2.1 使用2.2 区分信号 clicked,clicked(bool),pressed,released,toggled(bool)2.3 QButtonGroup分组 3. CheckBox——复选按钮 1. PushButton QPushB…

写不出论文?分享7款写论文的ai免费工具网站

在当今学术研究和写作领域,撰写高质量的论文是一项挑战性的任务。幸运的是,随着人工智能技术的发展,AI论文写作工具逐渐成为帮助学者和学生提高写作效率的重要工具。这些工具不仅能够提高写作速度,还能通过智能校对和优化&#xf…

【大数据】Doris 数据库与表操作语法实战详解

目录 一、前言 二、数据库基本操作 2.1 修改账户密码 2.2 创建新用户 2.3 创建数据库与账户授权 2.3.1 数据库创建补充说明 2.3.2 数据库账户赋权 三、数据表基本操作 3.1 Doris 数据表介绍与使用 3.1.1 建表结构说明 3.1.2 建表语法与操作 3.1.3 建表示例 - 单分区…

Android KMP 快速入门2 - Koin依赖注入

这里写目录标题 代码仓库KMP 框架基本框架actual&expectKoin 依赖注入管理 代码仓库 本小节代码已经上传到gitee,请自行查看: 点击访问仓库 KMP 框架 基本框架 源码集合描述存放内容示例androidMain针对 Android 平台的代码使用 Android SDK、Andr…

Python、C++、java阶乘算法

最近,我除了Python还学了C和Java,然后在网上看到编程考题:阶乘。 首先,我们先理解什么是阶乘。 阶乘是数学中的一个概念,通常定义为从1乘到指定的数。具体来说,一个正整数的阶乘(记作n!&#…

【课程学习】Wireless Communications

Goldsmith A. Wireless communications[M]. Cambridge university press, 2005. Wireless Communications 无线通信课程 文章目录 2-Path Loss, Shadowing, and Multipath2.4-Two-Ray Multipath Model时延扩展 delay spread P33 3-Statistical Multipath Channel Models3.3-Wid…

Python+Matplotlib创建高等数学上册P2页例3交互动画

import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider from matplotlib.patches import Rectangle# 创建图形和坐标轴 fig, ax plt.subplots(figsize(12, 8)) plt.subplots_adjust(bottom0.2)# 设置坐标轴范围 ax.set_xlim(-2*np.pi, 2…

BugReport中的App Processor wakeup字段意义

一、功耗字段意义: App processor wakeup:Netd基于xt_idletimer 待机下监视网络设备的收发工作状态,即当设备发生联网从休眠态变成为唤醒态时,会记录打醒者的uid(uid大于0)和网络类型(wifi或数据类型)、时间戳 实际日志:我们在B…

【C++复习】C++11经典语法

文章目录 {}列表初始化1. 初始化内置类型变量2. 初始化数组3. 初始化标准容器4. 初始化自定义类型5. 构造函数初始化列表6. 初始化列表(initializer_list)7. 返回值初始化8. 静态成员变量和全局变量的就地初始化9. 防止类型收窄总结 decltype右值引用完美…

图像处理案例04

图像处理 问题:把不规则的图片按照参考图摆放 步骤: 1. 用ORB找关键点 2. 关键点匹配 3. 根据上一步匹配的关键点得出单应性矩阵 4. 根据单应性矩阵对不规则进行透视变换 import cv2 import numpy as np import matplotlib.pyplot as pltimgl cv2.imrea…

精华帖分享 | 因子构建思考1

本文来源于量化小论坛股票量化板块精华帖,作者为z-coffee。 以下为精华帖正文: 一段时间没写帖子,其实一直在研究策略,只是从不同的角度去思考而已。熟悉我的老板其实清楚,我的炉子水平一般,基本不太依托…

什么是 Web 应用中的 Facet 控件

在 Web 页面设计和开发中,facet 是一个十分重要的概念,尤其在电子商务、数据搜索和筛选功能中非常常见。Facet 通常指的是一种分类或过滤的方式,用于让用户能够通过多维度的条件来细化和调整数据结果,从而找到更符合需求的内容。F…