【计算机网络】应用层——HTTPS协议详解

文章目录

  • 1. HTTPS 协议简介
  • 2. 了解“加密”
  • 3. HTTPS 保证数据安全传输的三大机制
    • 3.1 引入对称加密
    • 3.2 引入非对称加密
    • 3.3 引入“SSL/TLS证书”(防止中间人攻击)
    • 3.4 HTTPS安全机制总结

📄前言
前面的文章已经对 HTTP 协议 进行了较为详细的介绍,本文所介绍的 HTTPS 协议是对 HTTP 协议的补充,HTTPS 协议主要解决的是 HTTP 协议在网络上数据传输的安全问题。


1. HTTPS 协议简介

什么是 HTTPS 协议

HTTPS 协议又称为“安全超文本传输协议”,它是 HTTP 协议的安全版本,主要通过在 HTTP和TCP/IP 之间添加一层加密层来增强数据传输的安全性。

HTTPS 协议的特点

  • 加密:HTTPS 协议使用 SSL或TLS 协议对数据进行加密,保证了数据在传输过程中被窃听的安全性(密文与原始明文差异极大)。
  • 数据完整性:HTTPS 协议可以保证数据在传输过程中未被修改,保护了数据的完整性。
  • 身份验证:通过 SSL/TLS 证书 验证服务器的身份,保证客户端访问的是目标服务器而非冒名顶替的服务器,可以防止“中间人”攻击。

引入 HTTPS 协议的必要性
在商场、酒店、KTV等公共场所中,出于加快网络访问速度、下载大型应用/文件、节省流量等目的,我们往往会连接商家提供的 WIFI,但在享受公共网络便利的同时,我们往往容易忽略其中带来的安全隐患:由于互联网上的所有数据都需经过路由器的多次转发,最终到达目标主机。当黑客入侵了这些场所的路由器,就可以通过抓包工具获取所有经过该路由器转发的数据,因此当我们通过网络传输了某些比较敏感的数据(如账户名、密码、身份证、各类支付密码、家庭住址等)且数据是明文传输的,黑客就可以通过这些信息做出某些违法行为,进而造成不可挽回的损失。
在这里插入图片描述


2. 了解“加密”

加密是一种安全技术,通过将原始信息(明文)转换成不易读的格式(密文),来防止未经授权的访问。其中,用来加密的工具称为“密钥”,密钥可以完成明文和密文的相互转换,只有拥有正确密钥的人才能够读取原始信息。

加密根据类型不同可以分为 对称加密非对称加密

  • 对称加密:使用相同的密钥进行加密和解密。这种加密方式的优点是加密/解密的速度快,适合大数据量的传输,缺点是密钥的分发和管理比较困难(详见 3.1引入对称加密),一旦一方密钥泄露,加密信息就会被破解。
  • 非对称加密:使用一对密钥(公钥和私钥)进行加密和解密,它的特点是:使用公钥加密需私钥解密,且加密与解密的角色可以互换。非对称加密可以解决密钥的分发和管理问题(详见3.2引入非对称加密),但加密/解密的开销较大,所消耗时间也较长。

思考:经过加密后的数据一定能保证安全传输吗?
答案是否定的。虽然黑客获取加密过的 HTTP 请求后并不能直接


3. HTTPS 保证数据安全传输的三大机制

HTTPS之所以能够保证数据安全地传输,原因是依靠对称加密非对称加密数字证书这三大机制的相互配合。

3.1 引入对称加密

通过上述 HTTPS 的介绍我们可以知道,将数据在网络上进行明文传输是非常不安全的,因此需引入对称加密可以有效增加数据传输的安全性,这样一来即使客户端发送的数据被黑客截获,那数据也是相对安全的(密文的破解需要一定的成本和时间)。
在这里插入图片描述
注意:使用对称加密传输数据时,需给每个客户端分发不同的密钥,原因是假如多个客户端都使用相同的密钥,一旦密钥被黑客破解,那么所有使用该密钥加密的数据都会被轻易获取。

上述过程确实可以很大程度上保证数据的安全传输,但前提是客户端能够正确拿到服务器生成的密钥,那么问题来了,客户端如何拿到密钥呢?
答案其实也很明确,通过网络传输对称密钥。(如下图)
在这里插入图片描述

