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

http、https、TLS、证书原理理解,对称加密到非对称加密问题,以及对应的大致流程

http 超文本传输协议

存在问题:

  1. 安全性、隐私性、数据完整性

  2. 易被中间人(黑客之类的)对数据进行劫持、篡改、隐私泄露

引出了=====================================================================

https (source)

  1. http 在网络模型中的应用层
    Application => transport => internet => network Access
  2. 所有经由网络中的数据都是 以 最原始状态传输的,一旦被截获,内容会被轻易获取

https中引入了 =====================================================================

TLS协议

的概念=====================================================================

  1. 专门对数据进行加密解密操作
  2. 客户端产生数据后,会通过TLS进行数据加密,传到对端,通过TLS对数据进行解密
  3. 将解密后的 数据传输给http服务的

—网络中 传输的 是加密后的数据

TLS 和 SSL 对比

  1. TLS(transport layer security):使用广泛的网络传输加密协议,规定了如何为在网络中传输的数据进行加密和解密,确保数据安全性
  2. SSL(Secure Socket Layer) ===> SSL.3.0版本 共享给IETF组织,最终重命名为TLS
  3. SSL 为 TLS 前身

对称加密

TLS 采用哪种方式对数据进行加密解密的

对称加密

  • 指通讯双方更具协商好的算法,生成一个唯一密钥
  • 该密钥用于同时对数据进行加解密操作

大致流程

  1. 访问某个服务时(已经三次握手了),会先向服务端发送个 hello请求,请求中包含了客户端所支持的 TSL版本 和加密函数 和 加密算法等信息
  2. 服务器接收请求,选取最优TSL协议、加密函数、加密算法,返回给客户端
  3. 客户端接收到响应后,先随机生成一段字符串(预主密钥),通过使用加密的函数和算法生成一组密钥(会话密钥)
  4. 同时客户端把生成的 预主密钥 发送给服务端,并且告知生成对称密钥的算法和信息。
  5. 服务端通过使用客户端发送过来的 加密的函数和算法生成一组密钥(会话密钥)

名词

预主密钥: 客户端随机生成的一段字符串

会话密钥(对称密钥): 预主密钥 结合服务端返回的TLS协议、加密函数、加密算法 生成

问题

  1. 无法保证 预主密钥安全传输给服务端
  2. 中间人也能拿到客户端发送过来的 预主密钥 和 TLS协议、加密算法、函数等信息,生成对应的 会话密钥

怎么解决 预主密钥安全传输===================================================

引入了=====================================================================

非对称加密(PKI)

  • 公钥: 用于加密,对外开发,所有人都能获取
  • 私钥: 用于解密,只有拥有者知道

public key infrastructure

示例

  1. 客户端 向服务传输数据时, 服务端首先会生成 公钥私钥对
  2. 服务器将公钥发送给客户端,还有合适的TLS 协议, 加密算法等信息
  3. 客户端随机生成一串字符串(预主密钥),预主密钥通过 加密算法生成 对应的 会话密钥
  4. 客户端使用服务器发送的公钥 对 预主密钥进行加密。并且发送给服务端。还有 TLS 、加密算法等信息。
  5. 服务端通过自己的私钥对 加密过的预主密钥进行解密。得到正确的预主密钥,通过加密算法得到 会话密钥。

问题

  1. 无法保证客户端获取的公钥真的是 目标服务提供的。
  2. 客户端获取到公钥真的是目标服务所颁发的吗?
举例
  1. 服务器的公钥、密钥对被中间人截取。中间人提供自己的公钥私钥对给客户端。客户端不知道
  2. 客户端随机生成 预主密钥,使用 中间人提供的公钥进行加密;使用中间人提供的加密算法生成 会话密钥
  3. 中间人拿到客户端发来的加密后的预主密钥,用自己的私钥进行解密,拿到了正确的 预主密钥。
  4. 中间人用预主密钥生成对应的会话密钥(中间人和客户端之间的)
  5. 中间人用服务器的公钥对 预主密钥进行加密;用服务器提供的加密算法生成会话密钥(中间人和服务器之间的)
  6. 服务器拿到中间人提供的加密后的预主密钥,用自己的私钥进行解密拿到 预主密钥;进行会话密钥生成。
  7. 这样中间人就能对两边通讯内容继续截取、监听了

