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

【HTTPS协议原理】数据加密、如何防止中间人攻击、证书和签名、HTTPS完整工作流程

头像
⭐️个人主页:@小羊
⭐️所属专栏:Linux网络
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

    • 数据加密
    • 常见的加密方式
    • 数据摘要
      • 方案一:仅使用对称加密
      • 方案二:仅使用非对称加密
      • 方案三:双方都使用非对称加密
      • 方案四:非对称加密 + 对称加密
    • CA认证证书
      • 方案五:非对称加密 + 对称加密 + 证书认证
    • HTTPS完整流程


数据加密

HTTPS 也是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层。因为 HTTP 的内容是明文传输的,明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击 ,所以我们才需要对信息进行加密。

加密就是把明文进行一系列变换生成密文,解密就是把密文再进行一系列变换还原成明文。在加密和解密的过程中,往往需要一个或多个中间数据辅助这个过程,这样的数据称为密钥。

在这里插入图片描述


常见的加密方式

  • 对称加密

    • 采用单钥密码系统的加密;
    • 加密和解密所用的密钥是相同的;
    • 计算量小,因此加密速度快。
  • 非对称加密

    • 需要两个密钥来进行加密和解密,公开密钥私有密钥
    • 算法强度复杂,因此加密速度较慢;
    • 通过公钥对明文加密,变成密文,私钥对密文解密,变成明文,当然也可以反着用;
    • 用公钥加密,只有私钥能解密,反着来同样的也只有持有私钥的人才能加密。

数据摘要

数据摘要的基本原理是利用单向散列函数对信息进行运算,生成一串固定长度的数字摘要。和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比,因此可以用来判断数据有没有被篡改

方案一:仅使用对称加密

对数据进行对称加密可以让中间人不能得到真实数据,保证信息安全。但服务器要给很多客户端提供服务,这么多客户端每个人用的秘钥都必须是不同的,因此服务器就需要维护每个客户端和密钥之间的关联关系,比较麻烦。

有个办法就是让客户端和服务器在建立连接的时候,双方协商确定这次通信的密钥。但是如果直接把密钥明文传输,那中间人也就能获得密钥了,因此密钥的传输也必须加密传输。那么这就形成死循环了。


方案二:仅使用非对称加密

如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,因为只有服务器有相应的私钥能解开公钥加密的数据,所以从客户端到服务器信道暂时是安全的。

但是如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。


方案三:双方都使用非对称加密

  1. 服务端拥有公钥 S 与对应的私钥 S’,客户端拥有公钥 C 与对应的私钥 C’;
  2. 客户和服务端交换公钥;
  3. 客户端给服务端发信息前先用 S 对数据加密再发送,只能由服务器解密,因为
    只有服务器有私钥 S’;
  4. 服务端给客户端发信息前先用 C 对数据加密再发送,只能由客户端解密,因为
    只有客户端有私钥 C’ ;

这个方案好像可行,但是有两个问题:

  1. 非对称加密效率太低
  2. 依旧有安全问题

如何提高效率呢?


方案四:非对称加密 + 对称加密

  1. 服务端拥有非对称公钥 S 和私钥 S’;
  2. 客户端发起 https 请求,获取服务端公钥 S;
  3. 客户端在本地生成对称密钥 C,用公钥 S 加密,发送给服务器;
  4. 由于中间人没有服务端私钥,即使截获了数据也无法还原出内部的原文;
  5. 服务端通过私钥 S’解密,还原出客户端发送的对称密钥 C,并且使用这个对称密钥加密给客户端返回的响应数据;
  6. 后续客户端和服务器的通信都只用对称加密即可。

这样只在开始阶段协商密钥的时候使用非对称加密,后续的传输都使用对称加密,效率就提高了。

但是这种方案只提高了效率,还没有解决安全问题,什么安全问题呢?

如果中间人在最开始握手协商的时候就开始攻击了,可能会发生下面的问题:

在这里插入图片描述

  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 进行对称加密通信,但是他们不知道的是他们的通信信息中间人也能看到,甚至修改。

那么这个问题的痛点在哪里呢?

客户端无法确定收到的含有公钥的数据报文,是不是真的由目标服务器发送过来的。


CA认证证书

服务端在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥,证书就如身份证,证明服务端公钥的权威性。

在这里插入图片描述

当服务端申请 CA 证书的时候,CA 机构会对该服务端进行审核,并专门为该网站形成
数字签名,过程如下:

  1. CA 机构拥有非对称加密的私钥 A 和公钥 A’;
  2. CA 机构对服务端申请的证书明文数据进行 hash,形成数据摘要;
  3. 然后对数据摘要用 CA 私钥 A’加密,得到数字签名 S;
  4. 服务端申请的证书明文和数字签名 S 共同组成了数字证书,这样一份数字证书就可以颁发给服务端了。

