HTTPS

目录

一 HTTPS是什么

二 加密

三 加密方案

四 CA机构/证书

五 最终方案(对称密钥/非对称密钥/CA证书)和总体流程


一 HTTPS是什么

在应用层存在SSL,TLS(HTTP之下,传输层之上)加密/解密安全协议,如果HTTP经过这个协议,对端也走这个协议,那么就是HTTPS,HTTPS=HTTP+SSL/TLS。

上述如果采用HTTP协议走协议栈就不会走安全协议,因为HTTP都是按文本方式铭文传输,如果被中间人获取篡改可能就会有问题。

二 加密

1. 什么是加密

加密就是把明文数据加密成密文数据,通常加密过程中需要其他的数据辅助,这种数据称为密钥,比如"12345"(明文) => 密钥 => "xxxxx"(密文)。

2. 为什么要加密

下面来看一张图

如果不进行加密,传输的是明文数据被篡改,结果就不符合预期,中间客户端是感觉不到的,如果把明文进行加密密文,中间人就无法得知明文数据。

3. 对称加密 VS 非对称加密

1. 对称加密

只需要一个密钥进行加密或解密,比如A+密钥=B,B+密钥=A。

1. 常见对称加密算法 DES 3DES AES TDEA、 Blowfish 、RC2 等。
2. 特点:算法公开、计算量⼩、加密速度快、加密效率⾼。

2. 对称加密

需要2对密钥(公钥/私钥),公钥公开,私钥不公开,公钥进行加密,私钥进行解密,或者私钥进行加密,公钥进行解密,比如A+公钥=B,B+私钥=A。

1. 需要两个密钥 来进行加密和解密,这两个密钥是公开密钥 public key ,简称公钥)和私有密钥(private key ,简称私钥)
2. 常见非对称加密算法 ( 了解 ) RSA DSA ECDSA等
3. 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

3. 数据摘要/数据指纹

数据摘要又称数据指纹,原理就是拿一组数据进行(hash函数)进行运算,得出来的结果是一组固定长度的字符串,这样的加密通常不可反向推出原数据(hash不可逆),严格来说不算是一种加密方式,而是用来校验数据是否被篡改,比如 11111 + hash函数 = 101010110,如果原数据有一点的改动比如一字节一bit位,hash之后的结果和原来的结果差距极大。

1. 摘要常见算法:有 MD5 SHA1 SHA256 SHA512 等,算法把无限的映射成 有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
2. 摘要特征:和加密算法 的区别是,摘要严格意义不是加密,因为没有解密,只不 过从摘要很难反推原信息,通常用来进行数据对比

三 加密方案

1. 第一种方案(对称加密)

采用一对对称密钥加密,客户端先把密钥传给服务器,服务器响应空的报头,客户端在拿密钥进行数据加密,服务器进行密钥解密,如果最开始中间人获取了密钥,客户端和服务器进行通信,加密后的数据被中间人拿到,中间人在拿之前获取的密钥进行解密就能进行篡改,监听等操作。如果对最开始的密钥进行加密,那么解密的密钥也要传给服务器进行解密,无限套娃,所以只采用对称加密不安全。

2. 第二种方案(非对称加密)

假设非对称密钥由服务器进行维护,客户端首先请求服务器,服务器响应给客户端S公钥,客户端在拿着公钥S进行加密发送给服务器,服务器拿着私钥S'进行解密。

问题1:公钥S是明文交换的,中间人拿到,当服务器对数据进行加密(私钥S),客户端拿公钥S进行解密,中间人提取获取服务器加密后的数据,再拿着之前获取的公钥S进行解密,原数据被监听或篡改等。

问题2:每次数据交换采用非对称加密,效率低。

3. 第三种方案(2对非对称加密)

客户端和服务器各自持有自己的非对称密钥,客户端和服务器交换各自的公钥,客户端拿服务器的公钥加密,服务器拿自己的私钥解密,服务器拿客户但的公钥加密,客户端拿自己的私钥解密。

问题1:每次通信都采用非对称加密,效率低。

问题2:貌似双方只有自己持有私钥,保证了数据安全,但也有问题,下面来看看方案4。

4. 第四种方案(对称加密+非对称加密)

客户但维护对称密钥,服务器维护非对称密钥,服务器把公钥传给客户端,客户端拿公钥对自己的对称密钥进行加密,服务器拿自己的私钥进行解密,得到客户端对称密钥,后续采用客户端的对称密钥进行通信。

