HTTPS协议详解
目录
前言
一、HTTPS协议
1、加密是什么
2、为什么要加密
二、常见加密方式
1、对称加密
2、非对称加密
三、数据摘要与数据指纹
1、数据摘要
2、数据指纹
四、HTTPS加密策略探究
1、只使用对称加密
2、只使用非对称加密
3、双方都使用非对称加密
4、对称加密+非对称加密
5、知识补充
(1)CA证书
(2)证书形成过程
(3)验证证书的过程
6、证书认证+对称加密+非对称加密
7、常见问题
(1)中间人有没有可能篡改证书
(2)中间人有没有可能掉包整个证书
(3)为什么CA形成证书时要形成数字签名
(4)为什么不直接将数据进行加密,而是先进行哈希散列
前言
本章主要介绍关于HTTPS协议,以及HTTPS协议加密解密整个过程,这也是面试中常考的一个话题,接下来我们一起进入网络的世界吧!
一、HTTPS协议
HTTPS协议仅仅只是在HTTP协议上增加了一个加密层,可以说HTTPS协议是HTTP协议的升级版;
1、加密是什么
所谓加密就是将HTTP报文通过某种手段,由明文变为密文,比如我们之前可能都做过一道题目;如何不创建变量来交换两个整型;如有下面两个变量;
int a = 10;
int b = 20;
可能在没有学习异或运算符前,这题确实很困难,但是在我们学习完异或运算符后,可以巧妙利用异或运算符的特性来解决这道题目;异或运算符有如下特性;
a ^ a = 0;
a ^ 0 = a;
利用如上特性,我们不难解出上题;
a = a ^ b; ---> int c = a ^ b;
b = a ^ b; ---> b = c ^ b -> a ^ b ^ b;
a = a ^ b; ---> a = c ^ c ^ b;
我们可以将上面a与b异或的结果看作一个加密过程;只有通过特定的解密才可得到真正的结果;
2、为什么要加密
前面我们提过,HTTP协议无论是通过GET请求提交参数或是POST请求提交参数都可能会被别看看到;因为它们是明文显示的,这会造成私人信息泄漏的风险;除了私人信息泄漏风险,同时在互联网早期时,经常由于HTTP协议的不私密导致,用户在发送HTTP请求时,在传输过程中,可能遇到中间人,这个中间人可能会篡改HTTP请求内容;导致出现各种情况,如我们在网上发送一个下载QQ音乐的请求,可能会被运营商等中间人劫持,给我们发送一个下来网易云音乐的连接,而普通用户并无法区分连接,一股脑下载后发现下载的是另一个软件,这种类似问题频频出现,因此我们必须给我们的HTTP请求进行加密,所以HTTPS协议因此诞生了;
二、常见加密方式
1、对称加密
所谓对称加密就是采用单密钥的方式生成一对密钥对,其中的每一个密钥都可以进行加密与解密的操作;
特点:算法公开、计算量小、加密速度快、效率高;
常见对称加密算法:DES、RC2等
2、非对称加密
这种通常需要两个密钥来进行加密解密,其中这两个密钥一把叫做公钥,这把密钥是可以被公开的,另一把叫私钥,这把密钥通常私密保存;
特点:算法强度复杂、加密解密速度对比对称加密慢很多;
公钥加密只能通过私钥解密
私钥加密只能通过公钥解密
三、数据摘要与数据指纹
1、数据摘要
所谓数据摘要指的是将数据通过单散列哈希函数生成一串固定长度的字符串,我们称其为数据摘要;
特点:唯一性很强,通常不会发生冲突;
数据摘要 VS 加密
数据摘要是单向的,无法逆向还原原数据;而加密可以通过解密来进行还原原数据;
2、数据指纹
数据指纹指的是将我们的数据摘要再次进行加密,形成的便是数据指纹,也可以称作数字签名;
四、HTTPS加密策略探究
1、只使用对称加密
如果通信双方各持有一对密钥X,双方即可通过密钥X来进行通信;
看着似乎合理,双方各持有一个密钥,客户端发送前将hello通过密钥X加密成加密报文,然后服务端收到加密报文后将加密报文通过X进行解密成hello;
那么问题来了,如何让双方看到同一对密钥呢?通过服务端生成后发送给客户端吗?那样在发送密钥时也可能被截获吗?截获后双方又不就不是加密通信了吗?那样不就又回到了最开始的问题吗?因此这种方案显然是不行的;
2、只使用非对称加密
若只使用非对称加密策略,此时假设我们服务端生成一把公钥Y和一把私钥X;
当我们将公钥Y通过网络发送给客户端后,公钥Y不怕被别人截获,此时客户端可通过公钥Y进行加密,通过公钥Y发送的信息只能由私钥X来进行解密,因此即使中间人得到了公钥Y也无法进行解密,这样看起来好像很合理,实际上漏洞百出;
我们如何保证服务端到客户端的安全呢?这种只使用非对称加密的方式显然只能保证一端的安全性;
3、双方都使用非对称加密
若双方都拥有一对非对称密钥对,如客户端拥有公钥X与私钥X',服务端拥有公钥Y与私钥Y'。
客户端和服务端分别把自己的公钥给对方,自己持有私钥,此时每次进行通信时使用对端的公钥进行加密,由于中间人没有双反私钥,因此此时无法获取双方加密密文了;这种方案看着似乎也可以,实际上也存在漏洞;上面的安全通信假设都是建立在双方已经建立好安全通信的准备了;若是双方在交换公钥时,中间人就已经开始出手了呢?关于这个我们后面再继续讲解中间人是如何进行攻击的。
4、对称加密+非对称加密
假设服务端拥有一对非对称密钥,公钥X与私钥X’,客户端拥有对称密钥Y;
当服务端将公钥X传输给客户端时,客户端将自己的对称密钥Y经过公钥X进行加密,发送给服务端,服务端收到后用自己的私钥X‘对客户端的对称密钥进行解密,此后双方使用对称密钥Y进行通信;
这种方案看起来似乎也没有多大问题,可这一切都建立在双方已经成功建立好加密通信信道后,若是在它们交换密钥过程中同样也会出现问题,就如同上面那种情况一样,关于如何破解,同样,我们将在下面进行介绍;
当服务端将自己的公钥X发送给服务端时,被中间人劫持,获得了公钥X,并且中间人也生成一对非对称密钥对,将公钥Z给客户端,此时客户端并不知道这个公钥Z是来自中间人的,他认为他收到了来自服务端的公钥Z,因此他将自己的对称密钥Y通过公钥Z进行加密,并发送给服务端,此时也被中间人劫持,并用自己的私钥Z‘对其进行解密,得到了客户端的对称密钥Y,然后中间人还将Y用服务端的公钥X进行加密,发送给服务端,服务端也不知道这个来自于中间人,也对其进行解密得到了客户端的对称密钥Y,此后它们通过对称密钥Y进行通信时,由于中间人也有对称密钥Y,此时它们之间的通信都可以被中间人轻松获取,这样就破解了上述方式,第三种加密方式也可以通过该方法进行破解;
5、知识补充
(1)CA证书
服务端使用HTTPS协议前都需要向CA机构申请一份CA证书,证书就像身份证具有权威性;证书中里最少包含如下信息
(1)证书发布机构
(2)证书有效期
(3)公钥
(4)证书所有者
(5)签名
(6)域名
等等信息
(2)证书形成过程
公司想要CA证书需要向CA机构提交申请资料,CA机构会拿公司提供的资料的原文件内容经过哈希散列形成数据摘要,再拿数据摘要使用CA私钥进行加密形成数字签名,最后拿数字签名和证书资料合起来,变成了我们一份完整的证书;
(3)验证证书的过程
如何验证一份证书是否合法呢?如下所示;
我们拿到一份证书后,取出其数据部分,使用CA同样的哈希函数进行散列形成数据摘要,然后拿着数字签名使用CA的公钥进行解密,也得到一份数据摘要,如果这两份数据摘要相同则表示这份证书没有任何问题;因此若是对证书中的信息进行任何修改,得到的两个数据摘要都不会相同;
6、证书认证+对称加密+非对称加密
这种加密策略也就是HTTPS采用的加密策略,
首先需要服务端向CA机构申请CA证书,得到CA证书后,每次有客户端发送连接请求时,服务端首先都会给客户端发送一份自己的证书,客户端拿到证书后,对证书进行验证,若验证通过,客户端会取出证书中数据,如域名、服务端公钥等,若域名与我要访问的服务端域名匹配,说明证书没有被完整掉包过,然后生成自己的一对对称密钥,然后用服务端的公钥对对称密钥进行加密,接着将加密报文发送给服务端,由于只有服务端有私钥,因此只有服务端可以获得客户端的对称密钥,服务端获得客户端的对称密钥后,双方就可以使用这个对称密钥进行后续的通信了;
7、常见问题
(1)中间人有没有可能篡改证书
若篡改证书数据内容,在验证证书合法性时,由于数据被修改,形成的数据摘要与数字指纹形成的数据摘要不同,因此可以判断出证书不合法;
又由于中间人没有CA机构的私钥,因此也不可能再用修改后的数据形成一份数字指纹,因为大家都只使用CA机构的公钥,而私钥和公钥是配对的,因此中间人也不可能在生成一份修改数据后的数字指纹;
(2)中间人有没有可能掉包整个证书
若中间人也想CA机构申请了一份证书,在服务端发送证书给客户端时,中间人直接掉包整个证书,此时客户端在验证证书时,发现证书数据中的域名与自己访问的域名不一致,也会发现有问题,因此防止了中间人掉包整个证书的可能;
(3)为什么CA形成证书时要形成数字签名
数字签名是为了防止中间人对数据进行篡改,若没有数字签名验证,中间人可以修改证书中的数据,此时客户端收到证书后,也不知道证书内容是否被修改,证书内的公钥一旦被修改,又回到了之前的问题了;形成数字签名可以确保服务端提供公钥的合法性;
(4)为什么不直接将数据进行加密,而是先进行哈希散列
因为哈希散列后的数据大小是固定的,这样可以大大减小签名密文的长度,加快验证数字签名的运算速度;
相关文章:

HTTPS协议详解
目录 前言 一、HTTPS协议 1、加密是什么 2、为什么要加密 二、常见加密方式 1、对称加密 2、非对称加密 三、数据摘要与数据指纹 1、数据摘要 2、数据指纹 四、HTTPS加密策略探究 1、只使用对称加密 2、只使用非对称加密 3、双方都使用非对称加密 4、对称加密非…...
菜鸟学习vue3笔记-vue3 router回顾
1、路由router pnpm i vue-router2、创建使用环境 1.src下创建 router文件夹、里面创建index.ts文件 //创建一个路由暴露出去//1.引入createRouter import { createRouter, createWebHistory } from "vue-router";// import Home from ../components/Home.vue//…...

Mybatis枚举类型处理和类型处理器
专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…...

2023 NCTF writeup
CRYPTO Sign 直接给了fx,gx,等于私钥给了,直接套代码,具体可以参考: https://0xffff.one/d/1424 fx [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…...
golang的大杀器协程goroutine
在Golang中,协程(Goroutine)是轻量级的执行单元,用于实现并发编程。它是Golang语言的重要组成部分,提供了简洁、高效的方式来处理并发任务。 特点: 1)轻量级:Go语言的协程是轻量级…...

[Angular] 笔记 9:list/detail 页面以及@Output
1. Output input 好比重力,向下传递数据,list 传给 detail,smart 组件传给 dumb 组件,父组件传给子组件。input 顾名思义,输入数据给组件。 output 与之相反,好比火箭,向上传递数据或事件。ou…...

