HTTPS实现原理

1 为什么需要HTTPS?

HTTP 在进行数据传输时采用明文传输,数据包中的用户信息等隐私数据可以被第三方通过抓包等方式窃取,是不安全的。

如果客户端使用 MD5 加密算法对数据进行加密,由于加密后的结果是不可逆的,服务器无法进行解析,只能使用加密后的字符串进行校验用户身份,而第三方也可以获取数据包中的加密字符串,从而骗取服务器的信任,所以也无法通过 MD5 加密算法解决 HTTP 传输不安全的问题。

为了解决 HTTP 明文传输不安全的问题,比 HTTP 安全的 HTTPS 应运而生。

2 HTTPS是什么?

HTTPS = HTTP + SSL/TLS。HTTPS 使用 HTTP 进行通信,并使用 SSL/TLS 在进行数据传输时对数据包进行加密,确保数据进行安全传输。

在这里插入图片描述

SSL (Secure Sockets Layer) 是由 Netscape 公司设计的用于 Web 的安全通信协议,开发至 3.0 版本后交由 IETF 进行标准化,IETF 在 SSL 3.0 基础上开发出了 TLS 1.0 (Transport Layer Security),并写入了 RFC。

3 对称加密与非对称加密

3.1 对称加密

对称加密,顾名思义,通信双方采用相同的密钥对数据进行加解密,常见的对称加密算法有 AES、DES、3DES等。

通信过程:在接收到客户端的请求后,服务器生成一把密钥,并通过网络发送给客户端,客户端拿到密钥后对数据进行加密,将加密后的数据发送给服务器,服务器再使用密钥对数据进行解密。

优点:加解密计算量小,速度快。

缺点:由于只有一个密钥供通信双方使用,所以密钥需要在一方生成后传输给另一方,在传输过程中存在被截获的风险。

3.2 非对称加密

非对称加密,顾名思义,加密和解密使用不同的密钥:公钥 (Public Key) 和私钥 (Private Key)。公钥和私钥是一对密钥,使用公钥加密的数据只能通过对应的私钥解密,使用私钥加密的数据也只能通过对应的公钥解密。常见的非对称加密算法有 RSA 等。

通信过程:在接收到客户端的请求后,服务器生成一对密钥,并将其中一把作为公钥通过网络发送给客户端,客户端拿到公钥后对数据进行加密,将加密后的数据发送给服务器,服务器使用私钥对数据进行解密。

优点:加密和解密使用不同的密钥,私钥不用进行网络传输,安全性高。

缺点:加解密计算量大,速度慢,资源占用大。

4 HTTPS原理

HTTPS 采用混合加密方式进行数据传输。考虑到对称加密的密钥可能被截获以及非对称加密计算量大,速度慢的缺点,先采用非对称加密传输密钥,然后采用对称加密对数据包进行加解密。

在接收到客户端的请求后,服务器生成一对公钥和私钥,并把公钥发送给客户端,客户端拿到公钥后,生成用于对称加密的密钥 KEY,然后用公钥对 KEY 进行加密并发送给服务器,服务器接收到后使用私钥进行解密获得 KEY,然后客户端和服务器就可以使用这个相同的 KEY 对数据包进行加解密,如下图所示。

在这里插入图片描述

但是,按照上述过程就能保证安全了吗?

答案是否定的。貌似我们对服务器发出的公钥有很强的信任。试想一下,客户端和服务器之间有个中间人,其也可以获取服务器发出的公钥,如果他拦截了服务器要发送给客户端的公钥,并伪造了一把公钥然后再发送给客户端,在客户端使用伪造的公钥加密 KEY 并发出后进行拦截,那么他就可以窃取到客户端生成的 KEY,从而可以获取到客户端与服务器之间通信的数据包中的用户信息,导致严重的后果。

那么,如何确保客户端收到的公钥是可信的呢?这就需要能够证明服务器身份的数字证书了。

