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

总结 HTTPS 的加密流程

一、前言

http是为了解决http存在的问题而在http基础上加入了SSL/TSL,在HTTP/2中TCP三次握手后会进入SSL/TSL握手,当SSL/TSL建立链接后,才会进行报文的传输。

二、HTTPS的混合加密 

我们先来认识密钥

密钥用于加密和解密数据的关键信息。它是一个特定的值或参数,根据所使用的加密算法,用于转换明文(未加密的数据)成密文(加密的数据),或者将密文还原为明文。

我们知道加密方式有三种 

  • 对称加密
  • 非对称加密
  • 混合加密

 

引入对称加密 

在对称密钥加密算法中,同一个密钥被用于加密和解密数据。发送方使用密钥将明文加密为密文,并将其发送给接收方。接收方使用相同的密钥将密文解密为明文。对称密钥加密算法的主要优点是处理速度快,但密钥的安全传输和管理是一个挑战。

 也就是说只有一个密钥,把明文加密和把密文解密。

引入对称加密之后 , 即使数据被截获 , 由于黑客不知道密钥是啥 , 因此就无法进行解密 , 也就不知道请求的真实内容是啥了.
但事情没这么简单 . 服务器同一时刻其实是给很多客户端提供服务的 . 这么多客户端 , 每个人用的秘钥都必须是不同的( 如果是相同那密钥就太容易扩散了 , 黑客就也能拿到了 ). 因此 服务器就需要维护每个客户端 和每个密钥之间的关联关系 , 这也是个很麻烦的事情~
此时服务器就需要维护这个密钥与客户端之间的关系。—— 比较理想的做法 , 就是能在客户端和服务器建立连接的时候 , 双方 协商 确定这次的密钥是啥 ~
发现既然每个客户端的密钥都不相同,那么让客户端自己生成一个密钥,用来加密和解密数据,但是服务器此时也要知道这个密钥用来解密和加密数据。那么如何让服务器也知道这个密钥呢? 肯定要通过网络传输的方式来让服务器知道客户端生成的密钥。

但是如果直接把密钥明文传输 , 那么黑客也就能获得密钥了 ~~ 此时后续的加密操作就形同虚设了 .
因此密钥的传输也必须加密传输 !
但是要想对密钥进行对称加密 , 就仍然需要先协商确定一个 " 密钥的密钥 ". 这就成了 " 先有鸡还是先有蛋 " 的问题了. 此时密钥的传输再用对称加密就行不通了 .
就需要引入 非对称加密

引入非对称加密

  • 公钥  pub
  • 私钥  pri
非对称加密要用到两个密钥 , 一个叫做 " 公钥 ", 一个叫做 " 私钥 ".
公钥和私钥是配对的 . 最大的缺点就是 运算速度非常慢 ,比对称加密要慢很多 .
  • 通过公钥对明文加密, 变成密文
  • 通过私钥对密文解密, 变成明文
也可以反着用
  • 通过私钥对明文加密, 变成密文
  • 通过公钥对密文解密, 变成明文

  • 客户端在本地生成对称密钥, 通过公钥加密, 发送给服务器.
  • 由于中间的网络设备没有私钥, 即使截获了数据, 也无法还原出内部的原文, 也就无法获取到对称密
  • 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响 应数据.
  • 后续客户端和服务器的通信都只用对称加密即可. 由于该密钥只有客户端和服务器两个主机知道, 他主机/设备不知道密钥即使截获数据也没有意义

由于对称加密的效率比非对称加密高很多 , 因此只是在开始阶段协商密钥的时候使用非对称加密 ,
后续的传输仍然使用对称加密 .
中间人攻击

通过在入侵的网络设备上进行伪造服务器的公钥和私钥来进行攻击的一种手段。

此时当服务器把自己的pub发给客户端的时候,黑客自己也生成了一对公钥和私有,我们记为pub2和pri2,此时黑客就会把自己的pub2给客户端发去,通过用把服务器的pub给悄悄记住了。

此时客户端使用黑客自己生成的pub2来对key进行加密,当发送出去之后,黑客就能通过自己生成的pri2来轻松的解密,得到了key,然后有把key重新使用服务器的pub来进行加密,然后发送出去,此时服务器并不知道key已经被黑客拿到了。

 服务器拿到用pub加密的key之后,并不知道黑客已经拿到了key,于是就双方就放心大胆的使用对称密钥key进行传输。

但是黑客早就直到了key,所以在传输的过程中,黑客就使用拿到的key来对数据进行解密和加密,而服务器和客户端全然不知,数据已经全部暴露。

破解中间人攻击的关键就是让客户端直到这个服务器的公钥是不是已经被篡改的。

那么接下来问题又来了:
  • 客户端如何获取到公钥?
  • 客户端如何确定这个公钥不是黑客伪造的?
