【面试干货】HTTPS 工作原理

【面试干货】HTTPS 工作原理

    • 1、握手阶段(Handshake)
    • 2、密钥协商阶段
    • 3、加密通信阶段
    • 4、结束通信阶段


💖The Begin💖点点关注,收藏不迷路💖

HTTPS(HyperText Transfer Protocol Secure)是一种通过加密通道进行安全通信的HTTP协议。

一、首先 HTTP 请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA 加密)等进行校验;

二、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA 加密);

三、消息体产生的后,对它的摘要进行 MD5(或者 SHA1)算法加密,此时就得到了 RSA签名;

四、发送给服务端,此时只有服务端(RSA 私钥)能解密。

五、解密得到的随机数,再用 AES 加密,作为密钥(此时的密钥只有客户端和服务端知道)。

它的工作原理主要包括以下几个步骤:

1、握手阶段(Handshake)

1、客户端向服务器发送一个请求,请求建立安全连接。

2、服务器将自己的数字证书(包含公钥)发送给客户端。证书中包含了服务器的身份信息、公钥、证书的有效期等信息。

3、客户端接收到服务器的证书后,会验证证书的有效性,包括检查证书是否过期、域名是否匹配、是否由可信任的证书颁发机构签发等。

4、客户端生成一个随机数,使用服务器的公钥进行加密,然后将加密后的随机数发送给服务器。这个随机数将用于后续的对称加密密钥的生成。

2、密钥协商阶段

1、服务器接收到客户端发送的加密后的随机数后,使用自己的私钥进行解密,得到客户端生成的随机数。

2、服务器也生成一个随机数,并与客户端生成的随机数一起使用一种密钥协商算法(如Diffie-Hellman算法)生成一个共享的对称加密密钥。这个对称加密密钥将用于后续的数据传输加密和解密。

3、加密通信阶段

1、客户端和服务器使用协商好的对称加密密钥进行加密和解密通信数据。

2、客户端和服务器之间的所有HTTP请求和响应数据都经过加密处理,保证了数据的机密性和完整性。

3、使用对称加密算法(如AES)来加密和解密通信数据,这样可以保证数据传输的效率和安全性。

4、结束通信阶段

1、通信结束后,客户端和服务器可以选择终止连接或者重新进行握手过程建立新的连接。

2、在某些情况下,可以使用会话缓存和会话恢复等技术来提高HTTPS连接的性能和效率。

总之,HTTPS通过在HTTP协议和TCP/IP协议之间增加一层SSL/TLS协议来保护通信安全,实现了数据的加密传输和身份验证,有效防止了网络中的数据窃取和篡改攻击。


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能

文章目录 前言一、注意二、源码1. test.c源文件2. contact.h头文件3. contact.c源文件 总结 前言 C语言实现通讯录,包括增删改查以及动态开辟内存,写入文件等功能 一、注意 在通讯录菜单栏使用枚举定义PeoInfo类型时,每个结构体类型的成员…

Java保证字符串唯一(不唯一加数字后缀)

在Java中,如果你有一个字符串列表,并希望确保每个字符串都是唯一的,那么可以通过检查重复项并为重复的字符串添加后缀数字来实现。下面是一个示例代码,展示了如何操作字符串以确保不重复: import java.util.;public cl…

手撸XXL-JOB(一)——定时任务的执行

SpringBoot执行定时任务 对于定时任务的执行,SpringBoot提供了三种创建方式: 1)基于注解(Scheduled) 2)基于接口(SchedulingConfigurer) 3)基于注解设定多线程定时任务 基于Scheduled注解 首…

基于51单片机的冰箱控制系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机冰箱控制系统设计( proteus仿真程序设计报告原理图讲解视频) 基于51单片机冰箱控制系统设计 1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接资料下载链接: …

【C++】学习笔记——继承_2

文章目录 十二、继承5. 继承与友元6. 继承与静态成员7. 复杂的菱形继承及菱形虚拟继承 未完待续 十二、继承 5. 继承与友元 友元关系不能继承,也就是说父类友元不能访问子类私有和保护成员 。除非子类也设置成友元。 6. 继承与静态成员 父类定义了 static 静态成…

pnpm:无法加载文件 C:\Users\PC\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

使用pnpm命令启动vue时报了个错: 解决起来也简单,右击开始菜单,用管理员身份打开终端。win11的如下图: win10我记得应该是PowerShell(管理员),这样的。 打开之后执行命令: set-…

HOW - 如何封装一个规范的请求

