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

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的区别,也会产生完全不同的散列值)
  • 具备单向性

加密与解密

过程:

  1. 加密:使用密钥通过某种算法将明文加密成密文
  2. 解密:使用密钥通过某种算法将密文转化为明文 

对称加密与非对称加密

  • 对称加密:加密中的密钥和解密中的密钥是同一把密钥
  • 非对称加密:加密中用到的密钥和解密中用到的密钥是不同的

对称加密的密钥配送问题

总结:在对称加密的消息传输的过程中,加密的信息和密钥容易被黑客窃听,最终导致消息的泄露

密钥配送问题的解决 

  • 实现共享密钥(私下共享)
  • 密钥分配中心(KDC)
  • Diffie-Hellman密钥交换
  • 非对称加密

非对称加密

前言:

  • 在非对称加密中,密钥分为加密密钥、解密密钥两种,他们并不是同一个密钥
  • 非对称加密的加密与解密速度相对于对称加密来说很慢

公钥与私钥

  • 公钥:一般是公开的用于加密,因此该密钥也称为公钥,因此非对称加密称为公钥密码
  • 私钥:由消息接受者自己保管的用于解密,不能公开,因此也被称为私钥

非对称加密过程

  1. 由消息的接收者生成一对公钥、私钥
  2. 将公钥发送给消息的发送者
  3. 消息的发送者使用公钥加密信息
  4. 消息接收者使用私钥解密信息

注意:

  • 公钥和私钥是一一对应的,不能单独生成
  • 一对公钥和私钥统称为密钥对
  • 由公钥加密的密文,必须使用与公钥对应的私钥才能解密,由私钥加密的密文,必须使用与该公钥对应的私钥才能解密

混合密码系统

前言:

  • 对称加密不能很好的解决密钥配送问题
  • 非对称加密解密速度比较慢

含义:混合密码系统是将对称加密和非对称加密的优势相结合的方法

注意:网络上的密码通信所用的SSL/TLS都运用了混合密码系统

混合密码——加密

会话密钥:通信时随机产生的临时密钥作为对称加密的密钥,用于加密信息提高速度

加密步骤

  1. 首先,消息发送者要拥有消息接收者的公钥
  2. 生成会话密钥,作为对称加密的密钥加密信息
  3. 用消息接受者的公钥,加密会话密钥
  4. 将前两步生成的加密结果一并发给消息接收者 

混合密码——解密

解密步骤

  1. 消息接收者用自己的私钥解密出会话密钥
  2. 再用第一步解密出来的会话密钥解密消息

数字签名

前言

以下场景alice给bob发消息(我喜欢你)但是出现了以下情况

这里alice发的内容可能是被篡改的,或者有人伪装的,或者本来就是alice发的,但是它可以否认,那么bob如何确定这段消息的真实性呢?

注意:数字签名并不是用来数据加密的,而是要保证数据的可靠性的

在数字签名技术中,有以下两种行为

  • 生成签名:由消息的发送者完成,通过“签名密钥”生成
  • 验证签名:由消息的接收者完成,通过“验证密钥”来验证

数字签名过程

整个过程:

  1. 发送者生成一对密钥对,同时使公钥让接收者知道
  2. 发送者将要发送的消息用自己的私钥进行加密,进而变成签名
  3. 发送者将消息及签名一并发送给消息接收者
  4. 接收者收到消息及签名后,用发送者的公钥进行解密签名得到数据
  5. 将解密的数据与消息比较,若一致则签名验证成功

注意:一般数字签名不会对整个消息进行加密解密,这样的话效率太慢 

过程改进

整个过程:

  1.  发送者生成一对密钥对,同时使公钥让接收者知道
  2. 发送者将消息通过单向散列函数计算出散列值
  3. 发送者用自己的私钥将这个散列值进行加密得到签名
  4. 发送者将消息及签名一并发送给接收者
  5. 接收者用公钥解密签名得到散列值1
  6. 接收者对消息进行散列计算得到散列值2
  7. 接收者对比两个散列值,若散列值一致则签名验证成功

 数字签名的作用

  • 确认消息的完整性
  • 识别消息是否被篡改
  • 防止消息发送人否认

非对称加密与签名公钥私钥的角色

  • 既然是加密,那肯定是不希望别人知道我的信息,所以只有我才能解密(公钥负责加密。私钥负责解密)
  • 既然是签名,那肯定不希望有人冒充我发信息,所以只有我才能签名(私钥负责签名,公钥负责验签)

公钥的合法性

前言:若遭遇了中间人攻击,那么公钥将是可以伪造的,如何验证公钥的合法性(证书)

简单理解:中间人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中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include<iostream> using namespace std;class Person1…...

嵌入式Qt 开发一个视频播放器

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

阿里巴巴内网 Spring Cloud Alibaba 强势来袭,开创微服务的新时代