引入证书  
在客户端和服务器刚一建立连接的时候 , 服务器给客户端返回一个 证书 .
这个证书包含了刚才的公钥 , 也包含了网站的身份信息 .
这个证书就好比人的身份证 , 作为这个网站的身份标识 . 搭建一个 HTTPS 网站要在 CA 机构先申请一 个证书. ( 类似于去公安局办个身份证 ).

 这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名
  • ......

当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的).

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构(自己本来有的)的公钥, 对签名解密, 得到一个 hash (称为据摘要), 设为 hash1. 然后计算整个证书的 hash , 设为 hash2. 对比 hash1 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.
理解判定证书篡改 的过程

假设我们的证书只是一个简单的字符串 hello, 对这个字符串计算 hash ( 比如 md5), 结果为
BC4B2A76B9719D91
如果 hello 中有任意的字符被篡改了 , 比如变成了 hella, 那么计算的 md5 值就会变化很大 .
BDBD6F9CF51F2FD8
然后我们可以把这个字符串 hello 和 哈希值 BC4B2A76B9719D91 从服务器返回给客户端 , 此时客户端如何验证 hello 是否是被篡改过 ?
那么就只要计算 hello 的哈希值 , 看看是不是 BC4B2A76B9719D91 即可
但是还有个问题 , 如果黑客把 hello 篡改了 , 同时也把哈希值重新计算下 , 客户端就分辨不出来了呀 .
所以被传输的哈希值不能传输明文 , 需要传输密文 .
这个哈希值在服务器端通过另外一个私钥加密 ( 这个私钥是申请证书的时候 , 证书发布机构给服务器的, 不是客户端和服务器传输对称密钥的私钥 ).
然后客户端通过操作系统里已经存的了的证书发布机构的公钥进行解密 , 还原出原始的哈希值 , 再进行校验.
完整流程

HTTPS 工作过程中涉及到的密钥有三组 .
  • 第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公 钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的 签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.
  • 第二组(非对称加密): 用于协商生成对称加密的密钥. 服务器生成这组 私钥-公钥 对, 然后通过证书把公钥 传递给客户端. 然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密 获取到对称加密密钥.
  • 第三组(对称加密): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密. 其实一切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥工作的.
  • 第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器.
  • 第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥

相关文章:

总结 HTTPS 的加密流程

一、前言 http是为了解决http存在的问题而在http基础上加入了SSL/TSL,在HTTP/2中TCP三次握手后会进入SSL/TSL握手,当SSL/TSL建立链接后,才会进行报文的传输。 二、HTTPS的混合加密 我们先来认识密钥: 密钥是用于加密和解密数据…...

Spring的FactoryBean多例问题

关于spring bean,我们了解的最多的还是单例,而多例bean,除了平时我们自己new的那些多实例外(但不属于IOC管理了),几乎很少能用到,而在spring 层面,FactoryBean刚好是多例的一个体现,…...

[nextjs]推荐几个很好看的模板网站

最近在做网站,折腾了 vue 框架,然后发现了 nextjs 框架,感觉这个做出来的网站配色很好看,然后又开始研究这个 网站配色好看是因为用的 tailwindcss,找网站过程中,发现了几个很好看的模板网站,在这里推荐下,或许你也能用得上 推荐第一个网站是: https://tailspark.co/ 有组件,也…...

《当微服务遇上Ribbon:一场负载均衡的华丽舞会》

在微服务的厨房里,如何确保每一道服务都恰到好处?揭秘Spring Cloud Ribbon如何像大厨一样精心调配资源,让负载均衡变得像烹饪艺术一样简单! 文章目录 Spring Cloud Ribbon 详解1. 引言微服务架构中的负载均衡需求Spring Cloud Rib…...

简单随机数据算法

文章目录 一,需求概述二,实现代码三、测试代码四、测试结果五、源码传送六、效果演示 一,需求概述 系统启动时,读取一组图片数据,通过接口返回给前台,要求: 图片随机相邻图片不重复 二&#…...

js画思维导图代码2

这段代码是一个使用Vue.js和D3.js构建的树形图组件。它是一个Vue组件&#xff0c;用于创建和显示一个交互式的树形结构图。下面是对这段代码的简要分析&#xff1a; 模板部分 (<template>): 定义了组件的HTML结构&#xff0c;包括一个隐藏的提示框(#tooltip)和一个用于显…...

使用 Flask 实现异步请求处理

文章目录 为什么需要异步请求处理&#xff1f;在 Flask 中实现异步请求处理使用 Flask-Cors 扩展 总结 在开发 Web 应用程序时&#xff0c;异步请求处理是提高性能和并发能力的重要方法之一。Flask 是一个轻量级的 Web 框架&#xff0c;它提供了易于使用的工具来实现异步请求处…...

关于c++的通过cin.get()维持黑框的思考

