HTTP安全与HTTPS协议
目录
Http协议的安全问题
常见的加密方式
防止窃听
单向散列函数
单向散列值的特点
加密与解密
对称加密与非对称加密
对称加密的密钥配送问题
密钥配送问题的解决
非对称加密
前言:
公钥与私钥
非对称加密过程
混合密码系统
前言:
混合密码——加密
加密步骤
混合密码——解密
解密步骤
数字签名
前言
在数字签名技术中,有以下两种行为
数字签名过程
过程改进
数字签名的作用
非对称加密与签名公钥私钥的角色
公钥的合法性
证书
前言
证书的使用
证书的注册和下载
HTTPS
前言
SSL/TLS
SSL/TLS工作在那一层
SSL协议功能
HTTPS的通信过程
TLS 1.2的连接
1.client Hello(方向:客户端到服务器)
2.server Hello(方向:服务器到客户端)
3.certificate(方向:服务器到客户端)
4.server key exchange(方向:服务器到客户端)
5.server Hello Done(方向:服务器到客户端)
6.client key exchange(方向:客户端到服务器)
7.change cipher spec(方向:客户端到服务器)
8.finished(方向:客户端到服务器)
9.change cipher spec(方向:服务器到客户端)
10.finished(方向:服务器到客户端)
Http协议的安全问题
前言:HTTP协议默认是采取明文传输的,因此会有很大的安全隐患
常见的提高安全性的方法:对通信内容进行加密后再进行传输
常见的加密方式
- 不可逆:单向散列函数(MD5、SHA)
- 可逆:对称加密(DES、3DES、AES等)、非对称加密(RSA)
- 其他:混合密码系统、数字签名、证书
防止窃听
理解:发送方和接收方提前约定好加密解密方式,发送方将明文进行加密后变为密文在网上传输,接收方接收到密文后进行解密得到明文
单向散列函数
前言:单向散列函数,可以根据消息内容计算出散列值,其也被称为消息摘要函数或哈希函数,输出的散列值也被称为消息摘要或指纹
注意:散列值的长度和消息的长度无关,无论消息是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值,但是拿到散列值推不回去以前是什么数据内容(单向性)
单向散列值的特点
- 根据任意长度的消息,计算出固定长度的散列值
- 计算速度快,能快速计算出散列值
- 消息不同,散列值也不同(哪怕只有1bit的区别,也会产生完全不同的散列值)
- 具备单向性
加密与解密
过程:
- 加密:使用密钥通过某种算法将明文加密成密文
- 解密:使用密钥通过某种算法将密文转化为明文
对称加密与非对称加密
- 对称加密:加密中的密钥和解密中的密钥是同一把密钥
- 非对称加密:加密中用到的密钥和解密中用到的密钥是不同的
对称加密的密钥配送问题
总结:在对称加密的消息传输的过程中,加密的信息和密钥容易被黑客窃听,最终导致消息的泄露
密钥配送问题的解决
- 实现共享密钥(私下共享)
- 密钥分配中心(KDC)
- Diffie-Hellman密钥交换
- 非对称加密
非对称加密
前言:
- 在非对称加密中,密钥分为加密密钥、解密密钥两种,他们并不是同一个密钥
- 非对称加密的加密与解密速度相对于对称加密来说很慢
公钥与私钥
- 公钥:一般是公开的用于加密,因此该密钥也称为公钥,因此非对称加密称为公钥密码
- 私钥:由消息接受者自己保管的用于解密,不能公开,因此也被称为私钥
非对称加密过程
- 由消息的接收者生成一对公钥、私钥
- 将公钥发送给消息的发送者
- 消息的发送者使用公钥加密信息
- 消息接收者使用私钥解密信息
注意:
- 公钥和私钥是一一对应的,不能单独生成
- 一对公钥和私钥统称为密钥对
- 由公钥加密的密文,必须使用与公钥对应的私钥才能解密,由私钥加密的密文,必须使用与该公钥对应的私钥才能解密
混合密码系统
前言:
- 对称加密不能很好的解决密钥配送问题
- 非对称加密解密速度比较慢
含义:混合密码系统是将对称加密和非对称加密的优势相结合的方法
注意:网络上的密码通信所用的SSL/TLS都运用了混合密码系统
混合密码——加密
会话密钥:通信时随机产生的临时密钥作为对称加密的密钥,用于加密信息提高速度
加密步骤
- 首先,消息发送者要拥有消息接收者的公钥
- 生成会话密钥,作为对称加密的密钥加密信息
- 用消息接受者的公钥,加密会话密钥
- 将前两步生成的加密结果一并发给消息接收者
混合密码——解密
解密步骤
- 消息接收者用自己的私钥解密出会话密钥
- 再用第一步解密出来的会话密钥解密消息
数字签名
前言
以下场景alice给bob发消息(我喜欢你)但是出现了以下情况
这里alice发的内容可能是被篡改的,或者有人伪装的,或者本来就是alice发的,但是它可以否认,那么bob如何确定这段消息的真实性呢?
注意:数字签名并不是用来数据加密的,而是要保证数据的可靠性的
在数字签名技术中,有以下两种行为
- 生成签名:由消息的发送者完成,通过“签名密钥”生成
- 验证签名:由消息的接收者完成,通过“验证密钥”来验证
数字签名过程
整个过程:
- 发送者生成一对密钥对,同时使公钥让接收者知道
- 发送者将要发送的消息用自己的私钥进行加密,进而变成签名
- 发送者将消息及签名一并发送给消息接收者
- 接收者收到消息及签名后,用发送者的公钥进行解密签名得到数据
- 将解密的数据与消息比较,若一致则签名验证成功
注意:一般数字签名不会对整个消息进行加密解密,这样的话效率太慢
过程改进
整个过程:
- 发送者生成一对密钥对,同时使公钥让接收者知道
- 发送者将消息通过单向散列函数计算出散列值
- 发送者用自己的私钥将这个散列值进行加密得到签名
- 发送者将消息及签名一并发送给接收者
- 接收者用公钥解密签名得到散列值1
- 接收者对消息进行散列计算得到散列值2
- 接收者对比两个散列值,若散列值一致则签名验证成功
数字签名的作用
- 确认消息的完整性
- 识别消息是否被篡改
- 防止消息发送人否认
非对称加密与签名公钥私钥的角色
- 既然是加密,那肯定是不希望别人知道我的信息,所以只有我才能解密(公钥负责加密。私钥负责解密)
- 既然是签名,那肯定不希望有人冒充我发信息,所以只有我才能签名(私钥负责签名,公钥负责验签)
公钥的合法性
前言:若遭遇了中间人攻击,那么公钥将是可以伪造的,如何验证公钥的合法性(证书)
简单理解:中间人Mallory对接收人的公钥以及发送者的密文进行了劫持,将自己的公钥发送给发送人, 接收发送人发送过来的密文并将密文篡改发送给接收人(这里公钥被篡改了)
证书
前言
说到证书首先会联想到驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的,而密码学中的证书全程叫做公钥证书,跟驾驶证类似,里面有姓名、邮箱等个人信息,以及此人的公钥并由认证机构(certificate authority)施加数字签名
注意:
- CA就是能够认定"公钥确实属于此人"并能够生成数字签名的个人或组织
- 一些认证机构的公钥已经被集成到浏览器当中了
证书的使用
证书的注册和下载
HTTPS
前言
含义:HTTPS(hyperText transfer protocol secure),译为超文本传输安全协议,常称为HTTP over TLS、HTTP over SSL、HTTP Secure;其是由网景公司于1994年提出的,其是以安全为目标的HTTP通道,简单讲就是HTTP的安全版本。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
注意:
- HTTPS的默认端口号为443
- HTTPS协议需要ca申请整数,一般免费证书很少,需要交费。
- HTTPS是在HTTP的基础上使用SSL/TLS来加密报文,对窃听和中间人攻击提供了合理的防护
- SSL/TLS也可以用在其他协议上(FTP——FTPS、SMTP——SMTPS)
SSL/TLS
- SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证,使用数字签名确保完整性,使用加密确保私密性,以实现客户端和服务器之间的安全通信。该协议由两层组成:SSL记录协议和SSL握手协议
- TLS:(Transport Layer Security)传输层安全协议,前身是SSL
SSL/TLS工作在那一层
SSL协议功能
- 保证传输数据的保密性
- 保证传输数据的完整性
- 实现通信双方的互相身份认证
HTTPS的通信过程
- TCP的三次握手
- TLS的连接
- HTTP请求和响应
TLS 1.2的连接
注意:图片中省略了中间产生的一些ACK确认
1.client Hello(方向:客户端到服务器)
- 所用TLS版本号
- 支持的加密组件列表(加密组件是指所使用的加密算法及密钥长度等)
- 一个client随机数
2.server Hello(方向:服务器到客户端)
- TLS版本号
- 从客户端加密组件里面中选择好的加密组件
- 一个server随机数
3.certificate(方向:服务器到客户端)
- 服务器的公钥证书(被CA签名过的)
4.server key exchange(方向:服务器到客户端)
- 用以实现ECDHE算法(一种密钥交换算法)中的一个参数(Server Params——为了防止伪造,该参数经过了服务器私钥签名)
5.server Hello Done(方向:服务器到客户端)
- 告知客户端,协商部分结束
到目前为止,客户端和服务器通过明文共享了 client random、server random、server params(客户端使用服务器的公钥进行验证),而且客户端也拿到了服务器的公钥证书,之后客户端就开始通过浏览器内置的CA公钥来验证证书的有效性,若证书没问题就可以拿到证书里面的服务器公钥
6.client key exchange(方向:客户端到服务器)
- 用以实现ECDHE算法的另一个参数(client params)
到目前为止,客户端和服务器都含有ECDHE算法需要的两个参数:server params、client params;此时客户端和服务器都可以使用ECDHE算法;这时根据这两个参数计算出一个随机密钥串:Pre-master secret,然后结合client random、server random、Pre-master secret生成一个主密钥,最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥、服务器发送用的会话密钥等(采用对称加密的方式——客户端发送的数据用客户端会话密钥加密,服务器收到该密文也用客户端会话密钥进行解密,反之亦然)
7.change cipher spec(方向:客户端到服务器)
- 告知服务器:之后的通信会采用计算出来的客户端会话密钥进行加密
8.finished(方向:客户端到服务器)
- 告知服务器,该TLS连接差不多了
- 包含连接至今全部报文的整体校验值(摘要),(用客户端会话密钥)加密后发送给服务器
注意:这次握手协商是否成功要以服务器是否能够正确解密该报文作为判断标准
9.change cipher spec(方向:服务器到客户端)
- 告知客户端:之后的通信会采用计算出来的服务器会话密钥进行加密
10.finished(方向:服务器到客户端)
- 告知客户端,该TLS连接差不多了
- 服务器将数据用服务端会话密钥加密发送给客户端
到此为止,客户端服务器都验证加密解密没问题,握手正式结束;后面开始传输(session密钥)加密的HTTP请求和响应
相关文章:

HTTP安全与HTTPS协议
目录 Http协议的安全问题 常见的加密方式 防止窃听 单向散列函数 单向散列值的特点 加密与解密 对称加密与非对称加密 对称加密的密钥配送问题 密钥配送问题的解决 非对称加密 前言: 公钥与私钥 非对称加密过程 混合密码系统 前言: 混合…...
【c++】类和对象4—c++对象模型和this指针
文章目录成员变量和成员函数分开存储this指针的用途空指针访问成员函数const修饰成员函数成员变量和成员函数分开存储 在c中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person1…...

嵌入式Qt 开发一个视频播放器
上篇文章:嵌入式 Qt开发一个音乐播放器,使用Qt制作了一个音乐播放器,并在OK3568开发板上进行了运行测试,实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件,可以实现视频列表的显示与选择播放等,先…...

阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代
Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后,迅速在 Java 微服务生态中,成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上,保留 Java 开发习惯,加入分布式特性,提供了一系列通用工…...

边界检测方法总结
1:经典的边界检测方法有sobel,拉普拉斯,canny等。 sobel: def get_sobel(in_chan, out_chan):filter_x np.array([[1, 0, -1],[2, 0, -2],[1, 0, -1],]).astype(np.float32)filter_y np.array([[1, 2, 1],[0, 0, 0],[-1, -2, -…...

Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据
Softing dataFEED OPC Suite Extended V5.25的新功能——“文件读取(File Read)”,支持访问XML文件中可用的过程数据。 (文件读取功能支持获取由XML文件提供的过程数据)dataFEED OPC Suite Extended是用于OPC通信和云连…...

央行罚单!金融机构被罚原因揭秘
近日,人民银行公布了2023年首批行政处罚罚单,引发业内广泛关注。 顶象防御云业务安全情报中心统计了人民银行官网,2020年1月至2023年2月10日期间,公布的101份行政处罚。 统计显示,16家金融机构被罚27066.9万元&#…...
js中var、let、const详解
首先 var、let、const 在项目开发中都是用来声明变量的,在ES5中只有两种声明变量的方法:var和function,在ES6中新增了 let、const、class、import 四种声明变量的方法,本文主要讲解 var、let 与 const 的语法,其他的大…...
【数据库】MySQL概念知识语法-基础篇(DCL),真的很详细,一篇文章你就会了
目录通用语法及分类DCL(数据控制语言)管理用户查询用户权限控制函数字符串函数数值函数日期函数流程函数约束外键约束多表查询一对多多对多一对一通用语法及分类 ● DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段&…...

Blender骨骼动画快速教程
有关创建模型的更多详细信息,请参阅在 Blender 中创建模型。 我们将为这个例子做一个非常简单的模型——蠕虫! 从我们的初始立方体开始,进入编辑模式,切换到面选择,然后选择任何面: 推荐:将 NSD…...

【C++算法】dfs深度优先搜索(下) ——【全面深度剖析+经典例题展示】
💃🏼 本人简介:男 👶🏼 年龄:18 🤞 作者:那就叫我亮亮叭 📕 专栏:关于C/C那点破事 文章目录0.0 写在前面1. 中国象棋1.1 题干信息① 背景说明概述② 问题描述…...

HIVE 基础(三)
目录 建表语句 表数据 Hive建表高阶语句 - CTAS and WITH CTAS – as select方式建表 CTE (CTAS with Common Table Expression) LIKE 创建临时表 清空表数据 修改表(Alter针对元数据) 改名 修正表文件格式 修改列名 添加列 替换列 动态分…...

redis-cluster集群搭建
安装redis所需环境 yum install -y gcc-c yum install -y wget 创建文件夹 cd / mkdir redis/redis-cluster/7001 cd redis/redis-cluster mkdir 7002 7003 7004 7005 7006 7007 7008下载redis压缩包并解压安装 wget https://download.redis.io/redis-stable.tar.gz tar -…...
【C语言】可变参数列表va_list
本篇博客让我们来认识一下C语言学习过程中往往被忽略的可变参数列表 所谓可变参数,就是一个不限定参数数量的函数,我们可以往里面传入任意个数的参数,以达成某些目的。 关联:C11可变模板参数 1.函数 #include <stdarg.h>…...

CentOS7.6 MySQL8安装
1 检查是否安装过 MySQL rpm -qa | grep -i mysqlmariadb rpm -qa | grep mariadb2 卸载之前的安装 MySQL rpm -e --nodeps 软件名 //强力删除,对相关依赖的文件也进行强力删除卸载 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_643 官网下载 MySQL :: D…...
安装Tomcat的步骤?
首先先完成JDK配置,javac -version 检测 1.把tomcat下载到本地硬盘 2.创建tomcat8.0文件夹,完成解压(免安装)4.打开解压之后的目录,进入bin目录,双击startup.bat,启动tomcat5.可以看到弹出一个黑色的窗口,不要关闭,如果关闭意味着…...

Redis之分布式锁
随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的 Java API并不能提供分布式锁的能力。为了解决这个问题…...

2022年中国前10电商GMV总结
我是卢松松,点点上面的头像,欢迎关注我哦! 1,阿里8万亿;2,京东3万亿;3,拼多多3万亿;4,小程序私域电商3万亿;5,抖音电商1.4万亿。6,抖音本地生活服务电商600亿。7…...
ES6新增扩展:字符串-数值-数组-函数-对象
ES6新增扩展字符串的扩展判断字符串是否包含在另一个字符中字符串补全字符串重复消除字符串空格replaceAll()替换全部字符串at字符串匹配输出数值的扩展数值分隔符检测数值是否有限检测是否为NaNNumber.parseInt()、Number.parseFloat()isInteger()判断是否为整数Math.sign()判…...
python中import原理
0. 前言 在 python 中引入 Module 是再常见不过了,那么当我们 import 时它做了什么事情呢?它是如何加载 Module 使用的呢? 1. 什么是 module? 一般,Module 是一个后缀为 .py 的文件,其 module 名称一般…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...