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

https的原理和方案

文章目录

  • https原理
  • 为什么要加密
  • 常见的加密方式
    • 对称加密
    • 非对称加密
    • 数据摘要&&数据指纹
    • 数据签名
  • https的几种工作方案
    • 方案一:只使用对称加密
    • 方案二:只使用非对称加密
    • 方案三:两端都使用非对称加密
    • 方案四:非对称加密 + 对称加密
  • 针对上述情况的中间人攻击
  • 证书
    • CA认证
    • 理解数据签名
  • 方案5:非对称加密+对称加密+证书
  • 总流程

https原理

由于http协议内容都是按照文本方式明文传输的,这就会导致在传输过程中出现⼀些不安全的情况。

https也是⼀个应用层协,是在http协议的基础上引入了⼀个加密层

如果单纯的使用http协议,那么数据在网络传送中就以明文形式传送。如果http发送请求时,先经过 ssl/tls 的加密后再去传送,对方主机收到后再经过 ssl/tls 解密的过程就是https

https就相当于主机之间在应用层是明文的,但是在其他层是属于密文的

image-20230809153142111

可以通过端口号来决定数据是否加密,例如80是http,443是https

为什么要加密

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

常见的加密方式

对称加密

采⽤单钥密码系统的加密方法,同⼀个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

特征:加密和解密所用的密钥是相同的 ,算法公开,计算量小,速度快,效率高

非对称加密

需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(publickey,简称公钥)和私有密钥(privatekey,简称私钥)

公钥可以加密也可以用来解私钥加密的密文,私钥可以加密也可以用来解公钥加密的密文

因此公钥和私钥是配对的,缺点是运算速度非常慢

数据摘要&&数据指纹

数据摘要也就是数据指纹,用来确定数据的唯一性

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

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

数据签名

对数据摘要再进行加密,就得到数字签名

https的几种工作方案

方案一:只使用对称加密

客户端和服务端都是使用同一个密钥进行加密解密,引⼊对称加密之后,即使数据被截获,由于中间人不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容了。

但是这种做法并不安全,因为服务器同⼀时刻其实是给很多客⼾端提供服务的,如果是相同密钥那就及其容易扩散,中间人也容易获取到。如果是每个客户端用的密钥都不一样,那服务器就需要维护每个客户端和每个密钥之间的关系,那这样的维护成本太大

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是什么,但是还有问题是因为密钥也要经过传输,但是如果密钥直接明文传输,中间人也很容易获取到,所以密钥进行加密,但是密钥加密的密钥也是如此。因为直接使用对称加密这种做法并不安全

方案二:只使用非对称加密

首先客户端向服务端申请公钥,服务端返回公钥给客户端,客户端使用公钥进行加密后传输,服务端接收到数据后用私钥解密处理数据后再用私钥加密返回。因为公钥和私钥是配对使用的,所以用公钥加密的数据必须得用私钥解密,私钥加密同理。

这种做法看似合理,实际上如果中间人在一开始客户端申请公钥使就已经开始劫持了,那中间人就会获取到公钥并篡改公钥,所以这种做法也不安全

方案三:两端都使用非对称加密

  1. 服务端拥有自己的公钥S与对应的私钥S’,客户端拥有自己公钥C与对应的私钥C’
  2. 客户端和服务端交换公钥
  3. 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
  4. 服务端给客⼾端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C’

这种做法看似可以,实际上这种做法的效率非常低,并且和方案二一样中间人可以在两端交换公钥的时候就进行劫持并篡改,也并不安全

方案四:非对称加密 + 对称加密

因为非对称加密的效率很低,所以可以配合对称加密使用

  1. 服务端具有非对称公钥S和私钥S’
  2. 客户端发起https请求,获取服务端公钥S
  3. 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器.
  4. 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥
  5. 服务器通过私钥S’解密,还原出客⼾端发送的对称密钥C.并且使用这个对称密钥加密给客户端返回的响应数据.
  6. 后续客户端和服务器的通信都只用对称加密即可。由于该密钥只有客⼾端和服务器两个主机知道,其他设备不知道密钥即使截获数据也没有意义

也就是说这种做法是利用对称加密的密钥来给非对称加密的公钥进行加密传输,这样除了一开始是使用非对称加密外后面都是使用对称加密进行加密的。但是这种做法也不安全