Linux学习笔记(一)
如果有自己的物理服务器请先查看这篇文章 文章目录 网卡配置Linux基础指令ls:列出目录内容cd(mkdir.rmkdir): 切换文件夹(创建,删除操作)cp:复制文件或目录mv:文件/文件夹移动cat:查看文件vi:文件查看编辑man:查看命令手册more: 查看文件内容less : 查看文件内容 ps: 显示当前进…...
Python 爬虫 教程
python爬虫框架:Scrapyd,Feapder,Gerapy 参考文章: python爬虫工程师,如何从零开始部署ScrapydFeapderGerapy? - 知乎 神器!五分钟完成大型爬虫项目 - 知乎 爬虫框架-feapder - 知乎 scrap…...

uniapp原生插件 - android原生插件打包流程 ( 避坑指南一)
【彩带- 避坑知识点】: 当时开发中安卓插件打包成功后,uniapp引用插件aar,用云打包 ,总是提示不包含插件。原因是因为module的androidManifest.xml文件没有注册activity。 这一步 很重要,一定要注册。 --------------------------…...

搭建maven私服
maven maven简介 什么是maven? Maven这个单词来自于意第绪语(犹太语),意为知识的积累。 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以…...

EST-100身份证社保卡签批屏按捺终端PC版web版本http协议接口文档,支持web网页开发对接使用
<!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,initial-scale1.0"><title>演示DEMO</title><script type"text/…...
基于SpringBoot的毕业论文管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的毕业论文管理系统,java…...

