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

【应用层】HTTPS协议详细介绍

文章目录

  • 前言
  • 一、什么是"加密"
  • 二、常见的加密方式
  • 三、数据摘要(数据指纹)
  • 四、证书
  • 总结


前言

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,由于HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况,下面我们详细介绍https是如何解决这些问题的。


一、什么是"加密"

加密就是把明文(要传输的信息)进行一系列变换,生成密文。

解密就是把密文再进行一系列变换,还原成明文。

在这个加密和解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据成为密钥。

下面我们举个例子:

比如我们的客户端要给服务器发送一个变量a = 100,这个变量的多少不想被其他人知道,所以我们用key变量按位异或a形成c变量,将c变量发送给服务器,然后服务器用c变量按位异或key就得到了a变量,我们发现只有在客户端一开始知道a是100,中间在网络传输的时候传输的都是c变量。

上面对a变量异或的过程就是加密,服务器对c变量异或得到a变量的过程就叫解密。

下面我们举一个非常常见的例子:

当我们需要下载某个游戏时,在浏览器搜到后然后开始下载,最后发现下载出来的是应用宝??这是因为当我们的浏览器向游戏服务器发起请求,游戏服务器向我们发起的回应包含游戏下载路径但是被运营商劫持,运营商将游戏路径改为应用宝的路径,然后发送给用户。

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容并进行篡改,当我们点击下载按钮,实际上就是给服务器发送了http请求,获取到的http响应其实就包含了该APP的下载链接,运营商劫持后就自动的把交给用户的响应篡改为其他应用的下载地址了。

所以:因为http的内容是明文传输的,明文数据会经过路由器,wifi热点,通信服务运营商,代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,劫持者还可以篡改传输的信息且不被双发察觉,这就是中间人攻击,所以我们才需要对信息加密。

二.常见的加密方式

对称加密:采用单钥密码系统的加密方式,同一个秘钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单秘钥加密,特征:加密和解密所用的秘钥是相同的。

特点:算法公开,计算量小,加密速度快,加密效率高。

实际上我们上面演示的异或就是对称加密,两边都有key就能完成加密和解密。

非对称加密:需要两个秘钥来进行加密和解密,这两个秘钥是公开秘钥和私有秘钥。

特点:算法强度复杂,安全性依赖于算法与秘钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

非对称加密要用到两个秘钥,一个叫做公钥,一个叫做私钥。公钥和私钥是配对的,最大的缺点是运算速度非常慢,比对称加密要慢很多。

三.数据摘要(数据指纹)

数据指纹(数据摘要):其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要,数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。

摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据比对。

有了上面三组概念,下面我们探究一下http是如何加密的:

1.只使用对称加密可以解决问题吗?

 当我们客户端给服务端发送数据时,首先自己通过算法生成一个秘钥然后对数据加密,但是我们的服务端是没有客户端生成的秘钥的,要想对加密的数据解密还需要客户端把秘钥发送给服务端,但是我们说过http是明文的,这就导致客户端给服务端发送的秘钥也会被中间人(黑客)劫持,所以我们单单使用对称加密是解决不了问题的。

2.只使用非对称加密

首先我们假设只有服务端有公钥和私钥:

 当客户端向服务端发起秘钥协商握手的时候,服务端会给客户端发送公钥,但是黑客这个时候也会拿到公钥,然后客户端用公钥对数据加密发送给服务器,这里一定可以保证数据只会被服务器解密,因为私钥只有服务器有。服务器解密后要给客户端回应,但是服务器的回应是无法加密的,因为如果用公钥加密,就必须用私钥解密,而客户端并没有私钥,如果用私钥加密,那么黑客是有公钥的,还是会篡改信息。

下面我们假设客户端和服务端都用非对称加密:

首先客户端和服务端都有自己生成的公钥和私钥,第一次协商握手的时候客户端将自己的公钥给服务端,然后服务端发送响应的时候把自己的公钥给客户端,当两边交换公钥后客户端就可以用服务端的公钥加密数据发送给服务端,然后服务端用自己才有的私钥进行解密,然后服务器用客户端的公钥加密响应发送给客户端,客户端用只有自己才有的私钥进行解密。这样看似没有问题,但是我们说过非对称加密的速度很慢,并且有一个隐藏的安全问题我们在下一个方法中讲到。