问题1:解决了方案2/3通信效率低的问题,只在密钥交换协商的适合进行非对称加密,后续通信采用客户端的对称密钥进行通信。

问题2:看似只有客户端和服务器持有对称密钥,实际呢?下面来看一张图

当服务器把自己的公钥传输给客户端的时候,中间人拿到,并用自己伪造的M公钥交给客户但,客户端拿中间人的公钥加密自己的对称密钥,传给服务器,中间人再次拿到客户端加密的数据,拿自己的私钥解密得到客户端的对称密钥,在用客户端的公钥和服务器的公钥加密,传给服务器,服务器解密,得到客户端的对称密钥,但客户端的对称密钥和服务器的公钥已被窃取,后续通信采用对称密钥,中间人已经有了对称密钥,所以也有问题。

上述最根本的问题是什么?当客户端第一次拿到服务器的公钥,由于中间人的篡改,无法甄别合法公钥的合法性,导致了后续的问题,要解决上述问题,引入CA证书。

四 CA机构/证书

服务器在使用HTTPS之前要去CA机构认领证书,提交的数据包括域名,服务器公钥等信息,CA机构给该数据进行hash加密形成摘要,在拿CA机构的私钥进行加密,形成签名,最终拿着原始数据和签名拼在一起,就形成了携带了签名的证书。

当客户端进行验证的时候,会拿着服务器发来的证书进行验证,通常客户端会内置CA机构的公钥,拿着公钥对签名解密形成摘要,在拿着原始数据进行hash加密形成的摘要,如果相同则该证书是合法的,否则不合法。

五 最终方案(对称密钥/非对称密钥/CA证书)和总体流程

首先服务器想使用HTTPS,得先去CA机构认领证书,提交材料(包括服务器的公钥),认领完成,服务器把证书返回给客户端,客户端用CA公钥对签名进行解密形成摘要,在用数据进行hash(函数)形成摘要,进行比对,相同则证书合法,客户端在用合法的公钥和自己形成的对称密钥进行加密,服务器收到私钥进行解密得到客户端形成的对称密钥,自此只有客户端和服务器知道对称密钥,往后通信只用对称密钥即可。

如果证书局部被掉包?

签名不能掉包,签名只能由CA机构签名,中间人签的客户端不认。

数据掉包,客户端拿数据进行hash形成摘要,在拿签名和CA公钥进行解密比对不一样。

如果证书整个被掉包?

这种情况中间人只能自己也去CA机构申请真的证书,但申请证书需要提交材料信息等,中间人拿到真的证书,但域名不一样(域名具有唯一性),客户端甄别前后域名不一样。

所以这种做法除了开始的密钥协商采用了非对称密钥,后续通信则用的是对称密钥,效率高,同时客户端也能验证服务器发来的证书是否合法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38833.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

StarRocks 主键(Primary Key)深度解析

一、StarRocks 产品简介 StarRocks 是一款高性能分析型数据库,专为海量数据的实时分析而设计。作为新一代湖仓(Lakehouse)加速引擎,StarRocks 融合了 MPP 架构和列式存储引擎的优势,能够支持亿级数据秒级查询响应。 …

(学习总结30)Linux 进程优先级、进程切换和环境变量

Linux 进程优先级、进程切换和环境变量 进程优先级基本概念查看系统进程PRI 和 NI 解释进程优先级调整命令行调整进程优先级调整新进程调度优先级命令 nice调整已运行进程调度优先级命令 renice 使用 top 调整进程优先级使用系统调用调整进程优先级 进程的竞争、独立、并行、并…

《Manus学习手册》.pdf(文末附完整版下载地址)

大家好,我是吾鳴。 吾鳴今天要给大家分享的一份比较全面详细的Manus学习手册,该学习手册主要包含Manus产品概述与核心理念、Manus功能与使用场景、Manus技术架构与工作流、Manus案例库与用户实践、邀请码获取与内测信息、Manus与传统AI对比与优势、用户评…

【MySQL】从零开始:掌握MySQL数据库的核心概念(三)

人生碌碌,竞短论长,却不道枯荣有数,得失难量。 前言 这是我自己学习MySQL数据库的第二篇博客总结。后期我会继续把MySQL数据库学习笔记开源至博客上。 上一期笔记是关于MySQL数据库的数据类型,没看的同学可以过去看看&#xff1a…