在这里插入图片描述


方案五:非对称加密 + 对称加密 + 证书认证

客户端和服务端建立连接,服务器给客户端返回一个证书,证书中有服务端的公钥,还有网站的身份信息。

客户端系统中已内置了受信任的证书发布机构,当客户端获取到这个证书之后,会对证书进行校验,判定证书是否过期、证书的发布机构是否受信任、证书是否被篡改等等。

然后从系统中拿到该证书发布机构的公钥,对签名解密,得到一个 hash 值(数据摘要),设为 hash1,然后计算整个证书的 hash 值,设为 hash2,对比 hash1 和 hash2 是否相等,如果相等则说明证书是没有被篡改过的。

| 如果中间人篡改了证书的明文?
由于他没有 CA 机构的私钥,所以无法 hash 之后用私钥加密形成签名,那么也就
没法办法对篡改后的证书形成匹配的签名。

| 如果强行篡改?
客户端收到该证书后会发现明文和签名解密后的值不一致,则客户端就能知道证书已被篡改,从而终止向服务器传输信息。

| 中间人整个掉包证书?
因为中间人没有 CA 私钥,所以无法制作假的证书,除非他向 CA 申请真证书(但估计没有🤡会这么干),然后用自己申请的证书进行掉包。

中间人没有 CA 私钥,所以对任何证书都无法进行合法修改,包括自己的。

| 为什么数据在网络传输的时候一定要加密形成签名?

常见的摘要算法 MD5 有以下特点:

  • 定长:无论多长的字符串,计算出来的 MD5 值都是固定长度;
  • 分散:源字符串只要改变一点点,最终得到的 MD5 值都会差别很大;
  • 不可逆:通过源字符串生成 MD5 很容易,但是通过 MD5 还原成原串理论上不可能。

因此我们可以认为如果两个字符串的 MD5 值相同,则这两个字符串相同。

假设我们的证书只是一个简单的字符串 happy,对 happy 计算 hash 值结果为BC4B2A76B9719D91。如果 happy 中有任意的字符被篡改,那么计算的 md5 值就会变化很大,比如:BDBD6F9CF51F2FD8。

然后我们可以把这个字符串 happy 和哈希值 BC4B2A76B9719D91 从服务器返回给客户端,此时客户端只需要计算 happy 的哈希值判断是不是 BC4B2A76B9719D91 即可。

| 如果中间人把 happy 篡改,同时也把哈希值重新计算下,客户端该如何应对?

所以被传输的哈希值不能传输明文,只能传输密文。所以对证书明文 hash 形成散列摘要,然后 CA 使用自己的私钥加密形成签名,将 happy 和加密的签名合起来形成CA 证书颁发给服务端,即使中间人截获了,因为没有 CA 私钥,就无法更改或者整体掉包,就能安全的证明证书的合法性。

最后,客户端通过操作系统里已经存好的证书发布机构的公钥进行解密,还原出原始的哈希值,再进行校验。


HTTPS完整流程

在这里插入图片描述

HTTPS 工作过程中涉及到的密钥有以下三组。

  • 第一组(非对称加密):用于校验证书是否被篡改。服务器持有私钥(私钥在形成 CSR 文件与申请证书时获得),客户端持有公钥(操作系统包含了可信任的 CA 认证机构),服务器在客户端请求时,返回携带签名的证书,客户端通过公钥进行证书验证,保证证书的合法性,进一步保证证书中携带的服务端公钥权威性;

  • 第二组(非对称加密):用于协商生成对称加密的密钥。客户端用收到的 CA 证书中的服务端公钥给随机生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥;

  • 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。一切的关键都是围绕这个对称加密的密钥,其他的机制都是辅助这个密钥工作的。第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器,第一组非对称加密的密钥是为了让客户端拿到第二组非对称加密的公钥。


本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

相关文章:

【HTTPS协议原理】数据加密、如何防止中间人攻击、证书和签名、HTTPS完整工作流程

⭐️个人主页:小羊 ⭐️所属专栏:Linux网络 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 数据加密常见的加密方式数据摘要方案一:仅使用对称加密方案二:仅使用非对称加密方案三:双…...

Java中链表的深入了解及实现

一、链表 1.链表的概念 1.1链表是⼀种物理存储结构上⾮连续存储结构,数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的 实际中链表的结构⾮常多样,以下情况组合起来就有8种链表结构: 2.链表的实现 1.⽆头单向⾮循环链表实现 链表中的…...