为解决这问题=================================================================
引入了=====================================================================

证书CSR

-Digital Certification 证书颁发机构(CA)所签发

  • 唯一,表示一个站点的身份信息;网站的身份证
  • 证书:内容包含–证书的申请者、证书的颁发机构、证书的有效起始结束信息、证书的指纹(公钥)

证书的申请流程

  • 向CA机构进行申请,—签发签证。
    网站申请证书时
  1. 申请者需要创建一个证书申请请求文件(SCR)Certificate Signing Request
  2. 申请证书中通常要包含:网站域名、IP地址、公司名称、地理位置、邮箱地址、公钥信息等信息
  3. 发送给 CA,ca对信息审核,审核完成后颁发给申请者,申请者把证书部署在web服务即可

证书的工作原理

1. 证书指纹:

  1. 用户唯一表示证书(确保证书的完整性)
  • hash 加密: 单项加密算法

    • 特性:不可逆、唯一性

    生成证书时,会对证书的内容和公钥分别进行hash计算,作为证书指纹附加到证书中,同时说明使用的hash算法

  1. 浏览器从服务端获取到证书后会使用相同的算法对证书进行hash 算法。将计算后的结果与附加在证书的中的指纹做对比
  2. 如果一致,证明证书在网络传输过程中没有被人所截获并篡改内容
  3. 实现对证书正确性的核实(但无法保证证书是合法机构颁发的。也可能是一些伪造证书)
问题
  1. 还需要核实证书的真实性,确定证书真是由证书中所描述的CA所颁发的,而不是伪造的。

通过证书签名实现=====================================================================

2. 数字签名(验证证书的真实性)

  • 通过 KPI(非对称加密)来进行加密和解密进行验证证书的真伪

  • CA使用私钥进行加密,公钥进行解密

  • CA生成好证书后,会对证书进行 私钥加密,并附加到证书中发送给服务器

  • 客户端网站获取到证书后。会使用 CA对应的公钥 对其进行解密,一但解密成功。就代表 证书确实是CA机构颁发的

问题

浏览器CA的公钥在那儿呢,怎么安全获取CA公钥呢,如何保证公钥不被中间人替换

就要知道=============================================================

预安装

  1. 机构对证书进行签名时,不仅用到私钥,还会用到另外一个证书-根证书

    • 作用;为其他证书进行签名,每个操作系统都会维护一个根证书库:默认浏览器已经安装好了受信人的CA根证书
  2. 验证证书中的数字签名时,只要找到对应的CA根证书即可(避免网络传输时被窃听,掉包的风险)

=============

大概流程

  1. 客户端请求时(三次握手后),发送hello 请求,携带 支持的TLS、加密算法
  2. 服务端响应 服务端采用的 TLS协议, 解密算法;同时发送 证书给客户端
  3. 客户端验证证书指纹、签名确定证书的真实性。
  4. 客户端通过CA提供的公钥从证书中提起出服务器的公钥(保证公钥一定是目标服务器的)
  5. 客户端生成预主密钥,使用 公钥进行加密,发送给服务器,携带加密算法等信息;预主密钥使用加密算法生成 会话密钥
  6. 服务器使用自己的私钥 对 加密的预主密钥解密,拿到正确的预主密钥;使用加密算法生成 对应的会话密钥。
  7. 开始真正传输数据,并且这些数据进行会话密钥加密。

1-6之间的过程(不包括三次握手) 俗称为 TLS握手。

相关文章:

http、https、TLS、证书原理理解,对称加密到非对称加密问题,以及对应的大致流程

http 超文本传输协议 存在问题: 安全性、隐私性、数据完整性 易被中间人(黑客之类的)对数据进行劫持、篡改、隐私泄露 引出了 https (source) http 在网络模型中的应用层 Application > transport > inter…...

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个,都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

[安全实战]Python程序打包为EXE的安全加固全攻略(加密+混淆+签名)