还是一样的道理,如果中间人一开始就劫持了公钥那后面再怎么传输都离不开中间人的角色了

针对上述情况的中间人攻击

上述的方案二 三 四都是出现在了一个问题上,那就是如果一开始中间人就获取到了公钥。

一旦中间人获取到了就可以:

  1. 服务器具有非对称加密算法的公钥S,私钥S’
  2. 中间⼈具有非对称加密算法的公钥M,私钥M’
  3. 客户端向服务器发起请求,服务器明文传送公钥S给客户端
  4. 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客⼾端
  5. 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器
  6. 中间人劫持后,直接用自己的私钥M’进性解密,得到通信秘钥X,再用曾经保存的服务端公钥S加密后,将报文推送给服务器
  7. 服务器拿到报文,用自己的私钥S’解密,得到通信秘钥X
  8. 双方开始采用X进行对称加密,进行通信。但是⼀切都在中间人的掌握中,劫持数据,进性窃甚至修改,都是可以的

因此为了解决这种情况就要引入证书

证书

CA认证

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

一个证书里面包含了:数据的签名和明文信息。其中明文信息里包含了:证书发布机构,证书有效期,公钥等

需要注意的是:**申请证书的时候,需要在特定平台⽣成查,会同时⽣成⼀对⼉密钥对⼉,即公钥和私钥。这对密钥对⼉就是⽤来在⽹络通信中进行明文加密以及数字签名的 **

https://myssl.com/csr_create.html

理解数据签名

签名的形成是基于非对称加密算法的

  1. CA机构拥有非对称加密的私钥A和公钥A’
  2. CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
  3. 然后对数据摘要用CA私钥A’加密,得到数字签名S

服务端申请的证书明文和数字签名S共同组成了数字证书,这样⼀份数字证书就可以颁发给服务端了

方案5:非对称加密+对称加密+证书

在客户端和服务器刚⼀建立连接的时候,服务器给客户端返回⼀个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息