这时候我们可能又有一个疑问:假如黑客在通信双方使用密文传输前就已经入侵了中间网络设备,那么这个加密不就相当于“脱裤子放屁”,也就跟明文传输没有区别了?
事实上对称加密确实存在上述问题,因此它通常只适合于正式进行数据传输的过程中,而不适用于数据传输前的密钥传递

3.2 引入非对称加密

我们已经知道了,对称加密存在密钥分发问题,因此引入非对称加密不仅可以保证数据的安全传输,也可以解决密钥的分发问题。(如下图)
非对称加密的原理也非常简单:服务器生成一对密钥(公钥和私钥),通过由服务器持有私钥,客户端持有公钥,在数据传输前服务器将公钥通过网络传输给客户端,之后客户端使用公钥对 HTTP 请求进行加密,服务器再通过私钥对密文进行解密。在这种机制下,就算黑客通过入侵网络设备获取了公钥,由于他没有私钥,也就不能得到客户端发送的原始信息。(如下图)
在这里插入图片描述
注意:通过上述非对称已经可以完美解决数据的安全传输和密钥的分发问题,但上述加密过程还存在两个问题:(1)黑客虽然获取不了客户端发送的密文请求,但可以通过公钥解密得到服务器返回的响应(2)非对称加密解密开销加大,频繁使用该方式传输数据会造成没必要的开销。

针对第一个问题,在大部分场景下不是一个严重问题,因为采用加密的方式传输数据的初心是为了保护用户发送请求中的隐私数据(如账户密码、身份证、家庭住址、各类支付密码等),而服务器返回的数据大部分情况下是可以被公开的。

对于第二个问题,频繁非对称加密解密不仅会消耗额外的硬件资源,而且造成的时间开销还会影响用户的使用体验。因此,在实际情况中往往采用非对称加密的方式将公钥传输给客户端,接着客户端再生成一把对称密钥,使用公钥对该密钥进行加密后传输给服务器,服务器收到请求后使用私钥解密得到对称密钥,在后面的通信过程中,双方都使用对称密钥传输信息。这样一来两个都得以解决。(如下图)
在这里插入图片描述

3.3 引入“SSL/TLS证书”(防止中间人攻击)

上述过程引入非对称加密后,利用 非对称加密+对称加密 相结合的手段巩固了 HTTPS 安全传输的基本盘,但仍然存在一个严重的漏洞——中间人攻击,如果黑客利用了该漏洞,通信双方的传输数据将被 悄无声息的获取,等同于明文传输!!!

什么是中间人攻击呢?

中间人攻击指攻击者在通信双方之间秘密穿插自己,甚至伪装成通信的另一方,使得通信双方认为他们在直接地、安全地与对方通信,但实际上所有传递的信息都经过攻击者,从而通过这种攻击达到窃取通信过程的敏感数据或篡改数据的目的。

那么攻击者如何通过“中间人攻击”达到隐藏自己、获取通信过程中的数据呢?具体步骤如下:

  1. 客户端向服务器询问公钥
  2. 黑客传递询问公钥请求,服务器端生成 public1 和 private1,并把 公钥public1 作为响应返回。
  3. 黑客收到 public1后保存下来(用于后面加密对称密钥,达到隐藏自己的目的),同时自己生成 public2和private2,将 public2返回给客户端
  4. 客户端收到公钥后,用 public2 加密自己生成的对称密钥并传递给服务器
  5. 黑客收到请求,使用 private2 解密获取用于日常数据传输的对称密钥,再用 public1 加密对称密钥,传递给服务器。(这样既能使服务器和客户端能够正常使用对称密钥传输数据,也能够达到隐藏自己的目的,后面就能随意监听通信双方传输的数据,甚至伪装成另一方与对面通信,以此达到其他非法目的)
  6. 服务器收到请求,使用 private1 解密获取对称密钥,此时服务器和客户端都认为彼此是直接、安全地进行通信。

在这里插入图片描述


要解决上述“中间人攻击”问题,可以引入公证机构颁发的“SSL/TLS证书”(数字证书),那么公证机构和数字证书分别是什么呢?

公证机构是一个受信任的第三方机构,它负责颁发、管理和吊销数字证书。公证机构会验证证书申请者(网站)的身份,以确保证书申请者的身份是合法和受信任的。