Python程序打包为EXE的安全加固全攻略 (加密+混淆+签名:三位一体的Python程序保护体系) 摘要 本文深度解析Python程序打包为EXE的全流程安全防护方案,涵盖加密算法选择、代码混淆技术、反逆向工程等核心安全策略。通过典型攻击防护方案、商业级加固方案对比,打造企业级…...

【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)

原件获取列表: 系统测试方案-2.docx B-Web安全服务渗透测试模板.docx 压力测试报告.docx安全测试用例及解析.docx 测试计划.doc 测试需求规范.doc 测试需求指南.docx 测试用例设计白皮.doc 单元测试报告模板.doc 单元测试计划模板.doc 回归测试指南.doc 集成测试报…...

Linux的联网网络管理攻略

RHEL9版本特点 在RHEL7版本中,同时支持network.service和NetworkManager.service(简称NM)。 在RHEL8上默认只能通过NM进行网络配置,包括动态ip和静态ip,若不开启NM,否则无法使用网络RHEL8依然支持network.service&am…...

Zookeeper三台服务器三节点集群部署(docker-compose方式)

1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…...

ISO26262-浅谈用例导出方法和测试方法

目录 1 摘要2 测试方法3 测试用例导出方法4 测试方法与用例导出方法的差异和联系5 结论 1 摘要 ISO26262定义了测试方法和用例导出方法,共同保证产品的开发质量。但在刚开始学习ISO26262的时候,又不是非常清晰地理解它俩的区别和联系。本文主要对它俩的…...

Linux上位机开发实践(SoC和MCU的差异)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 soc一般是指跑linux的芯片,而mcu默认是跑rtos的芯片,两者在基本原理方面其实差异不大。只不过,前者由于性能的原…...

【基于Fluent+Python耦合的热管理数字孪生系统开发:新能源产品开发的硬核技术实践】

引言:热管理数字孪生的技术革命 在新能源领域(如动力电池、储能系统、光伏逆变器等),热管理是决定产品性能与安全的核心问题。传统热设计依赖实验与仿真割裂的流程,而数字孪生技术通过实时数据驱动与动态建模&#xf…...

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件,在上架app store connect或做testflight测试的时候,它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑,假如没有mac电…...

详细解释浏览器是如何渲染页面的?

渲染流程概述 渲染的目标:将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务&#xff0…...

swift-12-Error处理、关联类型、assert、泛型_

