网络基础(二)——HTTPS协议原理

news2024/10/8 22:54:31

目录

1、概念准备

1.1、HTTPS是什么

1.2、什么是加密

1.3、为什么要进行加密

1.4、常见的加密方式

对称加密

非对称加密

1.5、数据摘要&&数据指纹

1.6、数字签名

2、HTTPS的工作过程探究

2.1、方案1 - 只使用对称加密

2.2、方案2 - 只使用非对称加密

2.3、方案三 - 双方都使用非对称加密

2.4、方案四 - 非对称加密 + 对称加密

2.5、引入证书

CA认证

理解数据签名

2.6、方案5 - 非对称加密 + 对称加密 + 证书认证

客户端进行认证

中间人有没有可能篡改该证书?

中间人整个掉包证书?

2.7、完整流程


1、概念准备

1.1、HTTPS是什么

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层。

HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。

af0373f291904e3b8fa41995b77723cf.png

1.2、什么是加密

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

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

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

1.3、为什么要进行加密

相信我们在下载软件时都遇到过的一个事情,就是我明明点击的是网易云音乐的下载,怎么变成了qq浏览器?这就是臭名昭著的运营商劫持。

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等),那么运营的网络设备就可以解析出你传输的数据内容,并进行篡改。

点击“下载按钮”,其实就是在给服务器发送了一个HTTP请求,获取到的HTTP响应其实就包含了该APP的下载链接。运营商劫持之后,就发现这个请求是要下载网易云音乐,那么就自动的把用户的响应给篡改成了“qq浏览器”的下载地址了。

0f0bd6be2c82455bab0d43244af96ba1.png

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

1.4、常见的加密方式

对称加密

使用一个秘钥,加密和解密所用的秘钥是相同的。

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

非对称加密

需要两个秘钥来进行加密和解密,一个公钥,另一个是私钥,用公钥加密,只有拥有私钥的人才能解密。

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

1.5、数据摘要&&数据指纹

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

摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)。

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

1.6、数字签名

摘要经过加密,就得到数字签名(具体是什么,后面会细讲)。


2、HTTPS的工作过程探究

既然要保证数据安全,就需要进行加密。

网络传输中不再直接传输明文了,而是加密之后的密文。

加密的方式有很多,但是整体可以分为两大类:对称加密非对称加密。

2.1、方案1 - 只使用对称加密

如果通信双方都各自持有同一个秘钥X,且没有别人知道,这两方的通信安全当然是可以保证的(除非秘钥被破解)。

92c3624a3d5f42818e61eb0540c2afd2.png

引入对称加密后,即使数据被截获,由于黑客不知道秘钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了。

但事情没有这么简单,服务器同一时刻其实是给很多客户端提供服务的,这么多客户端,每个人用的秘钥都必须是不同的。因此服务器就需要维护每个客户端和每个秘钥之间的关联关系,这是个很麻烦的事情。

比较理想的做法是,客户端和服务器建立连接的时候,双方协商确定这次的密钥是什么,但如果直接传输密钥,黑客就能直接获得,那么就必须对密钥进行加密,这就又回到了之前的问题,所以此时密钥的传输再用对称加密就行不通了。

2.2、方案2 - 只使用非对称加密

鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前,先用公钥加密再传,这样看起来似乎是没问题的,因为只有服务器有私钥,那么这里就有两个问题,第一是服务器用私钥加密数据传输给浏览器时,因为公钥是明文传输的,黑客也持有公钥,那么服务器的数据黑客也能进行解密。第二是浏览器向服务器发送的数据,黑客也可能进行掉包,理由同上。

2.3、方案三 - 双方都使用非对称加密

1、服务端拥有公钥S与对应的私钥S’,客户端拥有公钥C与对应的私钥C’;

2、客户和服务端交换公钥;

3、客户端给服务端发消息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’;

4、服务端给客户端发消息:先用C对数据加密,再发送,只能由客户端解密,因为只有客户端有私钥C’;

这样可以吗?