数字证书,也称为SSL/TLS证书,是一种文件形式的身份凭证,用于证明公钥的所有权。数字证书上有域名、服务器公钥、组织名称等信息,还包含一个最关键的信息——数字签名。

那么数字签名又是什么呢?它的作用是什么?
数字签名是将证书上的其他属性通过一定计算得到一个校验和,再通过公证机构生成的私钥(非对称密钥)加密得到的加密校验和
众所周知校验和的作用是用来验证数据在传输过程中是否发生改变(出错或被篡改),而对于客户端来说,它本身持有公证机构生成的配对的公钥(预装浏览器或操作系统时内置的),只需使用公证机构发布的公钥对数字签名解密得到原始校验和,再与证书上内容计算得到的校验和进行比较,若校验和一致则说明 服务器公钥、网址等信息是正确且安全的。(如下图)
在这里插入图片描述

思考一:若黑客替换了证书中的公钥是否可行?
答案是否定的。原因是一旦服务器的公钥被替换,客户端如果证书计算出来的校验和一定与解密后的原始校验和不一致,这样则说明了公钥或其他内容被修改过。

思考二:若黑客将公钥连同加密的校验和一同替换了是否可行?
答案也是否定的、若要替换校验和需使用私钥加密,而私钥是公证机构持有的,若使用黑客生成的私钥加密校验和,客户端则不能正确解密数字签名,因此这种方法也是行不通的。

思考三:若黑客也向公证机构申请一个证书,将证书里的公钥、校验和等属性替换成自己的,后面再将证书传递给客户端,借助上述的中间人攻击手段,达到窃听、修改通信数据的目的。这种方法是否可行?
答案依旧是否定的。原因是申请证书需要提交各种证明自己身份的资料,公证机构会对这些资料进行审查,若发现申请的域名不是自身持有的则不会颁发数字证书。

3.4 HTTPS安全机制总结

  • 对称加密保证了通信双方在通信过程中的数据安全。
  • 非对称加密保证了客户端生成的对称密钥在网络上的安全分发。
  • 数字证书防止了证书上的服务器公钥被恶意篡改。

以上就是本篇文章的全部内容了,如果这篇文章对你有些许帮助,你的点赞、收藏和评论就是对我最大的支持。
另外,文章可能存在许多不足之处,也希望你可以给我一点小小的建议,我会努力检查并改进。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚洲运动用品与时尚展(北京,上海,南京,厦门)

亚洲运动用品与时尚展(北京,上海,南京,厦门) 主办单位:慕尼黑展览集团 承办单位:慕尼黑展览(上海)有限公司 Nanjing Sports Carnival 2024 亚洲运动用品与时尚展&…

你真的会写接口自动化测试断言吗?

你真的会写自动化测试断言吗? 在接口测试中,断言是一项非常重要的操作,它是用来校验接口返回结果是否符合预期的一种手段。一般来说,接口测试断言大致可以分为以下几类: 状态码断言:这是最基本也是最常用的…

POLY - Survival Melee Weapons

一个轻便、有趣且灵活的低多边形资源包,非常适合原型设计或添加到低多边形世界中。超过50种近战武器、刀、斧、棍棒、棍棒等。 此套餐非常适合第三人称或自上而下的观看。 除此之外,资产还包括开发生存游戏可能需要的任何细节。 整个包是以多边形风格创建的,可以与其他多边…

项目:自主实现Boost搜索引擎

文章目录 写在前面开源仓库和项目上线其他文档说明 项目背景项目的宏观原理技术栈与环境搜索引擎原理正排索引倒排索引 去标签和数据清洗模块html文件名路径保存函数html数据解析函数文件写入函数 建立索引模块检索和读取信息建立索引建立正排索引建立倒排索引jieba工具的使用倒…

八数码问题(bfs)

方式一:string存储状态 题目传送门:845. 八数码 - AcWing题库 BFS适用于边权为1的最短路问题 ,而这题要求最少的交换次数,将每一次的九宫格状态当作一个“状态结点”,由当前这个结点可以扩展出其它状态【即 x 可以与其…

设计模式总结-组合模式

