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

HTTPS 协议原理

一.HTTPS的定义

大家在刚开始学习的时候是不是也是非常好奇HTTP与HTTPS之间有什么区别和联系,两者都是应用层协议,而HTTPS是在HTTP的基础上引入了加密层,从而将HTTP的明文传输进行加密,保障数据的安全性



二.加密与解密

定义:将明文(要传输的数据)通过一系列变化转换成密文的过程就是加密

           将密文通过密钥转换成明文的过程称为解密

关于加密的原因不用想大家肯定都知道是为了防止信息泄露,那么我们就通过另外一个例子来了解加密的重要性;

假如现在你要下载一个名为A的程序软件,但当你的请求在网络中传输时,由于是明文传输,网络运营商就可以获取到你的请求并且可以将其劫持,然后发送其想要你下载的软件,然后你就会发现下载好的内容不对,但是期间就会浪费大量时间与陈本,如果你的下次下载请求还是被劫持,这样是不是就会非常难受,这就是运营商劫持,这也体现出明文传输在网络中的巨大缺点

如下图;

下面我们来了解下加密的方式:

对称加密:

定义:通过单密钥的加密方式,同一个密钥可以同时用作信息的加密和解密,,这种加密方法称为对称加密, 也称为单密钥加密
常见对称加密算法(了解): DES、 3DES、 AES、 TDEA、 Blowfish、 RC2 等
特点: 算法公开、 计算量⼩、 加密速度快、 加密效率⾼
例如:

密钥是按位异或,假设原始数据时a,通过密钥key加密得到b,此时接受端得到b,对b^key就得到a,此时就完成解密,双方使同一密钥,当然实际当然不会如此简单

非对称加密:

定义:

通过两个密钥来进行加密和解密, 这两个密钥是公开密钥(public key, 简称公钥) 和私有密钥(private key, 简称私钥)

公钥:是指即使泄露也没关系的密钥,而非是指直接公开的密钥

私钥;是指不能泄露的密钥

常见非对称加密算法(了解): RSA, DSA, ECDSA
特点: 算法强度复杂、 安全性依赖于算法与密钥但是由于其算法复杂, 而使得加
密解密速度没有对称加密解密的速度快
补充点:

我们是可以用公钥加密也可以用私钥加密,当然需要对应的另一个来解密

公钥和私钥是配对的. 最大的缺点就是运算速度非常慢, 比对称加密要慢很多
例如:

假设A持有B给的一把锁,当其将文件放入柜子时,将柜子锁上,而锁可以有多把,也可以给C,但是钥匙只有B持有,即公钥是指锁,私钥是指钥匙




三.数据摘要 && 数据指纹

数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。 数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
摘要常见算法: 有 MD5、 SHA1、 SHA256、 SHA512 等, 算法把无限的映射成有限, 因此可能会有碰撞(两个不同的信息, 算出的摘要相同, 但是概率非常低)
摘要特征: 和加密算法的区别是, 摘要严格意义不是加密, 因为没有解密, 只不
过从摘要很难反推原信息, 通常用来进行数据对比

 




四,HTTPS加密所用的方案

1.只使用对称加密

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

我们知道服务器会同时与多个客户端建立连接,而每一个连接的对称的密钥肯定要保证不同,所以每一个连接都需要双方协商,所以密钥是不是就要传输,从而保证双方都拿到同一个密钥来保证通信,但是密钥如果在传输过程中被截获,双方的通信是不是就相当于对窃取者透明,如果截取者再对密钥修改,是双方的内容必须通过截取者这个中间人,那么信息就会完全泄露而且内容也可能被修改

2.只使用非对称加密

鉴于非对称机制,如果服务器将公钥发送给客户端,那么客户端将信息加密(通过公钥)传递给服务器,服务器就可以通过私钥解密,这样看起来信息就不会泄露,那么不妨我们多想想,如果服务器需要将信息发送客户端,那么服务器是不是就需要用私钥加密,但是我们知道公钥是可以被截取的,那么其他人也可以通过公钥对服务器发送的信息进行解密,这样就会出现信息泄露,所以这种方法也是不安全的

3.双方同时进行非对称加密

服务器持有私钥S和公钥S',客户端持有私钥C和公钥C',双方同时将公钥发送给对方,然后这样是不是就看起来可以实现通信并且保证安全

这种方法首先最严重的问题是效率太低了,并且其实也无法保证安全,后面会讲,而在网络通信时,时间是非常重要的,所以也不是最优解

4.非对称加密和对称加密
服务器持有私钥S和公钥S',当客户端发送https请求时,服务器将公钥发送给客户端,客户端得到公钥后,生成对称加密的密钥X,然后利用公钥加密X,发送给服务器,服务器通过私钥S解密,得到对称加密的密钥X,然后双方就可以通过来进行对称加密