3.为了解决效率问题,我们用对称加密 + 非对称加密组合的方法 

 首先服务端自己是有公钥和私钥的,然后第一次客户端向服务端发起请求,服务端将公钥给了客户端,客户端自己生成对称秘钥,然后用服务器的公钥对对称秘钥进行加密得到x,然后把x给服务端,因为只有服务端有唯一的秘钥所以可以对x进行解密拿到C,这样的话客户端和服务端都有了对称秘钥C,以后就可以通过对称秘钥加密通信了,我们说过对称秘钥速度很快,所以解决了速度慢的问题。 

我们发现上面的所有方案我们都忽略了一个问题,那就是如果中间人一开始就进行攻击,我们是无法完成正确的公钥交换的,如下图:

 首先服务端有自己的公钥P和私钥S,然后客户端第一次向服务器发起请求,然后服务器在给客户端发送P的时候被黑客劫持,黑客也准备了自己的私钥D和公钥M,然后黑客保存了服务器的公钥P,将自己的公钥M发送给客户端,客户端形成对称秘钥C,用黑客的公钥进行加密然后发送给服务端,在发送途中被黑客劫持,黑客用自己唯一的私钥D对X进行解密,拿到客户端形成的对称秘钥C,然后再用原先服务器的公钥P对C进行加密然后发送给服务端,服务端收到后用唯一的私钥S解密拿到了对称秘钥C,然后以后就用C和客户端通信,但是不管是服务端还是客户端都不知道黑客已经拿到对称秘钥C了。

那么如何解决上面这个问题呢?实际对上面这种情况我们只需要解决一开始黑客篡改公钥的情况,本质问题是客户端没有辨别公钥是否合法的能力,所以只要客户端能辨别公钥合法就能解决这个问题。

在解决这个问题之前我们先引入一些概念:

四.证书

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

 在数字证书中包含一个电子签名,这个我们后面会详细讲。然后还有公司的信息以及域名等等最重要的是公钥在证书中。

下面我们重点认识一下数字签名的形成:

首先公司提交公司注册信息,然后CA机构通过哈希散列将这份数组变成一个散列值(也叫数据摘要),然后CA机构会用CA自己的秘钥对散列值进行加密,加密后就形成了数据签名。注意:CA机构所使用的秘钥只有CA机构有。 有了数字签名后,我们要确保一份证书的真实性只需要将证书中的内容提取出来做数据摘要,然后用证书中的公钥对数据摘要解密,如果解密后的值和数字签名一样,则说明这个证书是真实的没有被篡改过,否则就说明证书是被篡改过的。

申请证书的过程如下图:

防篡改过程如下图:

 注意:CA会在所有的浏览器中内置自己的公钥,这一点非常重要。正是因为这样所以我们的浏览器才可以分辨出哪些网站是受信任的哪些网站是不受信任的。

下面我们分析一下为什么有了CA后就可以解决问题了:

1.黑客修改公钥可行吗?

很明显是不行的,如果黑客劫持了服务器给客户端发送的证书并且修改了证书中的公钥(注意证书中的公钥是服务器自己生成的公钥,与我们签名讲解的方案中的公钥是一样的),由于CA生成证书的时候会将公司提交的公钥信息,注册信息等全部进行摘要然后用CA自己的私钥加密,所以一旦客户端浏览器用CA内置的公钥对证书中的数字签名解密,然后和证书中的数据摘要做对比,只要不一样则说明证书被篡改。

2.黑客同时修改公钥和数字签名

当然也是不行的,因为数字签名的修改必须要CA机构的私钥。

3.黑客直接掉包整个证书

首先黑客肯定造不出假证书,因为没有CA的私钥。要拥有证书就必须去CA机构申请真证书,但是证书中是含有域名等信息的,每个服务器的域名是唯一的,如果你拿着别人已经申请过的公司的域名那么一定申请不到证书的。

 了解了以上知识,那么最终方案就来了:非对称加密+对称加密+证书认证

