HTTPS协议的加密流程

news2025/1/16 8:03:32

目录

一,HTTPS是什么

二,两种加密方式

三,HTTPS的加密过程

3.1 引入对称加密

3.2 引入非对称加密

3.3 引入证书


一,HTTPS是什么

HTTPS也是一个应用层协议,它是在HTTP协议的基础上引入了一个加密层。因为HTTP协议的内容都是按照文本的方式明文传输的,这就导致了在传输过程中会出现被篡改的情况。

也就是说使用HTTP协议进行网络传输是不安全的,所以现在使用HTTPS协议来进一步确保用户的信息安全。

二,两种加密方式

加密就是把明文通过一系列的变换,生成密文,解密就是把密文再通过一系列的变换,还原成明文

加密的两种方式:

1)对称加密:加密和解密使用的密钥是同一个密钥

  • 明文 + 密钥 => 密文
  • 密文 + 密钥 => 明文。

2)非对称加密:加密和解密使用的密钥是一对密钥,分为公钥和私钥,这两者是可以互换的,使用公钥加密,就使用私钥解密,使用私钥加密,就使用公钥解密

  • 明文 + 公钥 => 密文 / 明文 + 私钥 => 密文
  • 密文 + 私钥 => 明文 / 密文 + 公钥 => 明文

三,HTTPS的加密过程

3.1 引入对称加密

仔细思考,上面的模型还存在一个重大问题,服务器不是只和一个客户端通信,那么这些客户端使用的密钥是相同的吗?很明显,每个客户端的密钥必须是不同的,这样彼此之间才不知道对方的密钥是啥。

既然要求每个客户端的密钥都不相同,那么就需要在每个客户端与服务器建立连接的时候,把密钥生成出来(这里涉及到一些随机数机制来确保密钥互不相同),然后客户端再把生成出来的密钥通过网络发给服务器。

但是这里又出现了一个问题,客户端发送给服务器的密钥也是没有加密的,也就是说密钥是可以被黑客截获的,这样就又回到了最初的问题,如何加密?所以这时我们就引入了另一种加密方式 —— 非对称加密。

3.2 引入非对称加密

通过上述过程,客户端生成的密钥就不会被黑客获取到,接下来就可以通过密钥来进行通信了。这时候就会有人问了,既然可以使用非对称密钥加密,那为什么还要使用对称加密,直接全部使用非对称加密不就行了吗?

这是因为非对称加密/解密,运算成本是很高的,运算速度也比较慢,而对称加密/解密,运算成本低,速度快。所以非对称加密通常是在一些比较关键的环节使用(传递密钥),成本就比较可控,后续传输大量的业务数据,都是使用效率更高的对称加密。这样整体的传输效率也会得到提高。

但是上述流程还存在一个漏洞,画个图理解一下:

 在上述流程中,客户端的对称密钥就会被黑客获取到,之后客户端与服务器之间的通信也就会一览无余了。那么要如何解决这种 "中间人" 问题呢?这时候就需要引入第三方公正机构。

3.3 引入证书

会发生上述 "中间人" 问题的原因是客户端无法区分这个公钥究竟是不是黑客伪造的,因此在这里就要引入第三方,即一个被大家信任的"公正机构",如果公正机构说这个公钥是正确的,不是被伪造的,我们就可以使用这个公钥进行加密。

将这个流程画个图理解一下:

公正机构针对证书中的各个属性,计算出来的一个校验和,并对这个校验和进行加密,就得到了数字签名,这里的加密是指公正机构使用自己生成的一对非对称密钥加密,公正机构会使用自己持有的私钥对校验和进行加密,公钥会发布到各个客户端设备中(往往公钥是内置到系统中,安装了系统,就会自导公正机构的公钥)。

当客户端拿到数字签名,就可以通过系统内置的公正机构的公钥进行解密,得到最初的校验和,然后客户端在重新计算一遍校验和,看看和解密出来的校验和是否一样,如果一致,就说明证书没有被篡改,公钥是可信的。

在上述机制下,黑客就无法对证书内容进行篡改了,或者说篡改了也会被发现:

  1. 如果黑客篡改了里面服务器的公钥,替换成自己的,那么客户端在进行校验和验证的时候,就会发现校验和不一致,客户端就认为公钥被篡改了
  2. 如果黑客不止替换了公钥,还将数字签名给替换了,那么由于黑客没有私钥,无法对其篡改后的数据进行加密,或者说,使用自己的私钥加密后,客户端无法对其进行解密,而公正机构的公钥是客户端系统自带的,黑客无法替换
  3. 如果黑客自己申请一个证书,完全替换掉服务器的证书呢?这也是行不通的,因为申请证书是需要提交材料的,其中就有网站的主域名,认证机构会对这个域名是否归你所有进行认证。

综上所述,只要通过证书的检验,就说明公钥是服务器的公钥了

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

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

相关文章

phpinfo中的重要信息

phpinfo中的重要信息 1.PHP/操作系统版本信息2.Configuration File(ini配置文件位置)3.Registered PHP Streams(支持的流)4.Registered Stream Filters(支持的流过滤器)5.allow_url_fopen&allow_url_include6.disable_functions7.display_errors8.include_path9.open_based…

[Docker]九.Docker compose讲解

docker-compose 是 docker 官方的一个开源项目,可以实现对 docker 容器集群的快速编排, docker-compose 通过一个 配置文件 来管理多个 Docker 容器,在配置文件中,所有的容器通过 services 来定义,然后使用 docker-compose脚本 来 启动&am…

redis的高可用(主从复制和哨兵模式)