每次的通信传输都需要进行证书认证:

  1. 判定证书的有效期是否过期
  2. 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
  3. **验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(称为数据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对比hash1和hash2是否相等.如果相等,则说明证书是没有被篡改过的 **

假设中间人获取到了证书:

  1. 中间人篡改了证书的明文
  2. 由于他没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
  3. 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人

那如果中间人掉包了证书呢:

  1. 因为中间人没有CA私钥,所以⽆法制作假的证书
  2. 所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包
  3. 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
  4. 永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的

因此这种方法是可取的。

总流程

image-20230810205534607

相关文章:

https的原理和方案

文章目录 https原理为什么要加密常见的加密方式对称加密非对称加密数据摘要&&数据指纹数据签名 https的几种工作方案方案一:只使用对称加密方案二:只使用非对称加密方案三:两端都使用非对称加密方案四:非对称加密 对称加…...

VTK 判断一个 点 是否在一个模型 stl 内部 vtk 点是否在内部 表面 寻找最近点

判断 一个点 ,判断是否在风格 stl 模型内部,或表面: 目录 1.方案一:使用vtkCellLocator FindClosestPoint 找到模型上距离给定点最近的一点,计算两点的距离 ,小于某一阈值 则认为此点在模型上; 2.方案二…...

【数据结构OJ题】链表的回文结构

原题链接:https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&ru/activity/oj&qru/ta/2016test/question-ranking 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 在做这道…...

Nginx常见的三个漏洞

目录 $uri导致的CRLF注入漏洞 两种常见场景 表示uri的三个变量 案例 目录穿越漏洞 案例 Http Header被覆盖的问题 案例 $uri导致的CRLF注入漏洞 两种常见场景 用户访问http://example.com/aabbcc,自动跳转到https://example.com/aabbcc 用户访问http://exa…...

爬虫逆向实战(十六)--某建筑市场平台

一、数据接口分析 主页地址:某建筑市场平台 1、抓包 通过抓包可以发现数据接口是list 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无响应是否加密? 通过查看“响应”模块可以发现,返回的响应是…...

用Python做一个滑雪小游戏

游戏是让人娱乐和放松的好方式,而编写和玩自己的游戏则是一种特别有趣的体验。在本文中,我们将使用Python和pygame库来创建一个简单的滑雪小游戏。通过这个小游戏项目,我们将学习如何使用Python编程语言来制作自己的游戏,并且享受…...

EXCEL按列查找,最终返回该列所需查询序列所对应的值,VLOOKUP函数

EXCEL按列查找,最终返回该列所需查询序列所对应的值 示例:国标行业分类汉字,匹配id 使用VLOOKUP函数 第一参数:拿去查询的值。 第二参数:匹配的数据。 Ps:Sheet1!$C 21 : 21: 21:E 117 ,需要…...

java编译报错,get方法报错

java编译报错,get方法报错 处理方式: 在空间中,将 buid 文件夹删除 再不行的话,重启电脑,删除各种缓存 试试...

可以降低CPU负载的网络传输技术——LSO

LSO 是个啥? Large Send Offload(LSO)是一种网络传输协议技术,旨在提高网络传输的性能和效率。它通过将大型数据包拆分成小型数据包,降低网络传输负载,提高传输速度。 在传统的网络传输协议中&#xff0c…...

[管理与领导-25]:IT基层管理者 - 团队管理 - 如何留人, 如何留住关键人才

目录 一、离职前的五大信号,你读懂了吗? 二、员工为什么会离职 三、如何留住关键人才 一、离职前的五大信号,你读懂了吗? 离职前的信号是指员工可能在准备离职之前表现出的一些迹象或行为。 这些信号可以帮助雇主或同事们察觉…...

【Redis】Redis 的学习教程(二)之 Jedis

仅仅知道 Redis 服务端的操作知识,还是远远不够的,如果想要真正在项目中得到应用,我们还需要一个 Redis 的客户端,然后将其集成到项目中,让程序自动根据我们的业务需要自动处理。 基于 Redis 开放的通信协议&#xff…...

VB+SQL银行设备管理系统设计与实现

摘要 随着银行卡的普及,很多地方安装了大量的存款机、取款机和POS机等银行自助设备。银行设备管理系统可以有效的记录银行设备的安装和使用情况,规范对自助设备的管理,从而为用户提供更加稳定和优质的服务。 本文介绍了银行设备管理系统的设计和开发过程,详细阐述了整个应…...

Python系统学习1-9-类一之类语法

一、类之初印象 1、类就是空表格,将变量(列名)和函数(行为)结合起来 2、创建对象,表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…...

PHP“深入浅出”淘宝商品详情数据接口获取方法,淘宝API申请指南

获取淘宝商品详情数据的方法如下: 确定监控对象,通常是与自己店铺的商品相似的竞品,通过在淘宝商品详情页的URL中获取商品ID,进而获取商品的详情数据。通过API接口获取商品详情数据,申请开发者账号并获取授权访问&…...

线性代数再回顾

最近,在深度学习线性代数,之前大一的时候学过线性代数,但那纯属于是应试用的,考试一考完,啥都忘了,也说出不出个所以然,所以,在B站的MIT的线性代数以及3blue1brown线性代数的本质中去…...

(白帽黑客)自学笔记

一、前言: 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以…...

基于长短期神经网络的客流量预测,基于长短期神经网络的超短期客流量预测,lstm详细原理

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的客流量预测 完整代码: 基于长短期神经网络LSTM的公交站客流量预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/88184734 效果图 结果分析 展望 参考论文 背影 碳排放越来越受到重…...

前端文件下载通用方法

zip文件和xlsx文件 import axios from axios import { getToken } from /utils/authconst mimeMap {xlsx: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,zip: application/zip }const baseUrl process.env.VUE_APP_BASE_API // zip下载 export functi…...

htmlCSS-----案例展示

目录 前言 作品效果 html代码 CSS代码 图片资源 前言 在学习html过程中我们要试着去写写一些案例,通过这些案例让我们更加熟悉代码以及丰富我们的经验,下面是我个人写的一个案例,代码和图片也给出了大家,你们可以参考参考。…...

Android进阶之路 - 去除EditText内边距

正如题名,在Android中的EditText是自带内边距的,常规而言设置背景为null即可,但是因为使用了并不熟悉的声明式框架,本是几分钟解决的事儿,却花费了小半天~ 其实这只是一个很简单的小需求,不想却遇到了一些小…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...