【武汉理工大学第四届ACM校赛】copy

copy 题目描述代码代码解释: 链接:https://ac.nowcoder.com/acm/contest/108683/E 题目描述 小s苦于在不同的窗口之间复制粘贴, 于是他突发奇想,把所有要复制的内容都复制到了一个剪贴板中,但他突然发现由于他复制的…...

植物大战僵尸杂交版v3.6最新版本(附下载链接)

B站游戏作者潜艇伟伟迷于4月19日更新了植物大战僵尸杂交版3.6版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/1af9b…...

【Ansible】批量管理 Windows自动化运维

一,前期准备 1,控制端(Linux)的要求 Ansible可以在安装了Python 2(2.7版)或Python 3(3.5及更高版本)的任何机器上运行。控制端计算机不支持Windows。 2,客户端&#x…...

【源码】【Java并发】【ThreadLocal】适合中学者体质的ThreadLocal源码阅读

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 📚欢迎订阅专栏…...

背包问题模板

文章目录 01背包题意思路代码优化 完全背包题意思路代码优化 多重背包题意思路代码优化 分组背包题意思路代码 01背包 特点:每件物品最多只能用一次 01背包问题 题意 给出每件物品的体积v,价值w,求解能装入背包的的物品的最大价值,并且每件物品只能选一…...

Redis 处理读请求

在前文“Redis 接收连接”中,Redis 将接收的客户端连接加入了 epoll 中监听,同时还设置了读事件处理器 connSocketEventHandler。 假设现在客户端向 Redis 发来一条 set key value 命令。 事件循环 aeProcessEvents 在事件循环 aeProcessEvents 中会调…...

Sentinel源码—8.限流算法和设计模式总结二

大纲 1.关于限流的概述 2.高并发下的四大限流算法原理及实现 3.Sentinel使用的设计模式总结 3.Sentinel使用的设计模式总结 (1)责任链模式 (2)监听器模式 (3)适配器模式 (4)模版方法模式 (5)策略模式 (6)观察者模式 (1)责任链模式 一.责任链接口ProcessorSlot 二.责…...

VulnHub-DarkHole_1靶机渗透教程

VulnHub-DarkHole_1靶机渗透教程 1.靶机部署 [Onepanda] Mik1ysomething 靶机下载:https://download.vulnhub.com/darkhole/DarkHole.zip 直接使用VMware打开就行 导入成功,打开虚拟机,到此虚拟机部署完成! 注意&#xff1a…...

Keil MDK‑5 中使用 GNU ARM GCC 的 -Wno-* 选项屏蔽编译警告

在项目编译过程中,我们常常会遇到许多警告提示;而在有些情况下,当我们已经了解这些警告的原因时,可以选择忽略它们,从而减少干扰,集中精力修复其他更重要的问题。 一、添加屏蔽警告的编译选项 &#xff08…...

边缘计算全透视:架构、应用与未来图景