redis的高可用(主从复制和哨兵模式) redis的性能管理:redis的数据缓存在内存当中 INFO memory:查看redis内存使用情况 used_memory:1800800:redis中数据占用的内存 used_memory_rss:5783552:redis向操作…

CCFCSP试题编号:201912-2试题名称:回收站选址

这题只要比较坐标的四周&#xff0c;然后计数就可以了。 #include <iostream> using namespace std;int main() {int n;cin >> n;int arr[1005][2] { 0 };int res[5] { 0 };int up 0;int down 0;int left 0;int right 0;int score 0;for (int i 0; i <…

C运算符与表达式

跟着肯哥&#xff08;不是我&#xff09;学运算符与表达式 运算符 在C语言中&#xff0c;运算符是一种用来执行特定操作的符号或关键字。它们用于对变量、常量和表达进行计算、逻辑判断和位操作等。 定义一般都当耳旁风了 运算符分类 算术运算符 -*/%加减乘除取模&#xff0c;…

微软Copilot即将对大陆开放,一起来看看都有什么好用的功能

微软发布了Copilot&#xff0c;12月1日起对大陆用户开放&#xff0c;以下是Copilot的11个新功能&#xff0c;你一定不想错过&#xff1a;1. PowerPoint&#xff1a; 将Word文档转换为演示文稿。从文件中快速创建演示文稿。通过关键幻灯片总结冗长的演示文稿。使用提示添加新的…

二分查找——经典题目合集

文章目录 &#x1f99c;69. x 的平方根&#x1f33c;题目&#x1f33b;算法原理&#x1f337;代码实现 &#x1f433;35. 搜索插入位置&#x1f33c;题目&#x1f33b;算法原理&#x1f337;代码实现 &#x1f9ad;852. 山脉数组的峰顶索引&#x1f33c;题目&#x1f33b;算法原…

成为AI产品经理——AI产品经理工作全流程

一、业务背景 背景&#xff1a;日常排球训练&#xff0c;中考排球项目和排球体测项目耗费大量人力成本和时间成本。 目标&#xff1a;开发一套用于实时检测排球运动并进行排球垫球计数和姿势分析的软件。 二、产品工作流程 我们这里对于产品工作流程的关键部分进行讲解&…

GIT实践与常用命令---回退

实践场景 场景1 回退提交 在日常工作中&#xff0c;我们可能会和多个同事在同一个分支进行开发&#xff0c;有时候我们可能会出现一些错误提交&#xff0c;这些错误提交如果想撤销&#xff0c;可以有两种解决办法:回退( reset )、反做(revert) keywords&#xff1a;reset、rev…

什么是应急演练脚本?其设计原则是什么?

应急演练脚本是一种系统性、有计划的模拟性文件&#xff0c;旨在测试和评估组织在紧急情况下的应对能力。这种脚本提供了一系列步骤和场景&#xff0c;以确保团队能够高效、协调地应对各种紧急事件。以下将详细探讨应急演练脚本的定义、设计原则以及实施过程。 一、应急演练脚本…

解决“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”的报错

开发微信小程序的时候&#xff0c;报错内容如下&#xff1a; 错误原因&#xff1a; 微信开发者工具从 1.05.2201210 版本开始&#xff0c;对小程序项目新增了无依赖文件过滤能力。 如果某个 js 文件被静态分析显示是无依赖文件&#xff0c;在实际运行时又被其他 js 文件 req…

软件测试最新面试文档(总共212页)

1、自动化代码中,用到了哪些设计模式? 单例设计模式工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果&#xff0c;如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…

【LeetCode二叉树进阶题目】606,102,107

二叉树进阶题目 606. 根据二叉树创建字符串解题思路及实现 102. 二叉树的层序遍历解题思路及实现 107. 二叉树的层序遍历 II解题思路及实现 606. 根据二叉树创建字符串 描述 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号…

SageMath安装

Sagemath工具是免费开源的&#xff0c;针对数学计算的一个工具。 网页版免安装&#xff1a;https://sagecell.sagemath.org/ Sagemath是根据Linux系统编写的&#xff0c;所以Windows上使用的话&#xff0c;会创建一个Linux系统运行。 1. 安装 Windows本地安装参考&#xff1…

服务器系列之 成功解决 com.jcraft.jsch.JSchException: Auth fail

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

系列八、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗

一、key是弱引用&#xff0c;gc垃圾回收时会影响ThreadLocal正常工作吗 到这里&#xff0c;有些小伙伴可能有疑问&#xff0c;ThreadLocalMap的key既然是 弱引用&#xff0c;那么GC时会不会贸然地把key回收掉&#xff0c;进而影响ThreadLocal的正常使用呢&#xff1f;答案是不会…

使用EasyPlayer播放H.265视频流

使用EasyPlayer播放H.265视频流 EasyPlayer流媒体视频播放器 EasyPlayer流媒体视频播放器 EasyPlayer流媒体视频播放器可支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff0c;能支持RTSP、RTMP、HLS、FLV、WebRTC等格式的视频流播放&#xff0c;并且已实现网页…

TensorFlow实战教程(十七)-Keras搭建分类神经网络及MNIST数字图像案例分析

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras环境搭建、入门基础及回归神经网络案例。本篇文章将通过Keras实现分类学习,以MNIST数字图片为例进行讲解。基础性文章,希望对您有所帮助! 一.什么是分类学习 1.Classifica…

JMeter —— 接口自动化测试(数据驱动)

前言 之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存…

Java小游戏之飞翔的小鸟

创建三个包&#xff0c;存放代码。把图片放进文件中 APP包&#xff08;运行&#xff09; GameApp类 package APP; import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();} } mian包&#xff08;主内容&#xff09; Barrie…