组合设计模式 模式动机模式定义模式结构组合模式实例与解析实例一:水果盘实例二:文件浏览 更复杂的组合总结 模式动机 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构&#x…

day03 51单片机

51单片机学习 1 模块化编程 1.1 什么是模块化编程 随着我们的代码越来越复杂,我们的main.c越来越长,阅读性也越来越差。如果将来开始做项目,我们可能要同时操作好几个模块,这种情况下我们无法再把代码写到同一个文件,而是要分模块管理代码。 具体实现方法,就是将源码…

原型变量、原子操作、原子性、内存序

一、原子变量、原子操作 锁竞争:互斥锁、条件变量、原子变量、信号量、读写锁、自旋锁。在高性能基础组件优化的时候,为了进一步提高并发性能,可以使用原子变量。性能:原子变量 > 自旋锁 > 互斥锁。 操作临界资源的时间较长…

【leetcode】动态规划::前缀和

标题:【leetcode】前缀和 水墨不写bug 正文开始: (一)简单前缀和 描述 给定一个长度为n的数组a1​,a2​,....an​. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出al​al1​....ar​ 输入描述: 第一…

删除mysql表卡死 , 打不开,一直转圈圈

最近用navicat删除某一张表时,直接卡死转圈圈,导致navicat直接无响应, 想着是不是自己navicat有问题,换同事电脑来删这张表,还是同样问题。 多次尝试才整明白,根本不是navicat的问题.是mysql 的表锁死了! 如果频繁的对…

如何明确的选择IT方向?

一、明确目标 作为初学者,先树立自己目标,找到自己感兴趣的IT行业,IT行业分很多种,听的最多次的无非不就是web前端工、程序员、后端、大数据、网络运维等。学习知识也是为了找到更好的工作,所以我建议先去boss直聘、五…

MyBatis 入门使用(二)

MyBatis的开发有两种方式:注解和XML,上一期我们学习了使用注解的方式,这期我们学习XML的方式。 使用注解主要是用来完成一些简单的增删改查功能,如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。 1. 使用步骤…

day02 VS Code开发单片机

VS Code开发单片机 1.1 安装 MinGW-w64 1)MinGW-w64介绍 VS Code 用于编辑 C 代码,我们还需要 C 编译器来运行 C 代码,所以安装 VS Code之前我们需要先安装 C 编译器。这里我们使用 MinGW-w64(Minimalist GNU for Windows 64-bit)。 MinGW-w64 是一个用于Windows操作系…

Transformer模型-broadcast广播的简明介绍

broadcast的定义和目的: 广播发生在将较小的张量“拉伸”以具有与较大张量兼容的形状,以便执行操作时。 广播是一种有效执行张量操作而不创建重复数据的方式。 广播的处理过程: 1, 确定最右边的维度是否兼容 每…

2024/4/7 IOday6

1&#xff1a;有一个隧道&#xff0c;全长5公里&#xff0c;有2列火车&#xff0c;全长200米&#xff0c; 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行) #include <stdio.h> #include <string.…

Redis 的主从复制、哨兵和cluster集群

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…

tabby 创建ssh远程配置提示:Timed out while waiting for handshake

不知道是不是网络延迟还是虚拟机克隆链接的问题&#xff0c;使用tabby无法正常的ssh远程过去&#xff0c;链接提示信息如下&#xff1a; SSH Connecting to 192.168.36.10SSH ! Agent auth selected, but no running agent is detectedSSH Host key fingerprint:SSH ecd…

Android匿名共享内存(Ashmem)

在Android中我们熟知的IPC方式有Socket、文件、ContentProvider、Binder、共享内存。其中共享内存的效率最高&#xff0c;可以做到0拷贝&#xff0c;在跨进程进行大数据传输&#xff0c;日志收集等场景下非常有用。共享内存是Linux自带的一种IPC机制&#xff0c;Android直接使用…

深入解析War包和Jar包机制

一、概述 代码编写完成后&#xff0c;需要部署到服务器&#xff0c;但部署到服务器对文件格式是有要求&#xff0c;原生的源代码目前是无法支持直接部署到服务器上的。目前有两种主要的文件格式War包和Jar包&#xff0c;通过一定的机制将源代码变成War包或Jar包&#xff0c;就…

42. 接雨水(Java)

目录 题目描述:输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a; height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1…