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

news2024/12/26 22:51:12

系列文章目录

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

【网络编程】网络编程中的基本概念及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.coloradmin.cn/o/1644175.html

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

相关文章

libcity笔记:参数设置与参数优先级

1 参数优先级 高优先级的参数会覆盖低优先级的同名参数 Libcity中的优先级顺序维: 命令行参数(命令行python run_model.py时导入的) > 用户定义配置文件(命令行python run_model.py时由config_file导入的) >…

变老相机app

变老相机app 在手机上使用“变老相机”app,其中的时光穿梭功能可以生成10岁、20岁、50岁、70岁的照片 目的 得到未来自己的照片,能够更有效地督促我们为老年的自己存款。

CMakeLists.txt语法规则:改变行为的变量说明二

一. 简介 前面一篇文章学习了 CMakeLists.txt语法中的 部分常量变量,具体学习提供信息的变量,文章如下: CMakeLists.txt语法规则:提供信息的变量说明一-CSDN博客 CMakeLists.txt语法规则:提供信息的变量说明二-CSD…

苍穹外卖项目---------收获以及改进(1-2天)

①Nginx反向代理 概念&#xff1a; 优点&#xff1a; 反向代理配置方式&#xff1a; 负载均衡配置方式&#xff1a; ②MD5加密,使用Hutool工具 ③ThreadLocal 封装线程操作的类&#xff1a; //线程操作封装类 public class BaseContext {public static ThreadLocal<Long>…

EasyImage2.0 简单图床开源源码

特点 支持API 支持仅登录后上传 支持设置图片质量 支持压缩图片大小 支持文字/图片水印 支持设置图片指定宽/高 支持上传图片转换为指定格式 支持限制最低宽度/高度上传 支持上传其他文件格式 在线管理图片 支持网站统计 支持设置广告 支持图片鉴黄 支持自定义代码 支持上传IP…

CI/CD笔记.Gitlab系列.新用户管理

CI/CD笔记.Gitlab系列 新用户管理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_285502…

Linux —— 信号初识

Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容&#xff0c;今天我们要了解的是Linux操作系统中的信号&#xff1a; 什么是信号 信号是操作系统内核与进程之…

45. UE5 RPG 增加角色受击反馈

在前面的文章中&#xff0c;我们实现了对敌人的属性的初始化&#xff0c;现在敌人也拥有的自己的属性值&#xff0c;技能击中敌人后&#xff0c;也能够实现血量的减少。 现在还需要的就是在技能击中敌人后&#xff0c;需要敌人进行一些击中反馈&#xff0c;比如敌人被技能击中后…

Mac基于Docker-ubuntu构建c/c++编译环境

编译环境安装和使用被充分验证&#xff0c;如有期望补充的内容欢迎留言评论。 目录 前言 Docker desktop下载安装 修改镜像源 选择ubuntu镜像 docker容器启动 参数说明: 宿主机与docker容器文件共享 宿主机与docker容器拷贝文件 为 Ubuntu 配置 ssh、vim、make 相关工…

基于Springboot的校园生活服务平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园生活服务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

Maven 在项目的 pom.xml 文件中 指定 阿里云的景象仓库

配置 在 项目的 pom.xml 文件中添加如下配置即可 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

计数排序,基数排序,桶排序

目录 计数排序: 基数排序&#xff1a; 桶排序: 计数排序: 计数排序是一种非比较型整数排序算法&#xff0c;特别适用于一定范围内的整数排序。它的核心思想是使用一个额外的数组&#xff08;称为计数数组&#xff09;来计算每个值的出现次数&#xff0c;然后根据这些计数信…

Nginx 从入门到实践(2)——Rewrite重写

Nginx Rewrite Rewrite重写 Nginx Rewriteurl组成说明Rewrite基本概述Rewrite使⽤场景rewrite优点 Rewrite配置语法location匹配概述 if指令if 判断指令语法nginx以及if 判断可使用的全局变量 set命令return指令 url组成说明 https://cn.bing.com/search?qNginxRewrite&P…

VMware虚拟机忘记密码重置--centos7x

centos7虚拟机重置root密码 操作流程 操作流程 重启虚拟机&#xff0c;在如下页面键入e键&#xff1a; 2. 在如下位置添加&#xff1a;init/bin/sh&#xff0c;添加完成后键入Ctrlx启动 依次键入下列命令&#xff1a; mount -o remount,rw / #重新挂载/目录 passwd root #修改…

【微服务】分布式事务(通过Seata解决分布式事务问题)

分布式事务 分布式事务Seata微服务集成SeataXA模式XA模式使用 AT模式AT模式实现 分布式事务 在分布式系统中&#xff0c;如果一个业务需要多个服务合作完成&#xff0c;而且每一个服务都有事务&#xff0c;多个事务必须同时成功或失败&#xff0c;这样的事务就是分布式事务&am…

选择深度学习框架:TensorFlow 2 vs PyTorch

TensorFlow 2 vs PyTorch 选择深度学习框架&#xff1a;TensorFlow 2 vs PyTorchTensorFlow 2概述TensorFlow 2的优点TensorFlow 2的缺点 PyTorch概述PyTorch的优点PyTorch的缺点 选择建议对于选择困难症的人&#xff0c;我给你们的答案——PyTorch选择理由&#xff1a;结论&am…

Mac 电脑安装 Raptor 流程图软件的方法

0. 安装逻辑 &#xff08;1&#xff09;运行 raptor&#xff0c;本质上需要 mac 能够运行 windows 程序&#xff0c;因此需要安装 .NET Runtime 7.0&#xff0c;这是微软程序运行必须的文件。 &#xff08;2&#xff09;运行 raptor 还需要安装依赖文件 mono-libgdiplus。 &am…

python从0开始学习(三)

目录 前言 1、类型转换 1.1 隐式类型转换 1.2 显式类型转换 2、eval函数 总结 前言 上篇我们讲了python中的变量与常量&#xff0c;以及变量类型。本篇文章将接着往下讲。 1、类型转换 python中的数据类型转换包括两种&#xff1a;隐式类型转换和显式类型转换。 1.1 隐式…

微信IDE vscode插件:获取插件位置,并打开文件

背景 有没有觉得在微信开发工具里面添加一些插件可以很方便。因为微信IDE的编辑本身是依赖vscode开发&#xff0c;所以编写vscode插件自然可以在微信IDE使用。这样做好处就是可以满足到自己一些开发使用习惯。 1.获取插件的目录位置 那么如何获取插件里面的目录&#xff0c;…

分布式领域计算模型及SparkRay实现对比

目录 一、分布式计算领域概览 二、Spark计算模型分析 三、Ray计算模型分析 3.1 需求分析 3.2 系统设计 3.3 系统实现 四、总结 一、分布式计算领域概览 当前分布式计算模型主要分为以下4种&#xff1a; Bulk Synchronous Parallel Model&#xff08;块同步并行模型&…