由于对称加密效率远高于非对称加密,该方案在后续过程中一直使用对称加密,效率明显提高,那么这种方法是否安全?

如果中间人将后序信息窃取是无法破解的,但是如果中间人在服务器发送公钥S'时就对信息截取并将原本发送给客户端的公钥S'修改成中间人自己的公钥M',这样客户端收到公钥M’,然后将X发送给中间人,这样中间人就毫不费力的截取到对撑加密的密钥,后续的所有信息还是回完全泄露。

目前来看所有的组合是都存在问题的,那么该如何破局呢?




五.证书与签名

服务器在使用HTTPS之前去CA认证一份数字证书,证书中包含了服务器的诸多信息以及公钥,然后服务器将证书发送给浏览器,浏览器得到证书后可以得到对应的公钥,然后双方即可进行通信,下面我们就来一一认识具体的细节:

1.证书的申请:

服务器生成一个公钥S’和私钥S,然后将自身的诸多信息发送给CA认证机构,注意:私钥是不发送的,公钥要发送给CA,CA机构对信息进行审核,然后生成一份包含服务器公钥的证书

对于证书:大家可以看成一个结构化的字符串里面包含了以下信息:
• 证书发布机构
• 证书有效期
• 公钥
• 证书所有者
• 签名
• ......
2.签名的理解:

当CA机构得到服务器的申请时,会在自身生成一个公钥A',私钥A,然后将服务器发送的数据形成一份散列值,然后将散列值通过A进行加密形成签名。如果此时在将数据和签名整合,就会形成一份数字签名的数据,后面CA的公钥A会发送给浏览器,此时就可以通过将签名解密和数据形成的散列值进行对比,此时就可以确定数据是否合法,当然这些我们后面会讲,这里简单提下,这个过程叫验证
现在我们知道了证书的相关概念,那么我们是否可以通过证书来实现安全的网络传输呢?




六.非对称加密+对称加密+证书机制

首先,当浏览器对一个服务器明文发送一个请求时,服务器会将一份经过CA机构认证的证书发送给浏览器,证书中包含了服务器的公钥S,然后在浏览器端将数据散列值和签名用公钥解密得到的散列值进行对比,如果相等,说明得到的是安全的数据,然后客户端生成一个对称加密的密钥X,然后通过证书中的服务器公钥进行加密,发送给服务器,服务器通过私钥解密得到密钥X,然后双方就可以对称加密通信

现在问题来了,该方法是如何保证通信安全的呢?

我们知道非对称加密和对称加密的组合只有在服务器第一次发送响应时可以被中间人截取信息,那么证书机制如何保证这个过程的安全呢?

首先,当服务器发送的证书被中间人截获后,其可能已经得到了对应的公钥,所以可以对其解包,得到数据和签名,但是签名由于其根本不掌握对应的私钥是无法修改的,当用户进行验证时,如果中间人对数据做过修改,散列值和签名解密得到的内容是无法做到相等的。

此时你可能好奇,中间人不可以用自己的私钥重新生成一份签名,然后和数据整合形成一份证书吗?

问题来了,我客户端为什么要认中间人的公钥呢?如果我不认中间人对应的公钥是不是就无法做到对签名解密,那么肯定是网络传输中出现了问题,客户端直接丢弃该内容即可

通过以上方案就可以实现网络通信的安全保障了

最后,感谢大家的支持!!!

相关文章:

HTTPS 协议原理

一.HTTPS的定义 大家在刚开始学习的时候是不是也是非常好奇HTTP与HTTPS之间有什么区别和联系,两者都是应用层协议,而HTTPS是在HTTP的基础上引入了加密层,从而将HTTP的明文传输进行加密,保障数据的安全性 二.加密与解密 定义&#…...

Vxe UI 表格行编辑(默认不显示编辑框,点击后可编辑)

效果: HTML代码:(type"integer"为这个,是限制只能输入正整数或负整数,英文和汉字自动转成0) <vxe-tableshow-overflowkeep-sourcev-loading"loading":data"ruleList"ref"Table":row-config"{isHover: true}"height"…...

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…...

爬虫利器playwright

是什么 它是微软在 2020 年初开源的新一代自动化测试工具&#xff0c;其功能和 selenium 类似&#xff0c;都可以驱动浏览器进行各种自动化操作。还可以录制脚本 案列-01 运行之后我们用它自动打开的谷歌浏览器&#xff0c;打开百度&#xff0c;输入漂亮小姐姐并查找&#x…...

着色器的认识

知识了解&#xff1a; 着色器&#xff1a; 顶点着色器: 用来描述顶点的特性,如位置、颜色等&#xff0c;其中&#xff0c;顶点&#xff1a;是指二维或三维空间中的一个点比如交点或者端点。 片元着色器&#xff1a;用来进行逐片元处理操作&#xff0c;比如光照、颜色叠加等&…...

科技的成就(六十四)

