网络原理(应用层)->HTTPS解

前言:
大家好我是小帅,今天我们来了解HTTPS,
个人主页:再无B~U~G


文章目录

  • 1.HTTPS
    • 1.1HTTPS 是什么?
    • 1.2 "加密" 是什么
    • 1.3 HTTPS 的⼯作过程
      • 1.3. 1对称加密
      • 1.3.2⾮对称加密
    • 1.4中间人攻击
    • 1.5 证书
      • 1.5.1 数字签名
  • 2. HTTPS问题


1.HTTPS

1.1HTTPS 是什么?

HTTPS 也是⼀个应⽤层协议. 是在 HTTP 协议的基础上引⼊了⼀个加密层.
HTTP 协议内容都是按照⽂本的⽅式明⽂传输的. 这就导致在传输过程中出现⼀些被篡改的情况.
在这里插入图片描述

臭名昭著的 “运营商劫持”
由于我们通过⽹络传输的任何的数据包都会经过运营商的⽹络设备(路由器, 交换机等), 那么运营商的⽹
络设备就可以解析出你传输的数据内容, 并进⾏篡改.
在这里插入图片描述
不⽌运营商可以劫持, 其他的 ⿊客 也可以⽤类似的⼿段进⾏劫持, 来窃取⽤⼾隐私信息, 或者篡改内容.
试想⼀下, 如果⿊客在⽤⼾登陆⽀付宝的时候获取到⽤⼾账⼾余额, 甚⾄获取到⽤⼾的⽀付密码…
在互联⽹上, 明⽂传输是⽐较危险的事情!!!


1.2 “加密” 是什么

加密就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂.
解密就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂.

在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密
钥.

1.3 HTTPS 的⼯作过程

既然要保证数据安全, 就需要进⾏ “加密”.
⽹络传输中不再直接传输明⽂了, ⽽是加密之后的 “密⽂”.
加密的⽅式有很多, 但是整体可以分成两⼤类: 对称加密⾮对称加密.


1.3. 1对称加密

对称加密其实就是通过同⼀个 “密钥” , 把明⽂加密成密⽂, 并且也能把密⽂解密成明⽂.
在这里插入图片描述
如果直接把密钥明⽂传输, 那么⿊客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了.
**因此密钥的传输也必须加密传输! **


1.3.2⾮对称加密

⾮对称加密要⽤到两个密钥, ⼀个叫做 “公钥”, ⼀个叫做 “私钥”.
私钥加密,公钥解密,这两个是相对的,发布出去的就是公钥
公钥和私钥是配对的. 最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多
在这里插入图片描述
那么接下来问题⼜来了

客⼾端如何获取到公钥?
数据的安全传输了吗?
客⼾端如何确定这个公钥不是⿊客伪造的?


1.4中间人攻击

为什么不能明文传输公钥?

假如说在对称加密里面,公钥的传输是明文传输的。
那么就会出现这种情况:

假设服务器和中间人都有能力生成公钥私钥。

  1. 客⼾端向服务器发起请求,服务器明⽂传送公钥S给客⼾端。
  2. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M,并将伪造报⽂发给客⼾端。
  3. 客⼾端收到报⽂,提取公钥M(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥X,⽤公钥M加密X,形成报⽂发送给服务器。
  4. . 中间⼈劫持后,直接⽤⾃⼰的私钥M’进⾏解密,得到通信秘钥X,再⽤曾经保存的服务端公钥S加密后,将报⽂推送给服务器。
    图解:
    在这里插入图片描述

为了解决中间人攻击问题,引入证书。


1.5 证书

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

  1. CA机构拥有⾮对称加密的私钥A和公钥A。
  2. 然后对数据摘要⽤CA私钥A’加密,得到数字签名S 。
  3. 考虑到CA能颁发CA机构不多,CA公钥也不多所以直接把CA的公钥配置到操作系统里面。

1.5.1 数字签名

签名的形成是基于⾮对称加密算法的,注意,⽬前暂时和https没有关系,不要和https中的公钥私钥搞
混了。
简单来说:就是通过AC私钥加密服务器的数据(公钥,服务器信息)。
在这里插入图片描述


通过证书解决解决中间人攻击
根本原因:是公钥是明文传输的,没有办法知道是否被替换。
解决办法:只要知道客户端拿到的公钥是服务器的公钥就可以解决。

  1. 客户端请求得到服务器公钥(请求)

  2. 服务器收到请求后,使用CA私钥加密(服务器信息和公钥),返回给客户端,
    解释一下这里的问题:
    中间人也有AC公钥啊,也可以解密服务器用AC私钥加密的数据得到公钥。那是否还会出现上面“中间人攻击问题”呢?
    但是要想再发给客户端(发中间人解密的服务器的数据),必须使用AC私钥加密,才能让客户端发现不了证书被解密过。但是只有服务器有AC私钥。所以即使中间人有AC公钥,也无济于事。

  3. 客户端使用AC公钥对数字签名进行解密,得到⼀个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对⽐ hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的。

  4. 这时候拿到的公钥就是服务器公钥

查看浏览器的受信任证书发布机构

  1. 在google浏览器的地址栏,输入如下命令,回车

chrome:
2.点击[管理证书] —> 受信任的根证书颁发机构 —> 详细信息 —> 所有 --> 公钥
在这里插入图片描述


2. HTTPS问题


中间⼈有没有可能篡改该证书?
上面我们已经回答了这个问题。

  1. 中间⼈篡改了证书的明⽂
  2. 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名。
  3. 如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈。

中间⼈整个掉包证书?

  1. 因为中间⼈没有CA私钥,所以⽆法制作假的证书(为什么?)
  2. 所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包
  3. 这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客⼾端依旧能够识别出来。
    永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的

为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?

常⻅的摘要算法有: MD5 和 SHA 系列
以 MD5 为例, 我们不需要研究具体的计算签名的过程, 只需要了解 MD5 的特点:

  • 定⻓: ⽆论多⻓的字符串, 计算出来的 MD5 值都是固定⻓度 (16字节版本或者32字节版本)
  • 分散: 源字符串只要改变⼀点点, 最终得到的 MD5 值都会差别很⼤.
  • 不可逆: 通过源字符串⽣成 MD5 很容易, 但是通过 MD5 还原成原串理论上是不可能的.

正因为 MD5 有这样的特性, 我们可以认为如果两个字符串的 MD5 值相同, 则认为这两个字符串相同.

完整流程
左侧都是客⼾端做的事情, 右侧都是服务器做的事情.
在这里插入图片描述
总结:
HTTPS ⼯作过程中涉及到的密钥有三组

第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使⽤这个私钥对证书的签名进⾏加密. 客⼾端通过这个公钥解密获取到证书的签名, 从⽽校验证书内容是否是篡改过.
第⼆组(⾮对称加密): ⽤于协商⽣成对称加密的密钥. 服务器⽣成这组 私钥-公钥 对, 然后通过证书把公钥传递给客⼾端. 然后客⼾端⽤这个公钥给⽣成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
第三组(对称加密): 客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.

为什么第三组要使用对称加密,不一直使用非对称加密呢?而且非对称加密安全的多
回答是:没必要
前两次组加密过程,使客户端和服务器密文获得了对方的公钥和私钥,,不存在中间人攻击安全问题,而且对称加密传输数据比非对称加密快。

好了,今天就到这里了,感谢观看。

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

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

相关文章

TOEIC 词汇专题:娱乐休闲篇

TOEIC 词汇专题:娱乐休闲篇 在娱乐和休闲活动中,我们会接触到许多特定的词汇。这些词汇涉及到活动入场、观众互动、评论等各个方面,帮助你在相关场景中更加自如。 1. 入场和观众 一些常用词汇帮助你轻松应对观众与入场管理相关的场景&#…

Spring框架---AOP技术

AOP概念的引入 第一步创建普通Maven项目 导入依赖 <dependencies><!--spring的核心--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version&g…

双指针算法篇——一快一慢须臾之间解决问题的飘逸与灵动(2)

前言&#xff1a; 上篇我们讲解了双指针算法的含义以及相关题型讲解&#xff0c;本次则趁热打铁&#xff0c;通过进阶题目的分析与讲解&#xff0c;促使我们更深入和灵活的理解运用双指针算法。 相关题目及讲解 一. 盛最多水的容器 题目链接&#xff1a;11. 盛最多水的容器 -…

koa项目实战 == 实现注册登录鉴权

一. 项目的初始化 1 npm 初始化 npm init -y生成package.json文件: 记录项目的依赖 2 git 初始化 git init生成’.git’隐藏文件夹, git 的本地仓库 3 创建 ReadMe 文件 二. 搭建项目 1 安装 Koa 框架 npm install koa2 编写最基本的 app 创建src/main.js const Koa…

ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验

文章目录 &#x1f340;引言&#x1f340;ONLYOFFICE 产品简介&#x1f340;功能与特点&#x1f340;体验与测评ONLYOFFICE 8.2&#x1f340;邀请用户使用&#x1f340; ONLYOFFICE 项目介绍&#x1f340;总结 &#x1f340;引言 在日常办公软件的选择中&#xff0c;WPS 和微软…

MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附下载链接

基于IMM算法的目标跟踪。利用卡尔曼滤波和多模型融合技术&#xff0c;能够在含噪声的环境中提高估计精度&#xff0c;带图像输出 文章目录 概述源代码运行结果代码结构与功能1. 初始化2. 仿真参数设置3. 模型参数设置4. 生成量测数据5. IMM算法初始化6. IMM迭代7. 绘图8. 辅助函…

Segmentation fault 问题解决

问题描述 执行有import torch代码的py 文件报Segmentation fault 原因分析&#xff1a; 查了网上说的几种可能性 import torch 时出现 “Segmentation fault” 错误&#xff0c;通常表示 PyTorch 的安装或配置存在问题 可能的原因 不兼容的库版本: PyTorch、CUDA 或其他依赖…

如何搭建汽车行业AI知识库:定义+好处+方法步骤

在汽车行业&#xff0c;大型车企面临着员工众多、价值链长、技术密集和知识传播难等挑战。如何通过有效的知识沉淀与应用&#xff0c;提升各部门协同效率&#xff0c;快速响应客户咨询&#xff0c;降低销售成本&#xff0c;并开启体系化、可持续性的知识管理建设&#xff0c;成…

QGIS:HCMGIS插件

插件GitHub地址&#xff1a;https://github.com/thangqd/HCMGIS。 以下对HCMGIS插件进行简单介绍&#xff0c;并演示如何进行地图数据下载。 插件简介 HCMGIS - Basemaps, Download OpenData, Batch Converter, VN-2000 Projections, and Field Calculation Utilities for QGI…

SpringBoot集成Shiro+Jwt+Redis

1. 概述 首先需要知道为什么使用 ShiroJwtRedis 进行登录认证和权限控制。 1. 为什么用Shiro&#xff1f; 主要用的是 shiro 的登录认证和权限控制功能。 Shiro 参见本栏目文章 &#x1f343;《Shiro实战》 2. 为什么用Jwt&#xff1f; Shiro 默认的 Session 机制来帮助实现…

jenkins 构建报错 Cannot run program “sh”

原因 在 windows 操作系统 jenkins 自动化部署的时候, 由于自动化构建的命令是 shell 执行的,而默认windows 从 path 路径拿到的 shell 没有 sh.exe &#xff0c;因此报错。 解决方法 前提是已经安装过 git WINR 输入cmd 打开命令行, 然后输入where git 获取 git 的路径, …

Springboot——对接支付宝实现扫码支付

文章目录 前言官方文档以及说明1、申请沙箱2、进入沙箱获取对应的关键信息3、拿到系统生成的公钥和密钥 注意事项创建springboot项目1、引入依赖2、配置连接参数3、创建配置类&#xff0c;用于接收这些参数4、中间类的定义(订单类)5、编写测试接口场景一、pc端请求后端后&#…

【云备份项目】json以及jsoncpp库的使用

目录 1.JSON 2.什么是 JSON&#xff1f; 3.JSON 发展史 4.为什么要使用 JSON&#xff1f; 5.JSON 的不足 6.JSON 应该如何存储&#xff1f; 7.什么时候会使用 JSON 7.1.定义接口 7.2.序列化 7.3.生成 Token 7.4.配置文件 8.JSON的语法规则 8.1.对象和数组 8.2.JS…

【C++篇】在秩序与混沌的交响乐中: STL之map容器的哲学探寻

文章目录 C map 容器详解&#xff1a;高效存储与快速查找前言第一章&#xff1a;C map 的概念1.1 map 的定义1.2 map 的特点 第二章&#xff1a;map 的构造方法2.1 常见构造函数2.1.1 示例&#xff1a;不同构造方法 2.2 相关文档 第三章&#xff1a;map 的常用操作3.1 插入操作…

HOT100_最大子数组和

class Solution {public int maxSubArray(int[] nums) {int[] dp new int[nums.length];int res nums[0];dp[0] nums[0];for(int i 1; i< nums.length; i){dp[i] Math.max(nums[i] ,dp[i-1] nums[i]);res Math.max(res, dp[i]);}return res;} }

contenteditable实现需要一个像文本域一样的可编辑框

我这里是因为左上和右下有一个固定的模板&#xff0c;所有用textarea有点不方便&#xff0c;查了下还有一个方法可以解决就是在需要编辑的元素上加上 :contenteditable"true" 完整代码如下&#xff0c;因为这个弹窗是两用的&#xff0c;所以用messageType做了一下判…

SpringBoot源码解析(一)

SpringBoot自动装配原理 SpringBootApplication注解 我们在使用SpringBoot时&#xff0c;通常使用的是SpringBootApplication这个注解&#xff0c;比如&#xff1a; 而这个注解的定义为下图&#xff0c;可以发现这个注解上有另外三个注解&#xff1a;SpringBootConfiguration…

WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现

文章目录 1、案例效果2、案例实现1、文件创建2.代码实现3、界面与功能代码3、总结1、案例效果 提示:这里可以添加本文要记录的大概内容: 2、案例实现 1、文件创建 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 ParticleWindow.xaml,在 Models 文件夹下创建粒子…

js中怎么把excel和pdf文件转换成图片打包下载

index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文件转图片工具</title><!-- 本…

盘点 2024 十大免费/开源 WAF

WAF 是 Web Application Firewall 的缩写&#xff0c;也被称为 Web 应用防火墙。区别于传统防火墙&#xff0c;WAF 工作在应用层&#xff0c;对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果&#xff0c;使其免于受到黑客的攻击。 近几年经济增速开始放缓&#xff0c;科…