Web3智能合约与数据交互安全性探讨

Web3智能合约与数据交互安全性探讨 随着区块链技术的飞速发展,Web3的概念已经成为技术圈的热门话题。Web3不仅仅是技术迭代,它代表了一种全新的互联网交互方式,其中智能合约扮演着核心角色。智能合约是自动执行、控制或文档化法律事件和行动…

人工智能赋能山西乡村振兴:智能空间规划与可持续发展

摘要:随着人工智能技术的快速发展,山西乡村振兴面临着从传统农业到智能化现代化转型的重大机遇。本文探讨了人工智能在山西乡村振兴中的具体应用,重点分析了智能空间规划、生态保护与环境治理、产业转型以及基础设施升级的可能路径。文章从数…

QT三 自定义控件

一 自定义控件 现在的需求是这样: 假设我们要在QWidget 上做定制,这个定制包括了关于 一些事件处理,意味着要重写QWidget的一些代码,这是不实际的,因此我们需要自己写一个MyWidget继承QWidget,然后再MyWi…

【C++ 进阶】语句:从基础到实践

目录 一、输入输出体系的范式革命 1.1 C语言的格式化 1.2 C的流抽象革命 二、字符串处理的抽象跃迁 2.1 C语言的字符指针 2.2 C的string类革命 三、结构体到类的类型系统进化 3.1 C语言的结构体局限 3.2 C类的革命性演进 四、基础控制语句差异 4.1 条件语句&#xf…

C语言操作符

🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…

PostgreSQL:语言基础与数据库操作

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

KMP算法

KMP算法 为什么叫做KMP呢。 因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP next数组就是一个前缀表(prefix table)。 前缀表是用来回退的,它记录了模式串与…

3D点云数据处理中的聚类算法总结

1.欧式聚类: 基于点的空间距离(欧几里得距离)来分割点云,将距离较近的点归为同一簇。 欧式聚类需要的参数:邻域半径R,簇的最小点阈值minPts,最大点数阈值maxPts。 实现效率: O(n * log n) 实现…

WRC世界机器人大会-2024年展商汇总

2024世界机器人大会 时间:2024年8月21日至25日 地点:北京经济技术开发区北人亦创国际会展中心 大会主题:共育新质生产力,共享智能新未来 2024世界机器人博览会亮点纷呈,20余款人形机器人整机将亮相博览会&#xff…

拉取镜像,推送到阿里云镜像仓库

需求背景:在学习k8s,虚拟机无法正常拉取 wangyanglinux/tools:busybox 镜像。 解决办法:将墙外镜像拉到国内(阿里云)再使用 准备工作需要创建对应的镜像仓库,然后再进行推送 1. 拉取镜像 docker pull …

DeepSeek和Kimi在Neo4j中的表现

以下是2个最近爆火的人工智能工具, DeepSeek:DeepSeek Kimi: Kimi - 会推理解析,能深度思考的AI助手 1、提示词: 你能帮我生成一个知识图谱吗,等一下我会给你一篇文章,帮我从内容中提取关键要素,然后以N…

哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法

导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理(NLP)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…

redis解决缓存穿透/击穿/雪崩

文章目录 1.缓存穿透1.1 概念1.2 解决方案1.2.1 缓存空对象1.2.2 布隆过滤 1.2 店铺查询使用缓存穿透解决方案1.2.1 流程 2.缓存雪崩2.1 什么是缓存雪崩?2.2 雪崩解决方案 3.缓存击穿3.1 什么是缓存击穿?3.2解决方案3.2.1 基于互斥锁解决缓存击穿问题&am…

不连续平面提取

不连续平面提取 提取流程 #mermaid-svg-Y87uP8WsVRmPYriG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Y87uP8WsVRmPYriG .error-icon{fill:#552222;}#mermaid-svg-Y87uP8WsVRmPYriG .error-text{fill:#552222;s…

大语言模型-2.2/3-主流模型架构与新型架构

简介 本博客内容是《大语言模型》一书的读书笔记,该书是中国人民大学高瓴人工智能学院赵鑫教授团队出品,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的…

数据库操作练习

一.向heros表中新增一列信息,添加一些约束,并尝试查询一些信息 //向表中添加一列age信息 alter table heros add column age int;//id列添加主键约束,设置自增 alter table heros modify column id int auto_increment primary key;//name列…