iToF人脸识别
iToF(间接飞行时间)是一种测量光飞行时间的技术,主要应用于人脸识别。 iToF人脸识别技术在哪些场景下会用到 iToF人脸识别技术可以应用于许多场景,以下是一些常见的应用场景: 平安城市:在城市监控系统中,iToF人脸识别技术可以用于实时监控、目标检测和识别,以及异常行为…...

Django开发3
Django开发3 Django开发编辑用户9.靓号管理9.1 表结构9.2 靓号列表9.3 新建靓号9.4 编辑靓号9.5 搜索手机号9.6 分页 10.时间插件11.ModelForm和BootStrap操作 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! Django开发 部门管…...

MS2358:96KHz、24bit 音频 ADC
产品简述 MS2358 是带有采样速率 8kHz-96kHz 的立体声音频模数 转换器,适合于面向消费者的专业音频系统。 MS2358 通过使用增强型双位 Δ - ∑ 技术来实现其高精度 的特点。 MS2358 支持单端的模拟输入,所以不需要外部器 件,非常适…...

【Android12】Android Framework系列---tombstone墓碑生成机制
tombstone墓碑生成机制 Android中程序在运行时会遇到各种各样的问题,相应的就会产生各种异常信号,比如常见的异常信号 Singal 11:Segmentation fault表示无效的地址进行了操作,比如内存越界、空指针调用等。 Android中在进程(主要…...

中间件系列 - Redis入门到实战(原理篇)
前言 学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记,如有侵扰,联系删除 学习目标 Redis数据结构Redis网…...
P2249 【深基13.例1】查找
P2249 【深基13.例1】查找 P2249 【深基13.例1】查找 题意 输入n 个不超过10的9次方的单调不减的(就是后面的数字不小于前面的数字)非负整数a1,a2,a3…然后进行 m 次询问。对于每次询问,给出一个整数q,要…...
linux常用shell脚本
查看系统当前进程连接数 netstat -an | grep ESTABLISHED | wc -l 如何在/usr目录下找出大小超过10MB的文件? find /usr -type f -size 10240k 添加一条到192.168.3.0/24的路由,网关为192.168.1.254? route add -net 192.168.3.0/24 netmask 255.2…...

Rust学习笔记005:结构体 struct
在 Rust 中,struct 是一种用于创建自定义数据类型的关键字,它允许你定义和组织数据的结构。struct 可以包含多个不同类型的字段(fields),每个字段都有一个名称和一个类型。 定义结构体 下面是一个简单的例子ÿ…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...