首先服务端自己是有公钥和私钥的,然后第一次客户端向服务端发起请求,服务端将证书给了客户端,客户端自己生成对称秘钥,然后用证书中的公钥对对称秘钥进行加密得到x,然后把x给服务端,因为只有服务端有唯一的秘钥所以可以对x进行解密拿到C,这样的话客户端和服务端都有了对称秘钥C,以后就可以通过对称秘钥加密通信了。证书的存在解决了中间人一开始就对公钥做手脚的场景,所以这就是https的加密原理。

当然我们也可以在自己的浏览器查看相关的证书:

 上面除了CA以外的机构很多都是CA的子机构。

 可以看到不管公钥还是私钥都是一堆代表唯一性的字符串。


总结

https与http最本质的区别在于https在http的基础上引入了加密层,以前http明文发送的数据在https中可以进行加密了,极大的提高了安全性。

相关文章:

【应用层】HTTPS协议详细介绍

文章目录 前言一、什么是"加密"二、常见的加密方式三、数据摘要(数据指纹)四、证书总结 前言 HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,由于HTTP协议内容都是按照文本的方式明文传输的&#xff…...

【Tensorboard+Pytorch】使用注意事项

安装 tensorboard/tensorboardx版本需要与tensorflow保持一致(本人使用2.2) 调用 环境变量 在终端或CMD中使用时,常见报错“tensorboard 不是内部或外部命令……”,需要添加环境变量路径path。具体为tensorboard.exe所在目录(A…...

设计模式行为型——命令模式

目录 什么是命令模式 命令模式的实现 命令模式角色 命令模式类图 命令模式举例 命令模式代码实现 命令模式的特点 优点 缺点 使用场景 注意事项 什么是命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属…...

13-2_Qt 5.9 C++开发指南_线程同步_QMutex+QMutexLocker(目前较为常用)

文章目录 1.线程同步的概念2. 基于互斥量的线程同步3.QMutex实现线程同步源代码3.1 qdicethread.h3.2 qdicethread.cpp3.3 dialog.h3.4 dialog.cpp 4.QMutexLocker 实现线程同步源代码4.1 qdicethread.h4.2 qdicethread.cpp4.3 dialog.h4.4 dialog.cpp 1.线程同步的概念 在多线…...

金融行业选择哪种SSL证书才安全可靠

由于金融领域等网站拥有大量客户的敏感信息,且每天都有大量交易需要进行,涉及到大量的资金问题,当这些机构提供的网络和Web应用程序没有足够的安全措施来阻止黑客窃取数据时,就会出现严重的安全问题。而且由于黑客每天都在开发越来…...

面试总结(三)

1.进程和线程的区别 根本区别:进程是操作系统分配资源的最小单位;线程是CPU调度的最小单位所属关系:一个进程包含了多个线程,至少拥有一个主线程;线程所属于进程开销不同:进程的创建,销毁&…...

青大数据结构【2016】

一、单选 二、简答 3.简述遍历二叉树的含义及常见的方法。 4.简要说明图的邻接表的构成。 按顺序将图G中的顶点数据存储在一维数组中, 每一个顶点vi分别建立一个单链表,单链表关联依附顶点vi的边(有向图为以vi为尾的弧)。 邻接…...

聊聊拉长LLaMA的一些经验

Sequence Length是指LLM能够处理的文本的最大长度,越长,自然越有优势: 更强的记忆性。更多轮的历史对话被拼接到对话中,减少出现遗忘现象 长文本场景下体验更佳。比如文档问答、小说续写等 当今开源LLM中的当红炸子鸡——LLaMA…...

线程池的使用详解

一 使用线程池的好处 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行一个任…...

刷题笔记 day4

力扣 611 有效三角形的个数 首先需要知道如何判断 三个数是否能构成三角形。 假如 存在三个数 a < b < c&#xff0c;如果要构成三角形&#xff0c;需要满足&#xff1a; ab > c ; a c > b ; b c > a ; 任意两个数大于第三个数就可构成三角形。 其实不难…...

Python 2.x 中如何使用flask模块进行Web开发

Python 2.x 中如何使用 Flask 模块进行 Web 开发 引言: 随着互联网的快速发展&#xff0c;Web开发成为了互联网行业中一项非常重要的技术。而在 Python 的Web开发中&#xff0c;Flask框架是一种非常流行的选择。它简单轻巧&#xff0c;灵活易用&#xff0c;适合中小型项目的快…...

spring websocket 调用受权限保护的方法失败

版本 spring-security 5.6.10 spring-websocket 5.3.27 现象 通过AbstractWebSocketHandler实现websocket端点处理器 调用使用PreAuthorize注解的方法报错&#xff0c;无法在SecurityContext中找到认证信息 org.springframework.security.authentication.AuthenticationCred…...

Vue.js2+Cesium 四、模型对比

Vue.js2Cesium 四、模型对比 Cesium 版本 1.103.0&#xff0c;低版本 Cesium 不支持 Compare 对比功能。 Demo 同一区域的两套模型&#xff0c;实现对比功能 <template><div style"width: 100%; height: 100%;"><divid"cesium-container"…...

Linux 之 Vi 编辑器

文章目录 1. vi/vim介绍2. vi/vim使用详解2.1 vi/vim的特点2.2 vi/vim三种编辑模式2.3 文本编辑方式 1. vi/vim介绍 vi编辑器是linux和unix上最基本的文本编辑器&#xff0c;工作在字符模式下。由于不需要图形界面&#xff0c;vi是效率很高的文本编辑器。尽管在linux上也有很多…...

Python超实用!批量重命名文件/文件夹,只需1行代码

大家好&#xff0c;这里是程序员晚枫&#xff0c;之前在小破站给大家分享了一个视频&#xff1a;批量重命名文件。 最近在程序员晚枫的读者群里&#xff0c;发现很多朋友对这个功能很感兴趣&#xff0c;尤其是对下一步的优化&#xff1a;批量重命名文件夹。 这周我利用下班时…...

sqoop

一、bg 可以在关系型数据库和hdfs、hive、hbase之间导数 导入&#xff1a;从RDBMS到hdfs、hive、hbase 导出&#xff1a;相反 sqoop1 和sqoop2 (1.99.x)不兼容&#xff0c;sqoop2 并没有生产的稳定版本&#xff0c; Sqoop1 import原理(导入) 从传统数据库获取元数据信息&…...

PySpark 数据操作(综合案例)

搜索引擎日志分析 要求&#xff1a; 读取文件转换成RDD&#xff0c;并完成&#xff1a; 打印输出&#xff1a;热门搜索时间段&#xff08;小时精度&#xff09;Top3打印输出&#xff1a;热门搜索词Top3打印输出&#xff1a;统计黑马程序员关键字在哪个时段被搜索最多将数据转…...

产品经理如何平衡用户体验与商业价值?

近期负责前端产品设计工作的小李忍不住抱怨&#xff1a;公司总是要求客户第一&#xff0c;实现客户良好体验&#xff0c;但在实际操作过程中&#xff0c;面向用户 体验提升的需求&#xff0c;研发资源计划几乎很难排上&#xff0c;资源都放在公司根据业务价值排序的需求…...

【PostgreSQL】系列之 一 CentOS 7安装PGSQL15版本(一)

目录 一、何为PostgreSQL&#xff1f; 二、PostgreSQL安装 2.1安装依赖 2.2 执行安装 2.3 数据库初始化 2.4 配置环境变量 2.5 创建数据库 2.6 配置远程 2.7 测试远程 三、常用命令 四、用户创建和数据库权限 一、何为PostgreSQL&#xff1f; PostgreSQL是以加州大学…...

Nginx解决文件服务器文件名显示不全的问题

Nginx可以搭建Http文件服务器&#xff0c;但默认的搭建会长文件名显示不全&#xff0c;比如如下&#xff1a; 问题&#xff1a;显示不全&#xff0c;出现...&#xff0c;需要进行解决 这里使用重新编绎nginx的方式&#xff0c;见此文&#xff1a; https://unix.stackexchange…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...

13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析

LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1&#xff0c; 携带经纬度海拔的话题主要有三个&#xff1a; /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码&#xff0c;来分析他们的发布过程。发现前两个话题都对应了同一…...