采用 HTTPS 通信的服务器需要向第三方数字证书认证机构 (CA) 申请数字证书(需要付费,安全等级越高价格越贵),机构在进行审核后会颁发电子证书,同时产生一对公钥和私钥,私钥由服务器自己保存,公钥则附加在证书信息中,与证书一起公开。证书本身也带有一个电子签名,该签名用于校验证书的完整性和真实性,可以防止证书被篡改。

所以,在进行数据传输前会增加证书验证的过程。服务器接收到客户端的请求后,将数字证书发送给客户端,里面包含了公钥。客户端接收到证书后会对证书进行校验,校验不通过则会向用户提示警告信息。校验通过后则取出公钥并对 KEY 进行加密,然后发送给服务器,服务器接收到加密后的 KEY 以后使用私钥进行解密,然后客户端和服务器采用对称加密的方式进行数据传输,如下图所示。

在这里插入图片描述

5 参考链接

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 - SegmentFault 思否

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

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

相关文章

adf4159 直接调制/快速波形产生13 GHz小数N分频频率合成器

优势和特点 RF带宽达13 GHz高速和低速FMCW斜坡发生25位固定模数可提供次赫兹频率分辨率PFD频率最高达110 MHz归一化相位噪底:−224 dBc/HzFSK和PSK功能锯齿波、三角波和抛物线波形发生斜坡与FSK叠加具有2种不同扫描速率的斜坡斜坡延迟、频率回读和中断功能可编程相…

Blender教程(基础)-面的细分与删除、挤出选区-07

一、Blender之面的细分 新建一个立方体,在编辑模式下、选中一个面。 在选中的面上单击右键弹出细分选项,选择细分。 在选中细分后、会默认细分1次。修改细分次数在左下角 二、Blender之面的删除 选择中需要操作的面,在英文状态下按X键弹…

【计算机视觉】万字长文详解:卷积神经网络

以下部分文字资料整合于网络,本文仅供自己学习用! 一、计算机视觉概述 如果输入层和隐藏层和之前一样都是采用全连接网络,参数过多会导致过拟合问题,其次这么多的参数存储下来对计算机的内存要求也是很高的 解决这一问题&#x…

linux 04 进程管理

02.进程管理 ps 在命令行输入ps后按回车键就能查看当前系统中正在运行的进程。 第一. 查看进程ps 进程的状态STAT 进程的周期 fork,产生一个新进程 第二.排序进程表 ps aux --sort -%cpu 降序cpu %cpu 增序cpu 第三.父子关系 ps ef 第四.自定义 五.动态查看…

FileZilla 的安装与使用

目录 一. FileZilla 是什么二. FileZilla 的安装1. 下载 FileZilla2. 安装 三. FileZilla 的使用 一. FileZilla 是什么 FileZilla 是一个免费的开源 FTP(文件传输协议)客户端软件,用于在计算机之间传输文件。它提供了一个直观的用户界面&am…

轮转数组[中等]

优质博文:IT-BLOG-CN 一、题目 给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,…

VueFire:一个一流的 Vue 和 Firebase 体验,包括对 Nuxt 的支持,现在已经稳定了

VueFire,一个一流的 Vue 和 Firebase 体验 — 包括对 Nuxt 的支持,现在已经稳定了。 Vue 和 Firebase 现在比以往任何时候都更好了。 构建更好的VueFire 去年,我们宣布与 Eduardo San Martin Morote 合作,构建一个成熟的 Vue 和…

蓝桥杯嵌入式第七届真题(完成) STM32G431

蓝桥杯嵌入式第七届真题(完成) STM32G431 题目 相关文件 main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body**********************…

我的创作纪念日和前端碎碎念

机缘 作为一个前端开发者,我一直热衷于将设计和技术相结合,尽可能提升用户体验。我最初成为创作者的初心源于学习记录,把创作当作一个笔记,希望把自己遇到的问题,以及学习到的实用技巧记录下来,方便学习回…