封装一个规范的请求通常涉及到以下几个方面: 请求方法(GET、POST 等)请求参数构造(根据使用的请求库,包括不同 Method 要求的 params 格式、空值处理等)格式转换(如请求体和返回体参数的下划线格式和驼峰格式转换,一般前端会用驼峰命名格式,后台会用下划线命名格式)请…

物联网平台之单体架构

介绍本文主要介绍平台的单体架构,包括各个组件之间的数据流描述以及所做的一些架构选择。在单体架构模式下,所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动,并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的,因…

蓝队面试题(二)

应急响应基本思路和流程 收集信息:收集客户信息和中毒主机信息,包括样本 判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等 抑制范围:隔离使受害⾯不继续扩⼤ 深入分析:日志分析、进程分析、启动项分析、样本分析方便后期溯源 清理处置:杀掉…

在Windows环境下的rknn-toolkit环境搭建

在Windows环境下的rknn-toolkit环境搭建 最近需要使用RK3566来跑YOLOv5。想要实现目标就需要使用rknn-toolkit工具将模型转化成可以运行在rk3588的NPU上的模型。只是转换模型的话,没有必要使用GPU,所以我这里安装的是CPU版的,所需的组件按照…

dnf手游攻略,新手入坑必备!

一、角色创建策略 在DNF手游中,角色创建是玩家初入游戏的首要步骤。为最大化游戏体验和收益,新手玩家通常建议创建三个角色:一个主账号和两个副账号。 主账号选择 主账号的选择应基于玩家个人的喜好和对职业的熟悉程度。无论选择哪个职业&a…

番外篇 | 手把手教你利用YOLOv8进行热力图可视化 | 针对视频

前言:Hello大家好,我是小哥谈。YOLOv8的热力图可视化可以帮助我们更加直观地了解模型在图像中的检测情况,同时也可以帮助我们进行模型的调试和优化。热力图是一种颜色渐变的图像,不同颜色的区域表示不同程度的关注度或者置信度。在YOLOv8中,可以通过设置阈值来控制热力图的…

电机控制杂谈——“双采样双更新模式”对模型预测控制/PI控制的提升有多大?

1.采样频率与PWM开关频率的关系 一般有以下两种采样模式。 如下图(a)所示,这种方式称之为单采单更模式,即在一个PWM周期内,采样一次,更新一次PWM占空比,在这种情况下,采样频率&…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代,小红书作为新兴的社交电商平台,凭借其独特的社区氛围和强大的种草能力,成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出,精准引流获客,利用自动私信功能不…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

文章目录 1. 环境准备2. 增加数据(Create)3. 查询数据(Retrieve)4. 更新数据(Update)5. 删除数据(Delete)6. 总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实…

强化训练:day8(求最小公倍数、数组中的最⻓连续⼦序列、字⺟收集)

文章目录 前言1. 最小公倍数1.1 题目描述1.2 解题思路1.3 代码实现 2. 数组中的最⻓连续⼦序列2.1 题目描述2.2 解题思路2.3 代码实现 3. 字母收集3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 最小公倍数   2. 数组中的最⻓连续⼦序列   3. 字⺟收集 1. 最小公倍数…

JavaScript中内存泄露的几种情况

在JavaScript开发中,内存泄露是一个常见且可能严重的问题。内存泄露通常发生在程序在不需要某些数据时仍然保留这些数据的引用,导致这些数据无法被垃圾回收机制清除。在长时间运行的Web应用程序或Node.js应用中,内存泄露可能会导致性能下降、…

6-2 递归求Fabonacci数列

作者 C课程组 单位 浙江大学 本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下: f(n)f(n−2)f(n−1) (n≥2),其中f(0)0,f(1)1。 函数接口定义: int f( int n );函数f应返回第n个Fabonacci数。题目保证输入输出…

JavaEE之线程(5)——Java内存模型、内存可见性、volatile关键字

前言 volatile可以理解成轻量级的 synchronized, 它在多CPU开发中保证了共享变量的“可见性”,可见性我们可以理解成是:当一个线程修改一个共享变量时,另一个线程可以读到这个修改的值。由于它不会引起线程的上下文切换和调度&am…

HTML的使用(中)

文章目录 前言一、HTML表单是什么&#xff1f;二、HTML表单的使用 &#xff08;1&#xff09;<form>...</form>表单标记&#xff08;2&#xff09;<input>表单输入标记总结 前言 在许多网页平台上浏览&#xff0c;大多逃不了登录账号。此时在网页中填写的用户…