答案当然也是不行,首先效率太低,然后也会有安全问题,如果这时黑客用自己的公钥和私钥替代了服务器,那客户端的数据还是会被盗取。

2.4、方案四 - 非对称加密 + 对称加密

1、服务端具有⾮对称公钥S和私钥S';

2、客⼾端发起https请求,获取服务端公钥S;

3、客⼾端在本地⽣成对称密钥C,通过公钥S加密,发送给服务器;

4、由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密钥(真的吗?);

5、服务器通过私钥S'解密,还原出客⼾端发送的对称密钥C,并且使⽤这个对称密钥加密给客⼾端返回的响应数据;

6、后续客⼾端和服务器的通信都只⽤对称加密即可,由于该密钥只有客⼾端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义。

其实这个已经很接近答案,但是依然有一个最大的问题,这也是上面的方案使用非对称加密所共有的问题,那就是客户端如何确保发来的公钥的合法性呢?换句话说就是如果黑客从一开始就把公钥替换了,那客户端又怎么会知道呢?

2.5、引入证书

CA认证

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

9420331f02e2436c9d101b23ee388fbe.png

那么同时,这里也有一个问题,我们该如何确保证书的合法性?即没有被修改过并且要是这个权威机构发放的。这就要用到证书上的数据签名了。

理解数据签名

签名的形成是基于非对称加密算法的,注意,目前暂时和https没有关系,不要和https中的公钥私钥搞混了。

9082b60b3c614add9e21163b5ea87b96.png

2.6、方案5 - 非对称加密 + 对称加密 + 证书认证

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

690adec87d6a47bcbf259d6bcff42ecd.png

客户端进行认证

当客户端获取到这个证书后,会对证书进行校验(防止证书是伪造的)

1、判定证书的有效期是否过期;

2、判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构);

3、验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到一个hash值(称为数据摘要),设为hash1,然后计算整个证书的hash值,设为hash2,对比hash1和hash2是否相等,如果相等,则说明证书是没有被篡改过的。

中间人有没有可能篡改该证书?

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

中间人整个掉包证书?

因为中间人没有CA秘钥,所以无法制作假的证书吗,那么中间人只能向CA申请真证书,然后进行掉包,这个确实能做到证书的整体掉包,但是别忘了,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。

2.7、完整流程

deb0c5dcf7584cdfab30a22164c0e3c2.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程中常用的一些方法介绍

目录 1. setName和getName方法 2. 静态方法currentThread 3. 静态方法sleep 4. setPriority和getPriority方法 5. setDaemon方法 6. 静态方法yield 7. join方法 下面介绍这些方法的使用,以下面的MyThread为例: public class MyThread extends Th…

电商系列之促销

> 插:AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家…

SpringBoot + Vue + Nginx前后端分离项目本地部署(Win)

SpringBoot Vue Nginx前后端分离项目本地部署步骤 本地部署所需步骤 将后端打包好的jar文件和前端生成的静态资源文件放入同一目录启动Spring Boot应用配置Nginx并重启访问 http://your_domain 查看部署效果 前端Vue项目部署 将写好的vue代码的目录下运行 npm run build …

956: 约瑟夫问题的实现

【学习版】 【C语言】 #include <iostream> #include <string> #include <algorithm> #include <cmath> #include <cstdlib> using namespace std; typedef struct Lnode {int date;struct Lnode* next; }Lnode, * Linklist; int In(Linklist&…

《数据结构学习笔记---第十篇》--- 堆堆排序(超详细图解)

目录 1.堆是什么? 2.问题引入&#xff1a;当我们插入一个新的元素时&#xff0c;那么他还是堆吗。 3.堆的元素插入 4.问题引入&#xff1a;当我们删除一个堆顶元素时&#xff0c;我们又该如何调整呢&#xff1f; 5.堆顶元素删除 6.如何建堆&#xff1f; 6.1向上调整建堆…

面试算法-140-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2…

网络编程(TCP、UDP)