边缘计算全透视:架构、应用与未来图景 一、产生背景二、本质三、特点(一)位置靠近数据源(二)分布式架构(三)实时性要求高 四、关键技术(一)硬件技术(二&#…...

爬虫学习——下载文件和图片、模拟登录方式进行信息获取

一、下载文件和图片 Scrapy中有两个类用于专门下载文件和图片,FilesPipeline和ImagesPipeline,其本质就是一个专门的下载器,其使用的方式就是将文件或图片的url传给它(eg:item[“file_urls”])。使用之前需要在settings.py文件中对其进行声明…...

路由器转发规则设置方法步骤,内网服务器端口怎么让异地连接访问的实现

在路由器上设置端口转发(Port Forwarding)可以将外部网络流量引导到特定的局域网设备,这对于需要远程访问服务器、摄像头、游戏主机等设备非常有用。 登录路由器管理界面,添加端口转发规则让外网访问内网的实现教程分享。以下是设…...

MQ底层原理

RabbitMQ 概述 RabbitMQ 是⼀个开源的⾼性能、可扩展、消息中间件(Message Broker),实现了 Advanced Message Queuing Protocol(AMQP)协议,可以帮助不同应⽤程序之间进⾏通信和数据交换。RabbitMQ 是由 E…...

本地部署DeepSeek-R1模型接入PyCharm

以下是DeepSeek-R1本地部署及接入PyCharm的详细步骤指南,整合了视频内容及官方文档核心要点: 一、本地部署DeepSeek-R1模型 1. 安装Ollama框架 ​下载安装包 访问Ollama官网(https://ollama.com/download)Windows用户选择.exe文件,macOS用户选择.dmg包。 ​安装验证 双击…...

jvm-描述符与特征签名的区别

在Java虚拟机(JVM)中,存储的是方法签名,而不是仅仅方法描述符。方法签名包含了方法的参数类型和返回值类型的信息,而方法描述符通常指的是仅包含参数类型的那部分信息。为了更清晰地理解这两者的区别以及它们如何在JVM…...

Java基于SpringBoot的企业车辆管理系统,附源码+文档说明

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

QT调用ffmpeg库实现视频录制

可以通过QProcess调用ffmpeg命令行,也可以直接调用ffmpeg库,方便。 调用库 安装ffmpeg ffmpeg -version 没装就装 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入库路径,引入库 LIBS += -L/usr/lib/aarch64-l…...

百度 Al 智能体心响 App 上线

百度 AI 智能体心响 App 于 2025 年 4 月 17 日低调上线安卓应用市场,4 月 22 日正式登陆各大安卓应用市场。以下是对这款应用的详细介绍: 产品定位:这是一款以 “AI 任务完成引擎” 为核心的手机端超级智能体产品,定位为 “复杂任…...

进阶篇 第 2 篇:自相关性深度解析 - ACF 与 PACF 图完全指南

进阶篇 第 2 篇:自相关性深度解析 - ACF 与 PACF 图完全指南 (图片来源: Negative Space on Pexels) 欢迎来到进阶系列的第二篇!在上一篇,我们探讨了更高级的时间序列分解技术和强大的指数平滑 (ETS) 预测模型。ETS 模型通过巧妙的加权平均捕…...

【Java面试笔记:基础】7.int和Integer有什么区别?

在Java中,int和Integer虽然都用于表示整数值,但它们在本质、用法和特性上有显著差异。 1. int 和 Integer 的区别 int: 原始数据类型:int 是 Java 的 8 个原始数据类型之一,用于表示整数。性能优势:直接存…...

鸿蒙移动应用开发--渲染控制实验

任务:使用“对象数组”、“ForEach渲染”、“Badge角标组件”、“Grid布局”等相关知识,实现生效抽奖卡案例。如图1所示: 图1 生肖抽奖卡实例图 图1(a)中有6张生肖卡可以抽奖,每抽中一张,会通过弹层显示出来&#xf…...

AI代表企业签订的合同是否具有法律效力?

AI代表企业签订的合同是否具有法律效力? 首席数据官高鹏律师团队编著 在数字经济高速发展的今天,人工智能(AI)技术已广泛应用于商业活动,包括合同起草、审查甚至签署环节。然而,AI代表企业签订的合同是否具…...

安宝特分享|AR智能装备赋能企业效率跃升

AR装备开启智能培训新时代 在智能制造与数字化转型浪潮下,传统培训体系正面临深度重构。安宝特基于工业级AR智能终端打造的培训系统,可助力企业构建智慧培训新生态。 AR技术在不同领域的助力 01远程指导方面 相较于传统视频教学的单向输出模式&#x…...

SpringCloud组件—Eureka

一.背景 1.问题提出 我们在一个父项目下写了两个子项目,需要两个子项目之间相互调用。我们可以发送HTTP请求来获取我们想要的资源,具体实现的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 举个例子&#x…...

模型 螃蟹效应

系列文章分享模型,了解更多👉 模型_思维模型目录。个体互钳,团队难行。 1 螃蟹效应的应用 1.1 教育行业—优秀教师遭集体举报 行业背景:某市重点中学推行绩效改革,将班级升学率与教师奖金直接挂钩,打破原…...

符号速率估计——小波变换法

[TOC]符号速率估计——小波变换法 一、原理 1.Haar小波变换 小波变换在信号处理领域被成为数学显微镜,不同于傅里叶变换,小波变换可以观测信号随时间变换的频谱特征,因此,常用于时频分析。   当小波变换前后位置处于同一个码元…...

【架构】ANSI/IEEE 1471-2000标准深度解析:软件密集型系统架构描述推荐实践

引言 在软件工程领域,架构设计是确保系统成功的关键因素之一。随着软件系统日益复杂化,如何有效描述和沟通系统架构成为了一个亟待解决的问题。ANSI/IEEE 1471-2000(正式名称为"推荐软件密集型系统架构描述实践")应运而…...

python兴趣匹配算法

python兴趣匹配算法,用于推荐好友,短视频推荐等等领域 功能列表: 1.用户类的定义,存储用户的基本信息和兴趣。 2.计算两个用户之间兴趣的匹配分数,比较每一位是否相同。 3.根据匹配分数对候选人进行排序。 4.提供交互…...