【网络原理】HTTPS 的工作过程

系列文章目录

【网络通信基础】网络中的常见基本概念

【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)

【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

【网络原理】TCP协议的相关机制(确认应答、超时重传)

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

【网络原理】IP协议的地址管理和路由选择

【网络原理】数据链路层 及 DNS域名系统

【网络原理】HTTP 协议的基本格式和 fiddler 抓包工具的用法


目录

系列文章目录

一、HTTPS 是什么?

二、"加密"是什么?

三、HTTPS 的工作过程

引入对称加密

引入非对称加密

中间人攻击 

引入证书


一、HTTPS 是什么?

HTTPS(超文本传输安全协议)是一种用于安全传输数据的网络协议,它通过在HTTP上增加SSL/TLS协议来保护数据的完整性和安全性。

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

臭名昭著的“运营商劫持”

回想一下我们之前在网站上下载APP,正常点击下载按钮,实际下载的确是另一个APP。这就是运营商劫持后的效果。

点击“下载按钮”,其实就是在给服务器发送了一个HTTP请求,获取到的HTTP响应其实就包含了该APP的下载链接。运营商劫持之后,就把这个交给用户的响应的下载链接给篡改了。

要解决明文传输产生的问题,就要对其进行“加密”。HTTPS就是在HTTP基础上进行了加密。

二、"加密"是什么?

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

解密就是把 密文 再进行一系列变换,还原成 明文

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

三、HTTPS 的工作过程

加密的方式有很多,但是整体可以分成两大类:对称加密非对称加密

引入对称加密

对称加密即通过同一个“密钥”,把明文加密成密文,并且也能把密文解密成明文。

引入对称加密之后,即使数据被截获,由于黑客不知道密钥是什么,因此就无法进行解密,也就不知道请求的真实内容是什么了。

但事情没这么简单,服务器同一时刻其实是给很多客户端提供服务的。这么多客户端,如果都使用相同的密钥,那黑客只要破解一个,其他密钥就形同虚设了;因此,每个客户端所使用的密钥必须是不同的。

服务器要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情。比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥。

但是如果之间把密钥明文传输,那么黑客也就能获得密钥了,此时后续的加密操作也就形同虚设了。

因此,密钥的传输也必须加密传输。

但是,要想对密钥进行对称加密,就仍然需要先协商确定一个“密钥的密钥”,而密钥的密钥也是同理……此时,密钥的传输再用对称加密就行不通了,就需要引入非对称加密

引入非对称加密

非对称加密要用到两个密钥,一个叫做“公钥”,一个叫做“私钥”。

最大的缺点就是运算速度非常慢,比对称加密要慢很多。

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

也可以反着用

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

使用非对称加密,主要目的是为了对 对称密钥 进行加密。

不使用非对称加密,来加密和解密密文,是因为非对称加密的运算速度非常慢,效率远远低于对称加密。

⾮对称加密的数学原理比较复杂, 涉及到⼀些 数论 相关的知识. 这⾥举⼀个简单的生活上的例子.
A 要给 B ⼀些重要的⽂件, 但是 B 可能不在. 于是 A 和 B 提前做出约定:
B 说: 我桌⼦上有个盒子, 然后我给你⼀把锁, 你把文件放盒子里用锁锁上, 然后我回头拿着钥匙来开锁取文件.
在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都行(不怕泄露), 但是私钥只有 B 自己持有. 持有私钥的人才能解密.

 上图过程:

  • 客户端在本地生成对称密钥,对称密钥通过公钥加密,发送给服务器
  • 黑客手里虽然有公钥,但是密文需要通过私钥才能解密,而私钥黑客是拿不到的,只有服务器才持有私钥。即使其截获了数据,也无法获取到对称密钥,也就无法解密出原文了。
  • 服务器通过私钥加密,还原出客户端发送的对称密钥,并且使用这个对称密钥加密给客服端返回的响应数据。
  • 客户端和服务器都知道了对称密钥,后续客户端和服务器的通信都只用对称加密即可。

上述操作看似解决了问题,但仍然存在重大的安全漏洞,黑客仍然有办法获取到对称密钥。

中间人攻击 

服务器可以创建出一对公钥和私钥,同样的,黑客也可以按照同样的方式,创建出一对公钥和私钥,冒充自己是服务器。

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

针对上述问题,最关键的一点,客户端拿到公钥的时候,要能有办法验证,这个公钥是否是真的,而不是黑客伪造的。

引入证书

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

关键点:证书数据也是经过了黑客设备,但是,黑客无法修改证书中的公钥,因为客户端拿到证书之后,会先对证书验证真伪。

证书可以理解成是一个结构化的字符串,里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥和私钥对
  • 证书所有者
  • 签名
  • ……

证书验证的过程: 

