当前位置: 首页 > news >正文

【网络原理】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. 连接关闭:通信完成后,客户端和服务器可以选择关闭连接,或者保持连接以便后续通信。

相关文章:

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

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…...

Python语言在地球科学中地理、气象、气候变化、水文、生态、传感器等数据可视化到常见数据分析方法的使用

Python是功能强大、免费、开源,实现面向对象的编程语言,Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台(x86和arm),Python简洁的语法和对动态输入的支持,再加上解释性语言的本质&…...

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把…...

GPU系列(六)-NVIDIA GPU 驱动安装

1. 安装驱动 1.1 查看系统是否识别显卡 lspci | grep -i vga03:00.0 VGA compatible controller: NVIDIA Corporation GP102 [TITAN X] (rev a1) 0a:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. G200eR2 (rev 01) 识别出显卡为 NVIDIA 的 TITAN X。 …...

第十五届蓝桥杯总结

因为本人不是计院的,以后可能也不会打算法类的竞赛了,故作此总结,纪念我四个月的算法学习经历,还算是对算法有了一定的基础,碰运气拿下了湖北b组省二,个人感觉比赛题目没有第十四届难,感觉就是纯…...

Linux驱动开发——(八)Linux异步通知

目录 一、异步通知简介 二、信号处理 2.1 驱动程序中的处理 2.1.1 fasync_struct结构体 2.1.2 fasync操作函数 2.1.3 kill_fasync函数 2.2 应用程序中的处理 三、驱动代码 一、异步通知简介 异步通知的核心就是信号。信号类似于硬件上使用的中断,只不过信号…...

Docker知识点汇总表格总结

Docker容器给我的一个很直观的感受就是将项目以及中间件安装变得比较简单直接,运行维护起来也更方便。之前做的一些微服务项目也是用docker来部署,现在很多开源的项目也流行使用docker来部署,简化了很多手动安装和配置的步骤,将项…...

Golang中实现调用Windows API向指定目标发送ARP请求