591、《传奇》开始公开测试 "2001 年 9 月&#xff0c;《传奇》开始公开测试。《传奇》&#xff08;全称《热血传奇》&#xff09;是由韩国 WeMade 娱乐开发制作的大型多人在线角色扮演游戏&#xff0c;由 Delphi 编写。盛大网络于2001 年获得该游戏在中国的代理权。《传奇…...

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...

全文链接&#xff1a;https://tecdat.cn/?p38026 分析师&#xff1a;Fanghui Shao 在当今金融领域&#xff0c;风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户&#xff0c;还是信贷风控模型的构建&#xff0c;以及基于决策树的银行信贷风险预警&#xff0c;…...

〈壮志凌云:独行侠〉中的超高音速战机

电影《壮志凌云&#xff1a;独行侠》中使用的黑星&#xff08;Darkstar&#xff09;高超音速概念战机模型&#xff0c;虽然看起来像是科幻电影里的产物&#xff0c;但这架飞机实际上是由洛克希德马丁公司的臭鼬工厂&#xff08;Skunk Works&#xff09;设计&#xff0c;这是一家…...

k8s集群 ceph rbd 存储动态扩容

k8s 集群 rbd 扩容有两种方法&#xff0c;如下所示 通过StorageClass自动扩容 # kubectl get sc csi-rbd-sc -oyaml|grep allowVolumeExpansion allowVolumeExpansion: true如果搜索有如上字段&#xff0c;说明是可以自动扩容的&#xff0c;修改对应要扩容的 PVC容量&#xf…...

C语言笔记(指针题目)例题+图解

本文分为两部分 &#xff0c;第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析&#xff0c;第二部分是一些笔试题目。若有错误&#xff0c;请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…...

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)

从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09; 文章目录 从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09;一、前言二、vue项目部署前配置1、vite.config.js 增加…...

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章&#xff0c;非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会&#xff0c;作为一个经常参加线下探会的博主&#xff0c;每一次体验都有所不同&#xff0c;每一次新技术的突破都让人感到无比兴奋。同时&#xff0c;作为数…...

项目:抽奖系统

文章目录 1. 项目&#xff1a;抽奖系统 1. 项目&#xff1a;抽奖系统 from faker import Fakerfk Faker(localezh_CN)name_list [] for i in range(100):name_list.append(fk.name()) print(name_list)import randomclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__…...

synchronized进阶原理

synchronized进阶原理 1.轻量级锁 轻量级锁的使用场景:如果一个对象虽然有多个线程访问,但多线程访问的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化(如果出现竞争,操作系统会将轻量级锁升级为重量级锁)。轻量级锁对使用者是透明的(由操作系统控制),即语法仍是s…...

C++,STL 052(24.10.29)

内容 1.对map容器的大小进行操作。 2.map容器的交换操作。 运行代码 #include <iostream> #include <map>using namespace std;void printMap(map<int, int> &m) {for (map<int, int>::iterator it m.begin(); it ! m.end(); it){cout <<…...

git下载和配置

git是什么&#xff1f; Git是一种分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;尤其是源代码。它允许多个开发者在同一项目上进行协作&#xff0c;同时保持代码的历史记录。Git的主要特点包括&#xff1a; 分布式&#xff1a;每个开发者都有项目的完整副本&a…...

Linux基础—基础命令及相关知识5(ubuntu网络配置)

网络的配置方法 centos网络配置 centos的网卡位置 /etc/sysconfig/network-scripts/ifcfg-ens33(centos网卡文件) bootproto表示获得IP地址的方式是静态的还是动态 onboot表示启动系统时是否激活该网络接口 设置IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;dns…...

使用 firewall-cmd 管理 Linux 防火墙

firewalld-cmd命令翻译<一> Linux 系统中&#xff0c;firewalld 是一个流行的动态防火墙管理工具&#xff0c; firewall-cmd 是它的命令行接口。通过 firewall-cmd&#xff0c;可以轻松地管理防火墙规则、配置区域&#xff08;zones&#xff09;、处理端口等。 这篇文章…...

鸿蒙OS试题

哪些是持续部署最佳实践? A. 灰度发布:先在小部分用户或区域进行部署&#xff0c;观察没问题后再全面推广 B.手工部署:持续部署可以采用手工部署的方式发布软件: 1、有一份非常详尽的文档&#xff0c;该文档描述了执行步骤及每个步骤中易出错的地方; 2、以手工测试来确认该…...

Flutter InkWell组件去掉灰色遮罩

当InkerWell组件内部获取到焦点时&#xff0c;会展示一层灰色遮罩 将focusColor属性设置为透明即可 Flutter InkWell焦点效果源码分析 问题描述 当 InkWell 组件获得焦点时&#xff0c;会显示一层灰色遮罩效果。需要找出这个效果是由哪些组件控制的&#xff0c;以及具体的…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

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.…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...