一、错误类型 开发过程常见的错误 语法错误(编译报错) 逻辑错误 运行时错误(可能会导致闪退,一般也叫做异常) 2.1 通过结构体 第一步 struct MyError : Errort { var msg: String } 第二步 func divide(_ …...

如何查看HTTP状态码?

目录 一、HTTP状态码查看方法 1. ​​浏览器开发者工具​​ 2. ​​命令行工具​​ 3. ​​服务器日志分析​​ 二、HTTP状态码分类与核心含义 1. ​​信息类(1xx)​​ 2. ​​成功类(2xx)​​ 3. ​​重定向类&#xff08…...

下采样(Downsampling)

目录 1. 下采样的定义与作用​​ ​​2. 常见下采样方法​​ ​​(1) 池化(Pooling)​​ ​​(2) 跨步卷积(Strided Convolution)​​ ​​(3) 空间金字塔池化(SPP)​​ ​​3. PyTorch 实现示例​​ …...

PostgreSQL 常用客户端工具

PostgreSQL 常用客户端工具 PostgreSQL 拥有丰富的客户端工具生态系统,以下是各类常用工具的详细分类和介绍: 一 图形化客户端工具 1.1 跨平台工具 工具名称特点适用场景许可证pgAdmin官方出品,功能全面开发/运维PostgreSQLDBeaver支持多…...

Nacos安装及数据持久化

1.Nacos安装及数据持久化 1.1下载nacos 下载地址:https://nacos.io/download/nacos-server/ 不用安装,直接解压缩即可。 1.2配置文件增加jdk环境和修改单机启动standalone 找到bin目录下的startup.cmd文件,添加以下语句(jdk路径根据自己…...

ES关系映射(数据库中的表结构)

ES常见数据类型及用途 1. 基础类型 ES类型对应MySQL类型特点示例场景textVARCHAR/TEXT全文分词搜索,默认用标准分词器商品描述、日志内容keywordCHAR/VARCHAR精确匹配,不分词订单号、标签、枚举值(如状态码)longBIGINT64位整数ID、…...

FPGA_YOLO(四)用HLS实现循环展开以及存储模块

Vivado HLS(High-Level Synthesis,高层次综合)是赛灵思(Xilinx)在其 Vivado 设计套件 中提供的一款工具,用于将 高级编程语言(如 C、C、SystemC) 直接转换为 硬件描述语言&#xff0…...

ASP.NET MVC 实现增删改查(CRUD)操作的完整示例

提供一个完整的 ASP.NET MVC 实现增删改查(CRUD)操作的示例。该示例使用 SQL Server 数据库,以一个简单的 Product 实体为例。 步骤 1:创建 ASP.NET MVC 项目 首先,在 Visual Studio 中创建一个新的 ASP.NET MVC 项目…...

MCP理解笔记及deepseek使用MCP案例介绍

文章目录 一、MCP介绍(1)使用MCP与之前的AI比较(2)原理(3)优点 二、deepseek使用MCP使用案例介绍 一、MCP介绍 全称 模型上下文协议 来源 由Claude母公司Anthropic于24年底开源发布 简介 AI大模型的标准化…...

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别:使用PyTorch构建MNIST分类器 在这篇文章中,我将引导你通过使用PyTorch框架构建一个简单的神经网络模型,用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集,包含了60,000张训练图像和10,000张…...

扩展虚拟机磁盘空间并使其在Linux系统中可用的步骤总结

VMware在虚拟机扩展空间时,若想扩展到150G,那么所在盘的空闲空间须大于150G,否则VM将不允许扩展。 1:确认新磁盘空间是否被识别 使用 lsblk 或 fdisk -l 命令检查 /dev/sda 的大小是否已经更新到新的容量(例如从原来的…...

A股周度复盘与下周策略 的deepseek提示词模板

以下是反向整理的股票大盘分析提示词模板,采用结构化框架数据占位符设计,可直接套用每周市场数据: 请根据一下markdown格式的模板,帮我检索整理并输出本周股市复盘和下周投资策略 【A股周度复盘与下周策略提示词模板】 一、市场…...

dev_set_drvdata、dev_get_drvdata使用详解

在Linux内核驱动开发中,dev_set_drvdata() 及相关函数用于管理设备驱动的私有数据,是模块化设计和数据隔离的核心工具。以下从函数定义、使用场景、示例及注意事项等方面进行详细解析: 一、函数定义与作用 核心函数 dev_set_drvdata() 和 dev…...

数据驱动未来:大数据在智能网联汽车中的深度应用

数据驱动未来:大数据在智能网联汽车中的深度应用 引言 随着智能网联汽车(Intelligent Connected Vehicles,ICV)的快速发展,数据已成为其核心驱动力。从实时交通数据到车辆传感器信息,大数据的深度应用正在让智能汽车更安全、更高效、更智能化。那么,大数据如何赋能智能…...

LeetCode:DFS综合练习

简单 1863. 找出所有子集的异或总和再求和 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。 例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 1 。 给你一个数组 nums ,请你求出 n…...

Perf学习

重要的能解决的问题是这些: perf_events is an event-oriented observability tool, which can help you solve advanced performance and troubleshooting functions. Questions that can be answered include: Why is the kernel on-CPU so much? What code-pa…...

齐次坐标变换+Unity矩阵变换

矩阵变换 变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。 变换类型 线性变换:保留矢量加和标量乘的计算 f(x)…...

Pandas取代Excel?

有人在知乎上提问:为什么大公司不用pandas取代excel? 而且列出了几个理由:Pandas功能比Excel强大,运行速度更快,Excel除了简单和可视化界面外,没有其他更多的优势。 有个可怕的现实是,对比Exce…...

启动vite项目报Unexpected “\x88“ in JSON

启动vite项目报Unexpected “\x88” in JSON 通常是文件被防火墙加密需要寻找运维解决 重启重装npm install...