面试高频:HTTPS 通信流程

在这里插入图片描述

更多大厂面试内容可见 -> http://11come.cn

面试高频:HTTPS 通信流程

HTTPS 的加密流程

接下来说一下 HTTPS 协议是如何进行通信的:

HTTPS 通信使用的 对称加密 + 非对称加密 两者结合的算法

HTTPS 通信时,会先使用 非对称加密 让通信双方都拿到一个 对称密钥 ,之后双方通过这个 对称密钥 进行加密通信,通信过程使用的就是 对称加密

为什么要使用两种加密算法的结合呢?

  • 对称加密:加密解密过程中使用相同的密钥,速度很快,但是如何让双方都安全的拿到这个密钥比较困难(因此和非对称加密结合,来安全的传输这个对称密钥)
  • 非对称加密:加密解密过程中使用一对密钥,即公钥和私钥。公钥是公开的,用于加密;私钥只能自己拿到,用于解密,整个过程相对复杂,比较耗时,一般用于密钥的交换

通过了解这两种算法的区别,也就知道了为什么要使用这两种算法的结合了,HTTPS 既想要对称加密的性能,又想要非对称加密的安全性!

HTTPS 建立连接的流程

HTTPS 是基于 HTTP 协议,添加了 SSL 层来保证了数据传输的可靠性

HTTPS 的通信流程用大白话说的话,总共有 3 个步骤,如下:

1、客户端向服务器请求获取 公钥

2、双方协商产生 对称密钥

3、双方采用 对称密钥 进行加密通信

前两个步骤是建立 SSL/TLS 的过程,HTTPS 是基于 SSL 或 TLS 进行加密的,不过 SSL 已经退出历史舞台了,现在说的 HTTPS 其实就是 HTTP+TLS

使用 HTTPS 通信的话,通信双方先建立 HTTP 通信,也就是通过 TCP 三次握手建立 TCP 连接,之后再进行 TLS 握手 进行 HTTPS 加密通信

那么 TLS 握手的过程总共包含了 4 次通信 ,在 4 次通信之后,TLS 协议也就建立成功了,可以进行 HTTPS 通信了,TLS 握手过程中的 4 次通信如下:

1、第一次通信 ClientHello :客户端向服务端发送加密请求,主要是协商 TLS 版本、随机数(生成后续的对称密钥)

2、第二次通信 ServerHello :服务端向客户端回复,主要协商 TLS 版本、随机数(生成后续的对称密钥)、数字证书(包含公钥)

3、第三次通信 客户端回应 :取出数字证书的公钥,将用于通信的 对称密钥 通过公钥加密发送给服务端

4、第四次通信 服务端最后回应 :使用自己本地的密钥进行解密,得到用于通信的 对称密钥

通过 TLS 握手阶段,双方就可以拿到对称密钥,之后双方就可以使用这个 对称密钥 进行加密通信了

数字证书

这里再补充一下关于数字证书相关的内容

数字证书是由一个双方都信任的第三方机构签发,这个机构就是 CA (Certificate Authority,证书认证机构)

在 TLS 握手的时候,客户端第一次向服务端发起加密请求,此时服务端就会向 CA 申请数字证书,再把数字证书发送给客户端

客户端收到服务端发来的 数字证书 之后,此时客户端并不知道这个数字证书是否合法,万一在传输过程中被篡改了呢?

因此客户端会将 根证书 提前预装在系统内部,当客户端收到数字证书之后,根据本地的根证书去校验这个数字证书是否合法,如果合法的话,客户端拿到证书内部的公钥,就可以使用这个公钥加密信息发送给服务端了,双方在这个过程中通过非对称加密来协商一个对称密钥,之后使用对称密钥进行加密传输即可

数字证书中包含的内容:持有者的公钥、用途、颁发者、有效时间等信息

签发证书的流程如下:

image-20240421163303456

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

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

相关文章

2022 E3 算法题第三题(Fair Count)

题目内容 You are given two arrays A and B consisting of N integers each. Index K is named fair if the four sums (A[0] ... A[K-1]), (A[K] ... A[N-1]), (B[0] ... B[K-1]) and (B[K] ... B[N-1]) are all equal. In other words, K is the index where the two a…

C#基础|string字符串的应用方法总结

哈喽,你好啊,我是雷工! 今天学了下关于C#string字符串的常用方法,以下为学习笔记。 01、字符串处理场景1 用邮箱注册账号时 A1、判断用户输入的邮箱是否包含“@”; A2、找到第一个匹配项所在的位置; A3、如果找到则为索引位置,否则为-1; 示例代码: static void Mai…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…

补档 -- 测试的分类(1)

最近有很多人私信我说: 灰灰你什么时候写测试分类阿, 本来我要开始肝性能测试的, 我一看, 奥, 之前摸鱼忘写了, 所以这里补档(叶问指着一边笑.jpg). 总览 标红的需要注意一下. 为什么要对软件测试进行分类? 软件测试是软件生命周期的一个重要环节, 具有较高的复杂性, 对于软…

C语言-字符函数与字符串函数

在C语言中,我们经常要对字符或是字符串进行各种操作。那C语言究竟给了我们哪些方法呢,本篇文章就是让大家了解对字符和字符串处理相关的知识。 目录 1.字符函数 1.1字符分类函数 1.2字符转换函数 2.字符串函数 2.1strlen函数的使用和模拟实现 2.2…

数电期末复习(二)逻辑代数基础

这里写目录标题 2.1 二值逻辑变量与基本逻辑运算2.1.1 与运算2.1.2 或运算2.1.3 非运算2.1.4 常用复合逻辑运算 2.2 逻辑函数的建立及其表示方法2.2.1 真值表表示2.2.2 逻辑函数表达式表示2.2.3 逻辑图表示方法2.2.4 波形图表示方法 2.3 逻辑代数2.3.1 逻辑代数的基本定律和恒等…

磁盘的管理

会在linux中使用硬盘 分区 格式化(重新安装文件系统) 挂载 硬盘的分类 1.机械硬盘 2.固态硬盘 硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的 数据 (扇区越多容量越大) 存放数据的…

开启智慧之旅,AI与机器学习驱动的微服务设计模式探索

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章🔥:探索设计模式的魅力:开启智慧…

排序 “贰” 之选择排序

目录 ​编辑 1. 选择排序基本思想 2. 直接选择排序 2.1 实现步骤 2.2 代码示例 2.3 直接选择排序的特性总结 3. 堆排序 3.1 实现步骤 3.2 代码示例 3.3 堆排序的特性总结 1. 选择排序基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个…

前后端交互概念

前后端交互概念 1前后端分离开发概念2搭建后端环境2.1配置文件commomcommon-utilservice-utilmodelservice gitee使用 1前后端分离开发概念 前段:运用html、css、js和现成库,对数据作展示。 后端:运用Java和Java框架,提供数据或操…

Redis 逻辑过期策略设计思路

引言: 当我们平常使用Redis缓存的时候,会出现一种场景, redis的key到过期时间了,总是需要到数据库里面去查一遍数据再set回redis,这个时候如果数据库响应比较慢,那么就会造成用户等待,如果刚好…

vue-Router 路由(常量路由)

1、安装 pnpm i vue-router 2、新建文件:src/routes.ts import { RouteRecordRaw } from vue-routerexport const constantRoute: RouteRecordRaw[] [{//path: /,redirect: /login,},{//path: /login,component: () > import(/views/Login/index.vue),name…