证书验证通常包括以下步骤:

  1. 验证证书的有效性:客户端会检查证书的有效期,确保证书在当前时间内是有效的,没有过期。

  2. 验证证书的颁发机构(CA)是否受信任:客户端会检查证书中的颁发机构是否在客户端的信任列表中。信任列表中包含了受信任的CA的根证书或者中间证书。

  3. 验证证书中的域名是否与服务器的域名匹配:客户端会检查证书中包含的域名(通常是服务器的域名)是否与客户端正在连接的服务器的域名匹配。这是为了防止中间人攻击。

  4. 验证证书的签名:客户端会使用证书中的公钥对证书的签名进行解密,以确保证书在传输过程中没有被篡改。如果解密后的结果与证书的内容相符,则证明证书是真实有效的。

此处的签名是一种用于验证证书真实性和完整性的机制,它确保证书在传输过程中没有被篡改。签名使用数字签名算法对证书的内容进行加密生成,然后由证书的签发机构(CA)使用私钥(证书自己的私钥,和服务器的私钥无关)进行签名(加密)。

验证证书的签名通常使用公钥进行解密,如果解密后的结果与证书的内容相符,则证明证书是由相应的CA签发的,并且证书在传输过程中没有被篡改。

通过以上步骤,客户端可以验证服务器的数字证书的真实性和完整性。如果验证通过,客户端就可以信任服务器,并与之建立安全的通信通道。如果任何一步验证失败,客户端会中止连接,以防止与不受信任的服务器建立通信。

中间人有没有可能篡改证书?

  • 由于中间人没有CA机构的私钥,所以无法用私钥加密形成签名,那么也就无法对篡改后的证书形成匹配的的签名
  • 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。

 中间人掉包整个证书?

  • 中间人没有CA私钥,所以无法制作假的证书
  • 所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包
  • 虽然掉包确实是可以做到的,但是,证书明文中包含了域名等服务器认证信息,此时客户端依旧能够识别出来

经过上述一系列调整,HTTPS 最终的加密过程简单概括为以下步骤:

  1. 客户端发起HTTPS请求:用户在浏览器中输入HTTPS网址或点击HTTPS链接,浏览器向服务器发起HTTPS请求。

  2. 服务器发送证书:服务器收到请求后,会将自己的SSL/TLS证书发送给客户端。这个证书包含了服务器的公钥以及其他相关信息。

  3. 客户端验证证书:客户端收到服务器发送的证书后,会验证证书的真实性和合法性。它会检查证书是否由受信任的证书颁发机构(CA)签发,以及证书是否在有效期内等。

  4. 客户端生成密钥:如果证书验证通过,客户端会生成一个随机的对称密钥,并使用服务器的公钥加密该密钥。

  5. 服务器解密密钥:服务器收到客户端发送的加密密钥后,会使用自己的私钥进行解密,从而得到对称密钥。

  6. 加密通信:客户端和服务器现在都拥有了相同的对称密钥,它们可以使用对称密钥来加密和解密通信中的数据。这样,所有的通信数据都会被加密,确保了数据的安全性和隐私性。

  7. 数据传输:客户端和服务器之间开始通过加密通道传输数据,包括网页内容、用户信息等。

  8. 连接关闭:通信完成后,客户端和服务器可以选择关闭连接,或者保持连接以便后续通信。

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

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

相关文章

面试集中营—Redis架构篇

一、Redis到底是多线程还是单线程 1、redis6.0版本之前的单线程,是指网络请求I/O与数据的读写是由一个线程完成的; 2、redis6.0版本升级成了多线程,指的是在网络请求I/O阶段应用的多线程技术;而键值对的读写还是由单线程完成的。所…

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

C语言 举例说明循环嵌套

今天 我们来说循环的嵌套 如果一个循环体内 又包含了另一个循环结构 我们称之为循环的嵌套 我们之前学的 While do-while for 都可以进行相互的嵌套 如下图 在 While 循环语句中再嵌套一个 While 循环语句 do-while 中嵌套 do-while for中嵌套 for 例如 我们做一个九九乘法…

Oracle Database 23ai 正式发布,超级巨兽(集关系型、向量、文档、图、缓存、分布式数据库一体的全能数据库)

Oracle23c改名为Oracle23ai,也意味着Oracle数据库正式从Cloud进入AI时代。Oracle23ai版本是一个超级巨兽,简单总结下: AI能力:内置向量数据库,内置ONNX模型数据处理,内置Text2SQL,内置的机器学习…

QT5之lambda+内存回收机制

使用lambda需要 配置c11 所以在点.pro文件里面配置添加如下 CONFIG c11 使用到qDebug 打印包含头文件 #include<QDebug> lambda 表达式使用 代替槽如下 #include "mainwidget.h" #include<QPushButton> #include<QDebug> mainWidget::mainWid…

js模块化:修改导入模块的内容,会有影响吗?

