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 名称一般…...
如何自动部署GitLab项目
如何自动部署 原理 GitLab有预制的钩子, 在代码提交/合并等事件中,会自动调用WebHoos, 即向该URL发送POST请求在布署服务器上监听该POST, 验证通过后执行相关的布置Shell脚本, 即可完成自动布署 配置环境 安装Python和Pip 2.如果需要, 安装python的requests模块和argparse模…...
SON.stringify()和JSON.parse()之间的转换
1.JSON.stringify() 作用:将对象、数组转换成字符串 const obj {code: "500",message: "出错了", }; const jsonString JSON.stringify(obj); console.log(jsonString);//"{"code":"Mark Lee","message"…...
vue3子组件获取并修改父组件的值
在子组件中,父组件传递来的 prop 是只读的,但是确实有修改的需求,故此做个小小研究 // 父组件使用模版:update:xxx"dialogVisible $event" // 子组件使用模版 // const emits defineEmits([update:xxx]); // emits(u…...

浅聊一下,大模型应用架构 | 工程研发的算法修养系列(二)
大模型应用架构基础 AI应用演进概述 人工智能应用的发展经历了多个关键阶段,每个阶段都代表着技术范式的重大转变。 大语言模型基础 大语言模型(LLM)作为现代AI应用的核心组件,具有独特的技术特性和能力边界,理解这些基础对架构设计至关重要。…...

【OpenGL学习】(五)自定义着色器类
文章目录 【OpenGL学习】(五)自定义着色器类着色器类插值着色统一着色 【OpenGL学习】(五)自定义着色器类 项目结构: 着色器类 // shader_s.h #ifndef SHADER_H #define SHADER_H#include <glad/glad.h>#inc…...

PLSQLDeveloper配置OracleInstantClient连接Oracle数据库
PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 文章目录 PL/SQLDeveloper配置Oracle Instant Client连接Oracle数据库 1. Oracle Instant Client下载与配置1. Oracle Instant Client下载2. Oracle Instant Client解压配置1. 解压2. 配置 2. PL/SQL Developer下载、…...
登高架设作业操作证考试:理论题库高频考点有哪些?
一、安全基础知识 法律法规 《安全生产法》《特种作业人员安全技术培训考核管理规定》中关于登高作业的强制性要求(如持证上岗、培训时限等)。 事故责任划分:未系安全带、无监护作业等违规行为的法律后果。 个人防护 安全带使用标准&#…...
【Prompt实战】国际翻译小组
本文原创作者:姚瑞南 AI-agent 大模型运营专家/音乐人/野生穿搭model,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。&#…...
精益数据分析(94/126):30/10/10用户参与法则与定价策略的科学制定
精益数据分析(九十四):30/10/10用户参与法则与定价策略的科学制定 在创业过程中,如何衡量用户参与度是否健康?又该如何制定科学的定价策略实现营收最大化?今天,我们将深入解析Union Square Ven…...

大模型赋能:金融智能革命中的特征工程新纪元
一、AI进化论:从“判别”到“生成”的金融新战场 1.1 判别式AI的“痛点”与大模型的“破局” 想象这样一幅画面:银行风控模型像老式收音机,需要人工反复调试参数才能捕捉风险信号;而大模型则是智能调音台,能自动“听…...