1.前言 由于本科没有学过c语言&#xff0c;研究生阶段接触c上手有点困难&#xff0c;今天遇到关于通过cin.get()来让黑框维持的原因。 2.思考 cin.get()维持黑框不消失的原因一言蔽之就是等待输入。等待键盘的输入内容并回车&#xff08;一般是回车&#xff09;后cin.get()才…...

fastadmin接口输出图片 自动拼接网站URL

先自定义常量 1.文件接口路径 修改核心文件 application\common\controller\Api.php/*** 构造方法* access public* param Request $request Request 对象*/public function __construct(Request $request null){$this->request is_null($request) ? Request::instance…...

VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094

软件版本 vmware 17 错误情况 VMware Workstation 不可恢复错误&#xff1a;(vmui) Exception 0xc0000094 has occurred. 问题原因 VMware升级到17.0后&#xff0c;将虚拟机环境的【硬件兼容性】升级至Workstation 17.X后&#xff0c;无法修改设备参数。 解决办法 打开需…...

DockerNetwork

Docker Network Docker Network 是 Docker 引擎提供的一种功能&#xff0c;用于管理 Docker 容器之间以及容器与外部网络之间的网络通信。它允许用户定义和配置容器的网络环境&#xff0c;以便容器之间可以相互通信&#xff0c;并与外部网络进行连接。 Docker Network 提供了以…...

QT学习(20):QStyle类

Qt包含一组QStyle子类&#xff0c;这些子类&#xff08;QWindowsStyle&#xff0c;QMacStyle等&#xff09;模拟Qt支持的不同平台的样式&#xff0c;默认情况下&#xff0c;这些样式内置在Qt GUI模块中&#xff0c;样式也可以作为插件提供。 Qt的内置widgets使用QStyle来执行几…...

hadoop学习之MapReduce案例:输出每个班级中的成绩前三名的学生

hadoop学习之MapReduce案例&#xff1a;输出每个班级中的成绩前三名的学生 所要处理的数据案例&#xff1a; 1500100001 施笑槐,22,女,文科六班,406 1500100002 吕金鹏,24,男,文科六班,440 1500100003 单乐蕊,22,女,理科六班,359 1500100004 葛德曜,24,男,理科三班,421 15001…...

【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk

背景&#xff1a;部分客户需求将自己网站打包成app&#xff0c;供用户在浏览器安装使用、 网页网址快速生成app 准备材料操作流程第一步&#xff1a;打开HBuilder X新建项目第二步创建Wap2App项目第三步修改App图标第四步发布app第五步查看apk 准备材料 1.需要打包的网页 2.ap…...

学习thinkphp的循环标签

1.FOREACH标签 foreach标签的用法和PHP语法非常接近&#xff0c;用于循环输出数组或者对象的属性&#xff0c;用法如下&#xff1a; $list User::all(); View::assign(list,$list); 模板文件中可以这样输出 {foreach $list as $key>$vo } {$vo.id}:{$vo.name} {/foreac…...

根据标签名递归读取xml字符串中element

工具类&#xff1a; /*** 根据标签名递归读取xml字符串中element* 例&#xff1a;* String xml * "<req>\n" * "<tag1></tag1>\n" * "<tag2>\n" * " <tag4></tag4>\n" * "</tag2>\n&…...

Ovid医学库文献如何在家查找下载

今天讲的数据库是一个知名医学库——Ovid Ovid隶属于威科集团的健康出版事业集团&#xff0c;与LWW、Adis等公司属于姊妹公司。Ovid数据库在医学外文文献数据库方面占据绝对地位&#xff0c;目前已有包涵人文、科技等多领域数据库300个&#xff0c;其中80多个是生物医学数据库…...

在已创建的git工程中添加.gitignore

有些代码创建git时&#xff0c;为了方便将所有文件都加入了git管理&#xff0c;但实际有些库的Makefile文件和编译目录的文件不需要加入管理&#xff0c;否则每次提交或编译后&#xff0c;git diff将看到非常多的冗余信息。而我们修改的核心代码都淹没在这些大量无用的信息里面…...

MR混合现实情景实训教学系统在临床医学课堂上的应用

MR混合现实情景实训教学系统在临床医学课堂上的应用可以带来许多积极的影响&#xff0c;具体表现在以下几个方面&#xff1a; 1. 增强教学的真实感和互动性&#xff1a;MR混合现实技术能够创建出高度逼真的模拟临床环境&#xff0c;使学生能够身临其境地体验临床实践。这种技术…...

就说说开一家公司的流程和成本

本人在进互联网公司和外企前&#xff0c;也和一位老板合作做&#xff0c;在一家小微公司里做过技术负责人&#xff0c;所以也了解开办一家公司的流程以及公司运作的成本。 通过本文大家其实能看到创业的难度。具体来讲&#xff0c;开办并维持着一家公司&#xff0c;其实需要操…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...