第九节HarmonyOS 常用基础组件22-Marquee

1、描述 跑马灯组件,用于滚动展示一段单行文本,仅当文本内容宽度超过跑马灯组件宽度时滚动。 2、接口 Marquee(value:{start:boolean, step?:number, loop?:number, fromStart?: boolean ,src:string}) 3、参数 参数名 参数类型 必填 描述 st…

智能指针——浅析

智能指针 本人不才,只能将智能指针介绍一下,无法结合线程进行深入探索 介绍及作用 在异常产生进行跳转时,通过栈帧回收进行内存释放,防止内存泄漏 基于RAII思想可以创建出只能指针 RAII(Resource Acquisition Is Initializatio…

备战蓝桥杯---数据结构与STL应用(入门4)

本专题主要是关于利用优先队列解决贪心选择上的“反悔”问题 话不多说,直接看题: 下面为分析: 很显然,我们在整体上以s[i]为基准,先把士兵按s[i]排好。然后,我们先求s[i]大的开始,即规定选人数…

Neo4j介绍

1.Neo4j概述 Neo4j是一个开源的 无Shcema的 基于java开发的 图形数据库,它将结构化数据存储在图中而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。程序数据是在一个面向对象的、灵活的网络结构下,而不是严格、静态的表…

计算机网络-物理层设备(中继器 集线器)

文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器(多口中继器)不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域(冲突域)内的原因 小结 中继器 中继器的功能 中继器的…

Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(三)

1.QSet: toList 中的toList 函数已不存在,遇到xx->toList改成直接用,如下: 2.开源QWT 图形库中QwtDial中的 setPenWidth 变成 setPenWidthF函数。 3.QDateTime 中无setTime_t 改为了setSecsSinceEpoch函数。 4.QRegExp 类已不存在 可以用Q…

给定n个结点的树,u,v两个结点可以配对当且仅当u不是v的祖先且v不是u的祖先,每个结点最多与一个结点配对,求最大配对个数

题目 思路: #include <bits/stdc++.h> using namespace std; #define int long long typedef long long ll; #define pb push_back #define lson p << 1 #define rson p << 1 | 1 #define fi first #define se second const int maxn = 1e6 + 5, maxm = 5e…

免费的ChatGPT网站(7个)

还在为找免费的chatGPT网站或者应用而烦恼吗&#xff1f;博主归纳总结了7个国内非常好用&#xff0c;而且免费的chatGPT网站&#xff0c;AI语言大模型&#xff0c;我们都来接触一下吧。 免费&#xff01;免费&#xff01;免费&#xff01;...&#xff0c;建议收藏保存。 1&…

简单高效 Learn LaTeX 013 - LaTex FloatingBody Tables (44 mins) 浮动体表格

浮动体是LaTex中的一个重要概念&#xff0c;这个视频演示了以浮动体为载体的表格的排版应用。 https://www.douyin.com/user/self?modal_id7305874487138913574&showTabpost

基于 LLM+LlamaIndex+NebulaGraph,构建大模型知识图谱的检索(RAG)方法

最近&#xff0c;围绕着利用 LLM&#xff08;Language Model&#xff09;和知识图谱&#xff08;KG&#xff0c;Knowledge Graphs&#xff09;构建RAG&#xff08;Retrieval Augmented Generation&#xff09;流程引起了很多关注。 在本文中&#xff0c;让我们通过利用 LlamaI…

鸿蒙会取代Android吗?听风就是雨

现在说取代还谈不上&#xff0c;毕竟这需要时间。安卓作为全球第一的手机操作系统&#xff0c;短时间内还无法取代。持平iOS甚至超过iOS有很大可能&#xff0c;最终会呈现“三足鼎立”有望超过安卓基数。 作为全新的鸿蒙操作系统&#xff0c;其现在已经是全栈自研底座。按照鸿…