起因 element-ui的popper组件相关的层级&#xff0c;是使用popup-manager来统一管理的。 之前试图在自己的组件里导入并使用element-ui的popup-manager&#xff0c;但是层级老是和element-ui组件的层级冲突&#xff0c;看了下源码&#xff0c;竟意外发现&#xff0c;使用popu…

毕业设计参考-PyQt5-YOLOv8-鱼头鱼尾鱼长测量程序,OpenCV、Modbus通信、YOLO目标检测综合应用

“PyQt5-YOLOv8-鱼头鱼尾鱼长测量程序”是一个特定的软件程序&#xff0c;用于通过图像处理和目标检测技术来测量鱼类的长度。 视频效果&#xff1a; 【毕业设计】基于yolo算法与传统机器视觉的鱼头鱼尾识别_哔哩哔哩_bilibili 这个程序结合了多种技术&#xff1a; 1. OpenCV…

【Linux极简教程】常见实用命令不断更新中......

【Linux极简教程】常见实用命令不断更新中...... 常见问题1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dpkg) 常见问题 1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dp…

【Docker】★★★

docker 的网络模式 ●host模式&#xff1a;使用 --nethost 指定 容器与宿主机共享网络命名空间、ip和端口 ●container模式&#xff1a;使用 --netcontainer:NAME_or_ID 指定 新建的容器共享已有容器的网络命名空间、ip和端口 ●none模式&#xff1a;使用 --netnone 指定 不进行…

阿里实习生:面试阿里其实并没有那么难。

愉快的五一假期已经结束了, 又要投入到学习和工作当中了。 今天分享一位同学在阿里的Go后端实习面经详解, 希望对你有帮助。 Go里有哪些数据结构是并发安全的&#xff1f; 并发安全就是程序在并发的情况下执行的结果都是正确的&#xff1b; Go中数据类型分为两大类&#xff…

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂

详情介绍 这次给大家带来5月份最新的短视频挂机项目&#xff0c;简单易上手&#xff0c;而且不需要任何投入&#xff0c;经过测试收益非常可观&#xff0c;软件完全免费&#xff0c;特别适合没有时间但是想做副业的家人们

ai生图什么软件好?推荐7个不错的AI绘画软件

ai生图什么软件好&#xff1f;推荐7个不错的AI绘画软件&#xff01;小编带你进入一个创意与科技交融的奇妙世界——AI绘画&#xff0c;让我们一同领略其中的魅力吧~ 一、爱制作AI 这款AI人工智能软件是一款多功能的工具平台&#xff0c;集合了AI问答、AI绘画和AI智能写作等功能…

在离线环境中将运行 Oracle DB 12c 的 CentOS 7.5 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文只是说明如何在 CentOS 7.5 上准备 Oracle DB 12c 验证环境&#xff0c;而将该环境升级并迁移至 RHEL 7.9 的操作过程请参见&#xff1a;《在离线环境中将 CentOS 7.5 原地升级并迁移至 RHEL 7.9》一文。 另外&#xff…

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我&#xff0c;现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着&#xff0c;让我时刻感觉到&#xff0c;再过10年&#xff0c;我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高&#xff0c;我真心希望…

生产者与消费者 PV操作 与 阻塞队列

文章目录 普通方式 wait 与 notifyAll消费者生产者桌子测试类运行结果 阻塞队列Cook生产者Customer消费者测试类 普通方式 wait 与 notifyAll 消费者 package abc;public class Customer extends Thread{Overridepublic void run() {while (true) {synchronized (Desk.lock) {…

音频文件转文字怎么操作?3个方法手把手教你

音频文件转文字怎么操作&#xff1f;音频文件转文字&#xff0c;即将音频中的语音内容转换为可编辑和搜索的文本格式&#xff0c;是一项在多个场景中都非常实用的技术。无论是在会议记录、采访整理、学习笔记&#xff0c;还是视频字幕制作等场景中&#xff0c;音频转文字技术都…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.6-14.7

目录 第 8 周 14、 降维(Dimensionality Reduction)14.6 重建的压缩表示14.7 主成分分析法的应用建议 第 8 周 14、 降维(Dimensionality Reduction) 14.6 重建的压缩表示 在以前的视频中&#xff0c;我谈论 PCA 作为压缩算法。在那里你可能需要把 1000 维的数据压缩100 维特…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着网络技术的不断发展&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络数据安全问题&#xff0c;一直成为企业关心的主要话题&#xff0c;但网络威胁随着网络技术的不断成熟&…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

CDGA|企业的不同阶段如何做数据治理?

随着数字化时代的到来&#xff0c;数据已经成为企业运营和决策的核心要素。因此&#xff0c;数据治理成为企业在不同阶段必须面对的重要课题。 本文将探讨企业在初创期、成长期、成熟期和转型期四个阶段应如何进行数据治理。 初创期&#xff1a;建立数据治理基础 在初创期&…