简介 Go库中很多实现的arp都是支持osx/linux/bsd之类的, 但几乎没有支持windows的, 也试了一些方式, 目前还是选用调用windows的API, 记录一下这一次windows的API的调用经验。 实现 代码 package main/* #cgo CFLAGS: -I. #cgo …...

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…...

【设计模式】之模板方法模式

系列文章目录 【设计模式】之策略模式 【设计模式】之责任链模式 文章目录 系列文章目录 前言 一、什么是模板方法模式 定义 角色 二、为什么要使用模板方法模式 优点 缺点 三、案例 普通案例 模拟Servlet过程案例 总结 前言 今天给大家介绍23种设计模式中的模板方法模式&a…...

【系统架构师】-选择题(十一)

1、紧耦合多机系统一般通过&#xff08;共享内存&#xff09;实现多机间的通信。对称多处理器结构&#xff08;SMP&#xff09;属于&#xff08; 紧耦合&#xff09;系统。 松耦合多机系统又称间接耦合系统,—般是通过通道或通信线路实现计算机间的互连。 2、采用微内核的OS结构…...

前端开发攻略---介绍HTML中的<dialog>标签,浏览器的原生弹框。

1、演示 2、介绍 <dialog> 标签用于定义对话框&#xff0c;即一个独立的窗口&#xff0c;通常用来显示对话框、提示框、确认框等弹出式内容。在对话框中&#xff0c;可以包含文本、表单元素、按钮等内容&#xff0c;用户可以和这些内容进行交互。 3、兼容性 4、示例代码 …...

让外贸业绩翻倍的销售话术分享

业绩翻三倍的话术&#xff0c;今后无论你遇到挑剔、犹豫、理智的顾客&#xff0c;都能轻松搞定。点赞存起来慢慢看&#xff0c;以免找不到。 与客户有效沟通技巧5的20句金句 业绩翻 3 倍&#xff0c;今后无论你遇到挑剔、犹豫、理智的顾客&#xff0c;都能轻松搞定。点赞存起来…...

观测与预测差值自动变化系统噪声Q的自适应UKF(AUKF_Q)MATLAB编写

简述 基于三维模型的UKF&#xff0c;设计一段时间的输入状态误差较大&#xff0c;此时通过对比预测的状态值与观测值的残差&#xff0c;在相应的情况下自适应扩大系统方差Q&#xff0c;构成自适应无迹卡尔曼滤波&#xff08;AUKF&#xff09;&#xff0c;与传统的UKF相比&…...

虚拟数据中心

创建数据中心和连接宿主机 DRS:收集群集内所有主机和虚拟机的资源使用情况信息&#xff0c;并根据特定的运行状况给出建议或迁移虚拟机HA:如果一台主机出现故障&#xff0c;则该主机上运行的所有虚拟机都将立即在同一群集的其他主机上重新启动EVC:增强型vMotionVirtual SAN:集中…...

解决Blender导出FBX文件到Unity坐标轴错误的问题

发现Blender的模型导入到Unity里面有问题,简单研究了下发现是坐标系不同,Unity使用的是左手坐标系,Blender使用的是右手坐标系 。 下面直接将如何解决 首先忽略Blender的右手坐标系以及Z轴朝上的事&#xff0c;依照unity坐标系情况修改模型物体的旋转&#xff0c;以Blender猴…...

基于微信小程序的校园二手闲置物品交易平台的设计与实现

基于微信小程序的校园二手闲置物品交易平台的设计与实现 “Design and Implementation of a Campus Second-Hand Marketplace Platform based on WeChat Mini Program” 完整下载链接:基于微信小程序的校园二手闲置物品交易平台的设计与实现 文章目录 基于微信小程序的校园二…...

java中多线程的3种实现方法

1.继承Thread类 优点&#xff1a;代码简单&#xff0c;可以直接使用Thread类里面的方法。 缺点&#xff1a;扩张性较差&#xff0c;应为在java中&#xff0c;一个类只能继承一个父类。 2.实现Runnable接口 3.实现Callable接口 2和3的优缺点是一样的 优点&#xff1a;扩展性强&…...

【Docker】docker compose服务编排

docker compose 简介 Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排。 docker swarm&#xff08;管理跨节点&#xff09; Dockerfile可以让用户管理一个单独的应用容器&#xff1b;而Compose则允许用户在一个模板&#xff08…...

elementui的el-select+el-tree+el-input实现可搜索的下拉树组件

部分实现代码如下 <template> <div><el-selectv-model"item.TableName"placeholder"请选择":disabled"!item.disabled"visible-change"handleVisible"ref"TableName"><el-input placeholder"请输…...

微信公众号排名 SEO的5个策略

随着微信公众号在社交媒体领域的持续发展和普及&#xff0c;如何提升公众号的搜索排名&#xff0c;成为许多运营者关注的焦点。公众号排名SEO&#xff0c;即针对微信公众号进行搜索引擎优化&#xff0c;旨在提高公众号在搜索结果中的曝光率和点击率。下面&#xff0c;我们将深入…...

python烟花代码

在Python中&#xff0c;可以使用多种方式来模拟烟花效果&#xff0c;其中一种常见的方法是使用turtle图形库来绘制。以下是一个简单的示例&#xff0c;展示了如何使用turtle来创建一个烟花效果的动画&#xff1a; import turtle import random# 设置屏幕和背景 screen turtle…...

Python高级编程

描述 集合&#xff0c;列表生成式&#xff0c;生成器&#xff0c;迭代器&#xff0c;切片 Python 中的集合类型是一种无序、不重复的数据容器&#xff0c;用于存储可哈希&#xff08;hashable&#xff09;的元素。Python 提供了两种内置的集合类型&#xff1a;set 和 frozens…...

leetCode75. 颜色分类

leetCode75. 颜色分类 题目思路 代码 class Solution { public:void sortColors(vector<int>& nums) {for(int i 0, j 0, k nums.size() - 1; i < k;){if(nums[i] 0) swap(nums[i],nums[j]);else if(nums[i] 2) swap(nums[i],nums[k--]);else if(nums[i] …...

选择器、pxcook软件、盒子模型

结构伪类选择器 定义&#xff1a;根据结构的元素关系来查找元素。 <title>Document</title><style>li:first-child{color:aqua ;}li:last-child{color: aqua;}li:nth-child(3){color: aqua;}</style> </head> <body><ul><li>…...

商城系统秒杀功能设计思想

业务特点 1、瞬时并发量大&#xff0c;秒杀时会有大量用户在同一时间进行抢购&#xff0c;瞬时并发访问量突增几倍、甚至几十倍以上 2、库存量少&#xff0c;一般秒杀活动商品量很少&#xff0c;这就导致了只有极少量用户能成功购买到。 3、业务和流程较为常见&#xff0c;一般…...

#初始化列表

1.再谈构造函数 1.1构造函数的组成 构造函数包括函数体赋值与初始化列表初始化。 1.2函数体赋值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day; };虽然上述构造函数调用之后&…...

Vue-组件中的data

一个组件的data选项必须是一个函数。保证每个组件实例&#xff0c;维护独立的一份数据对象。如下图&#xff1a; 组件一旦封装好了&#xff0c;可以使用多次&#xff0c;比如数字框组件使用了三次&#xff1a; 每次创建新的组件实例&#xff0c;都会重新执行一次data函数&#…...

抖音小店达人佣金应该怎么结算呢?给达人设置多少佣金合适?

大家好&#xff0c;我是电商小V 咱们在运营抖音小店的时候一定会遇到被达人催促结算佣金的情况&#xff0c;咱们给达人合作的时候都会遇到过新手达人&#xff0c;就是给咱们直播带货之后催促咱们赶紧结算商品的佣金&#xff0c; 但是咱们都需要知道一点&#xff0c;那就是小店的…...

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注&#xff0c;数据集制作不易&#xff0c;请尊重版权&#xff08;稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫&#xff09; 如果需要yolv8检测模型和数据集放在一起的压缩包&#xff0c;可以关注&#xff1a;最新最…...

西宁做网站君博推荐/武汉百度开户电话

正好项目中需要显示天气&#xff0c;以下是搜罗到的简单方法&#xff0c;分享下~ 1.中国天气网http://service.weather.com.cn/plugin/index.shtml 中国天气网插件栏目提供多种预报类插件服务产品的免费天气代码&#xff0c;可实现全国2348个县级以上城市天气预报查询&#x…...

深圳做网站推广优化/今日全国最新疫情通报

python 的 python实现人脸识别代码 从实时视频流中识别出人脸区域&#xff0c;从原理上看&#xff0c;其依然属于机器学习的领域之一&#xff0c;本质上与谷歌利用深度学习识别出猫没有什么区别。程序通过大量的人脸图片数据进行训练&#xff0c;利用数学算法建立建立可靠的人脸…...

可以建设一个网站/哈尔滨seo推广

url中#(hash)的含义 hash 属性是一个可读可写的字符串&#xff0c;该字符串是 URL 的锚部分&#xff08;从 # 号开始的部分&#xff09; 1.“#”代表网页中的一个位置。其右面的字符&#xff0c;就是该位置的标识符 比如&#xff1a; http://www.example.com/index.html#print …...

上海用哪个网站网购/企业网络营销的模式有哪些

画图 import numpy as np import cv2 import matplotlib.pyplot as plt # 显示图片 def show(image):plt.imshow(image)plt.axis(off)plt.show()# 画直线&#xff1b;image:在该图像上绘制直线&#xff1b;(0, 0)&#xff1a;直线起点; (300, 300)&#xff1a;直线终点; green…...

网站 建设情况/免费友情链接平台

0 引言 前段时间找到了一个免费的天气预报API&#xff0c;费了好段时间把这个API解析并组装成自己想用的格式了&#xff0c;就想着如何实现每天发送天气信息给自己。最近无意中发现了wxpy库&#xff0c;用它来做再合适不过了。以下是wxpy库的简介&#xff1a; wxpy基于itchat&a…...

小说网站建设/推广免费

一、学习内容及要求 1. 内容&#xff1a;5.1 特征值与特征向量的概念与计算 线性代数学习笔记——第五十六讲——特征值及特征向量的定义 线性代数学习笔记——第五十七讲——特征子空间 线性代数学习笔记——第五十八讲——特征值与特征向量的判定 线性代数学习笔记——第…...