Spring Cloud 发展史 Spring Cloud 从 15 年的 3 月份推出之后&#xff0c;迅速在 Java 微服务生态中&#xff0c;成为开发人员的首选技术栈。 Spring Cloud 在 Spring Boot 的基础上&#xff0c;保留 Java 开发习惯&#xff0c;加入分布式特性&#xff0c;提供了一系列通用工…...

边界检测方法总结

1&#xff1a;经典的边界检测方法有sobel&#xff0c;拉普拉斯&#xff0c;canny等。 sobel&#xff1a; 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的新功能——“文件读取&#xff08;File Read&#xff09;”&#xff0c;支持访问XML文件中可用的过程数据。 &#xff08;文件读取功能支持获取由XML文件提供的过程数据&#xff09;dataFEED OPC Suite Extended是用于OPC通信和云连…...

央行罚单!金融机构被罚原因揭秘

近日&#xff0c;人民银行公布了2023年首批行政处罚罚单&#xff0c;引发业内广泛关注。 顶象防御云业务安全情报中心统计了人民银行官网&#xff0c;2020年1月至2023年2月10日期间&#xff0c;公布的101份行政处罚。 统计显示&#xff0c;16家金融机构被罚27066.9万元&#…...

js中var、let、const详解

首先 var、let、const 在项目开发中都是用来声明变量的&#xff0c;在ES5中只有两种声明变量的方法&#xff1a;var和function&#xff0c;在ES6中新增了 let、const、class、import 四种声明变量的方法&#xff0c;本文主要讲解 var、let 与 const 的语法&#xff0c;其他的大…...

【数据库】MySQL概念知识语法-基础篇(DCL),真的很详细,一篇文章你就会了

目录通用语法及分类DCL&#xff08;数据控制语言&#xff09;管理用户查询用户权限控制函数字符串函数数值函数日期函数流程函数约束外键约束多表查询一对多多对多一对一通用语法及分类 ● DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&…...

Blender骨骼动画快速教程

有关创建模型的更多详细信息&#xff0c;请参阅在 Blender 中创建模型。 我们将为这个例子做一个非常简单的模型——蠕虫&#xff01; 从我们的初始立方体开始&#xff0c;进入编辑模式&#xff0c;切换到面选择&#xff0c;然后选择任何面&#xff1a; 推荐&#xff1a;将 NSD…...

【C++算法】dfs深度优先搜索(下) ——【全面深度剖析+经典例题展示】

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 &#x1f91e; 作者&#xff1a;那就叫我亮亮叭 &#x1f4d5; 专栏&#xff1a;关于C/C那点破事 文章目录0.0 写在前面1. 中国象棋1.1 题干信息① 背景说明概述② 问题描述…...

HIVE 基础(三)

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

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语言学习过程中往往被忽略的可变参数列表 所谓可变参数&#xff0c;就是一个不限定参数数量的函数&#xff0c;我们可以往里面传入任意个数的参数&#xff0c;以达成某些目的。 关联&#xff1a;C11可变模板参数 1.函数 #include <stdarg.h>…...

CentOS7.6 MySQL8安装

1 检查是否安装过 MySQL rpm -qa | grep -i mysqlmariadb rpm -qa | grep mariadb2 卸载之前的安装 MySQL rpm -e --nodeps 软件名 //强力删除&#xff0c;对相关依赖的文件也进行强力删除卸载 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_643 官网下载 MySQL :: D…...

安装Tomcat的步骤?

首先先完成JDK配置&#xff0c;javac -version 检测 1.把tomcat下载到本地硬盘 2.创建tomcat8.0文件夹&#xff0c;完成解压&#xff08;免安装&#xff09;4.打开解压之后的目录,进入bin目录,双击startup.bat,启动tomcat5.可以看到弹出一个黑色的窗口,不要关闭,如果关闭意味着…...

Redis之分布式锁

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

2022年中国前10电商GMV总结

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 1&#xff0c;阿里8万亿;2&#xff0c;京东3万亿;3&#xff0c;拼多多3万亿;4&#xff0c;小程序私域电商3万亿;5&#xff0c;抖音电商1.4万亿。6&#xff0c;抖音本地生活服务电商600亿。7&#xf…...

ES6新增扩展:字符串-数值-数组-函数-对象

ES6新增扩展字符串的扩展判断字符串是否包含在另一个字符中字符串补全字符串重复消除字符串空格replaceAll()替换全部字符串at字符串匹配输出数值的扩展数值分隔符检测数值是否有限检测是否为NaNNumber.parseInt()、Number.parseFloat()isInteger()判断是否为整数Math.sign()判…...

python中import原理

0. 前言 在 python 中引入 Module 是再常见不过了&#xff0c;那么当我们 import 时它做了什么事情呢&#xff1f;它是如何加载 Module 使用的呢&#xff1f; 1. 什么是 module&#xff1f; 一般&#xff0c;Module 是一个后缀为 .py 的文件&#xff0c;其 module 名称一般…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...