文章目录 一、概念1.1 什么是网络编程1.2 网络编程中的基本知识 二、Socket套接字2.1 概念及分类2.2 TCP VS UDP2.3 通信模型2.4 接口方法UDP数据报套接字编程TCP流套接字编程 三、代码示例3.1 注意点3.2 回显服务器基于UDP基于TCP 一、概念 首先介绍了什么是网络编程&#xff…

大模型量化技术-GPTQ

大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…

Autodesk Maya 2025 Multilanguage (macOS, Linux, Windows) - 三维动画和视觉特效软件

Autodesk Maya 2025 Multilanguage (macOS, Linux, Windows) - 三维动画和视觉特效软件 三维计算机动画、建模、仿真和渲染软件 请访问原文链接&#xff1a;https://sysin.org/blog/autodesk-maya/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

‘cv2’、PIL、torch、torchivision

运行环境安装失败集 1、 ModuleNotFoundError: No module named ‘cv2’No module named ‘cv2’ opencv-python PEP517 ERROR2、ModuleNotFoundError: No module named PIL3、torch、torchvision安装 1、 ModuleNotFoundError: No module named ‘cv2’ No module named ‘cv…

基于SSM的社区疫情防控管理信息系统

目录 背景 技术简介 系统简介 界面预览 背景 随着时代的进步&#xff0c;计算机技术已经全方位地影响了社会的发展。随着居民生活质量的持续上升&#xff0c;人们对社区疫情防控管理信息系统的期望和要求也在同步增长。在社区疫情防控日益受到广泛关注的背景下&#xff0c…

JAVAEE——文件IO

文章目录 文件的概念什么是文件&#xff1f;树型结构组织 和 目录文件路径相对路径绝对路径 文件的分类文件的权限 文件读写IO API字符流操作API 警告字节流操作APIInputStreamOutputStream 文件的概念 什么是文件&#xff1f; 我们先来理解一下什么是文件&#xff0c;那么想…

四川尚熠电子商务有限公司靠谱吗?怎么样?

在当下数字化浪潮中&#xff0c;电子商务行业正以前所未有的速度蓬勃发展。四川尚熠电子商务有限公司&#xff0c;作为专注于抖音电商服务的企业&#xff0c;凭借其敏锐的市场洞察力和创新精神&#xff0c;正成为行业内的佼佼者&#xff0c;为众多品牌打开抖音电商市场的大门。…

[技术闲聊]我对电路设计的理解(三)

终于可以独立做项目了&#xff0c;是不是很激动&#xff0c;是不是为自己骄傲和自豪&#xff0c;应该的&#xff0c;奋斗那么久不就是为了站在山巅看看四周的风景嘛&#xff01; 虽说山外还有山&#xff0c;但是此刻就在脚下的山巅上&#xff0c;怡然自得都是不过分的&#xff…

YOLOv8改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

一、本文介绍 本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络,CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下…

《内心强大比什么都重要》 - 三余书屋 3ysw.net

内心强大比什么都重要 今天我和大家一起分享一本好书&#xff0c;艾米莫林的《内心强大比什么都重要》。这本书中描述了人们如何控制情绪、想法和行动&#xff0c;让自己的内心更强大。书中也列举了一些有用的建议、积极向上的例子和实际解决方法&#xff0c;来帮助读者们克服…

Python搭建编程环境-安装Python3解释器

✅作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1&#x1f3c5; &#x1f525;本文已收录于Python系列专栏&#xff1a;零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书…

Linux是什么,该如何学习

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、Linux在现代计算机领域…

Java源值1.5已过时,将在未来所有发行版中删除

1、背景 确认java项目没问题&#xff0c;但是启动的时候&#xff0c;却报错&#xff1a;java: -source 1.5 中不支持 diamond 运算符 2、解决 2.1 2.2 2.3 2.4 2.5

阿里云PAI-EAS试用-ComfyUI

试用信息 试用地址 PAI-EAS试用 提供资源 其中A10服务器在10元每小时左右&#xff0c;意味着我们可以使用的试用时间在40个小时以上。每天玩4小时&#xff0c;也可以玩10天了&#xff0c;练习完全够用。 具体过程 官方给了一个简单的指导文档&#xff0c;包括领用资源、部…