【Java网络编程06】HTTPS原理

1. HTTPS基本概念

HTTPS:HTTPS也是一个应用层协议,它在HTTP协议的基础上引入了一个加密层——SSL协议,区别就在于HTTP协议是基于明文传输的(不安全),使用HTTPS加密就能在一定程度上防止数据在传输过程中被他人篡改
“运营商劫持”:这可以说是臭名昭著的案例,比如说之前下载天天动听,如果未被运营商劫持,那么正常弹出的就是天天动听的下载链接,但是一旦被运营商劫持,那么很可能弹出的就是例如QQ浏览器的下载链接,由于我们通过网络传输的各种数据包都要经过运营商的设备(路由器、交换机等)那么运营商就很容易将其中的内容进行篡改,其交互过程可以简化如下图所示:
image.png
那么运营商为啥要将"天天动听"的下载链接替换为"QQ浏览器"呢?很明显,这背后一定存在着某种商业交易!不仅仅运营商可以劫持,一些黑客也有可能使用类似的手段进行劫持来获取用户的隐私信息,总之在互联网上使用 明文传输 是比较危险的操作!HTTPS就是在HTTP协议的基础上引入了加密手段,进一步保障信息安全

2. 加密是什么

加密是保障数据安全的有效措施!这里需要强调尽管数据被黑客拿到了,黑客也解析不了/无法篡改,只要能做到这点,那么我们就可以说数据是安全的了;另一方面,在理论上加密的数据也有可能被解密成功,但是如果破解加密数据的成本远远高于数据本身的价值,那么我们也可以说这就是安全的!

2.1 密码学部分重要概念

明文:需要传输的真实数据
密文:针对明文加密之后的结果(往往是不直观、不易理解的)
加密:明文=》密文的过程就称之为加密
解密:密文=》明文的过程就称之为解密
在加密和解密过程中,往往需要借助一个或者多个中间数据进行辅助,这样的数据就称之为 “密钥”
对称加密:加密和解密的过程中使用的是同一个"密钥"
非对称加密:加密和解密的过程中使用的是不同的"密钥",此时这两个密钥是成对出现的,比如k1、k2,使用k1进行加密,此时就是使用k2进行解密;使用k2进行加密,此时就是使用k1进行解密,这两个密钥,被公开出去的就是 “公钥” ,自己持有的就是 “私钥” ,且如果只知道一个密钥,是无法知道另一个的存在的,这一系列特性背后都是"密码学"涉及的数学原理,在此不展开讨论!

3. HTTPS工作过程

既然要保证数据安全,那么就需要进行"加密",网络传输的过程中就不再直接传输明文信息,而是加密后的"密文",加密的方式与算法有很多,但是整体可以分为两大类:对称加密非对称加密

3.1 引入对称加密

我们之前提到过对称加密关键在于加密与解密的过程使用的是 同一个密钥 ,具有以下两个特点:

  1. 客户端和服务器无论谁生成密钥都需要告知对方(网络传输)
  2. 不同的客户端使用的应该是不同的密钥,如果所有的客户端使用的都是同一个密钥,那么这个密钥形同虚设

这就是问题的关键!比如说不同的客户端随机生成各自的对称加密密钥,都需要进行网络传输告诉服务器密钥值,因此这个过程中 黑客有可能拿到密钥的值 这样一来所有加密解密都是浮云!
image.png
此时黑客设备如果知道了密钥是"888888",那么后续加密传输的数据黑客也是可以解密出来的!如果对这个密钥继续使用"对称加密"算法加密呢?此时又继续需要传输密钥key2,那么在这个过程中黑客还是有可能拿到key2的值,因此单纯使用对称加密无法实现数据安全传输!

3.2 引入非对称加密

引入非对称加密的目的就在于 给对称密钥加密 ,如何来理解这个问题呢?由于服务器持有的称为私钥,公钥就可以暴露出去,因此客户端拿到公钥后就可以对 对称密钥 进行加密再传输给服务器,此时注意黑客是可以获取到公钥的,但是黑客这样就无法对加密后的对称密钥进行解密了,因为解密需要私钥,而私钥是服务器具备的,服务器使用私钥解密获得对称密钥的值,后续数据传输都基于这个对称密钥进行加密就实现了数据的安全传输,上述涉及的概念较多,我们还是使用图的方式来呈现其中的过程:
image.png
其中的关键就在于虽然非对称加密的公钥是可以暴露给所有人的,但是客户端使用公钥对 对称秘钥key 进行加密,此时黑客想要解密,必须知道 私钥 ,不巧的是私钥只有服务器端持有,因此这样就保证了客户端和服务器都知晓了对称秘钥key的值但是黑客不知道!

这里还有一个小问题,为什么不直接使用非对称秘钥对数据进行加密传输呢?因为非对称加密算法的解密成本比较大,非常耗费CPU硬件资源,因此无法支持大规模数据的加密传输,但是如果仅仅是加密解密对称秘钥的开销还是可控的!

3.3 中间人攻击漏洞

但是上述过程还存在着一个严重的"安全漏洞",业界称之为"中间人攻击",其关键在于服务器可以构造出一对私钥和公钥,但是黑客也可以构造出自己的公钥和私钥!如此一来黑客就可以冒充服务器,其过程可以描述如下图所示:
image.png
其中黑客既假扮了服务器欺骗客户端,又假扮了客户端欺骗服务器:

  1. 假扮服务器:生成一对非对称密钥pub2以及pri2,当服务器返回公钥pub1时,欺骗客户端返回自己的公钥pub2,此时后续客户端使用pub2将对称密钥进行加密,黑客可以使用私钥pri2解密对称密钥
  2. 假扮客户端:客户端实际上使用的是黑客提供的公钥pub2将对称加密密钥进行加密,如果直接将该加密结果返回给服务器,服务器使用自己的私钥pri1就会解密失败!因此黑客还会使用pub2对加密秘钥重新加密以此欺骗服务器

那么应该如何解决上述的 中间人攻击 呢?最关键的一点就在于客户端有能力知道返回的公钥究竟是服务器的还是经过黑客伪造的,这就要借助HTTPS证书了

3.4 HTTPS证书

这就要求服务器提供一个HTTPS证书,这个证书是一个结构化的数据,包含了一系列的信息,例如服务器的域名、证书有效期、第三方公证机构信息,这个证书是需要服务器的搭建者从第三方公证机构中申请的!那么问题来了,这个证书显然也是会经过黑客之手的,那么黑客是否有可能修改其中的内容呢??? 答案是不行的,因为客户端会先对证书进行验证:
证书验证过程
一个证书可以看做具有以下内容:

  1. 服务器域名
  2. 证书有效时间
  3. 第三方公证机构信息
  4. 服务器公钥
  5. 证书签名

其中最重要的就是这个"证书签名"字段了,此处的"证书签名"本质上是一个加密的校验和(把证书中其他字段内容通过某种一系列算法生成校验和),然后使用公证机构的私钥进行加密
客户端拿到这个证书之后,主要做两件事:

  • 使用相同的校验和生成算法对其他字段内容进行计算,生成校验和1
  • 使用系统内置的第三方公证机构的公钥对证书签名进行解密,得到解密后的校验和2

此时只需要比对校验和1和校验和2是否一致就可以判断黑客是否篡改了其中的部分内容!

比如说:

  1. 黑客尝试修改服务器公钥,不修改证书签名,此时客户端生成的校验和1就与解密之后的校验和2不一致
  2. 黑客尝试修改服务器公钥,并且修改证书签名,此时黑客不知道公证机构的私钥,因此无法重新加密,那黑客拿自己的私钥进行加密呢?客户端使用公证机构的公钥就会解密失败!
  3. 黑客使用自己申请的证书替换呢?那么客户端检查服务器域名的时候就会发现猫腻!

此时,就基本上将黑客窃取并修改的可能扼杀在摇篮里了!HTTPS的工作流程大致如上所示

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

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

相关文章

如何在Pycharm中导入第三方库(以pyecharts为例子)

打开Pycharm 点击右上角文件->设置->项目->pythonProject(Python解释器) 点击下图号 下一步:在搜索栏中直接搜索第三方包pyecharts并安装即可 以上便为使用Pycharm安装第三方库的全过程。 温馨小提示,如果大家在Pychar…

基于粒子群优化BP神经网络的三分类代码,基于pso+bp的01编码分类识别,PSOBP三分类

目录 摘要 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 粒子群算法的原理及步骤 基于粒子群优化BP神经网络的三分类代码,基于pso+bp的01编码分类识别 matlab代码下载链接:基于粒子群优化BP神经…

Linux-基础命令(黑马学习笔记)

Linux的目录结构 Linux的目录结构 Linux的目录结构是一个树形结构 Windows系统可以拥有多个盘符,如C盘、D盘、E盘 Linux没有盘符这个概念,只有一个根目录 /,所有文件都在它下面 Linux路径的描述方式 ● 在Linux系统中,路径之…

[rust] 11 所有权

文章目录 一 背景二 Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三 所有权原则3.1 变量作用域3.2 String 类型示例 四 变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)4.3 …

普中51单片机学习(定时器和计数器)

定时器和计数器 51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。51单片机中的定时器/计数器是…

模型 HBG(品牌增长)

系列文章 分享 模型,了解更多👉 模型_总纲目录。品牌增长法。 1 HBG(品牌增长)模型的应用 1.1 江小白使用HBG模型提高品牌知名度和销售额 选择受众市场:江小白的目标客户是年轻人,他们喜欢简单、时尚的产品。因此,江…

Vue3自定义组件v-model双向绑定

无能吐槽一下,虽然用了很多遍v-model,但是还是不得要领,每次看官网都感觉说的不是很清晰,在写的时候还是要查看文档,可能就是不理解原理,这次特意好好写一篇文章,让自己好好理解一下。 自定义一…

python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技…

【k8s核心概念与专业术语】

k8s架构 1、服务的分类 服务分类按如下图根据数据服务支撑,分为无状态和有状态 无状态引用如下所示,如果一个nginx服务,删除后重新部署有可以访问,这个属于无状态,不涉及到数据存储。 有状态服务,如redis&a…

备战蓝桥杯之并查集刷题之删除

题目比较模板,但是也扩展了许多以前不知道的知识点,记录一下比较有启发性的题。 目录 1.并查集之删除操作---创点转移: 2.并查集之删除操作---逆向思考: 1.并查集之删除操作---创点转移: 1和3都是并查集的基础操作&…

STM32F103x 的时钟源

AHB (Advanced High-performance Bus) 高速总线,用来接高速外设的。 APB (Advanced Peripheral Bus) 低速总线,用来接低速外设的,包含APB1 和 APB2。 APB1:上面连接的是低速外设,包括电源接口、备份接口、 CAN 、 US…

域名 SSL 证书信息解析 API 数据接口

域名 SSL 证书信息解析 API 数据接口 网络工具,提供域名 SSL 证书信息解析,多信息查询,毫秒级响应。 1. 产品功能 提供域名 SSL 证书信息解析;最完整 SSL 属性信息解析;支持多种元素信息抽取,包括主题的可…

CSS三大定位方式(浮动、定位、弹性盒)详细解析

CSS三大定位方式 前言:作为一名前端开发,已经工作2年了。由于自己是半路出家,从嵌入式方向转到前端开发,都是边百度边开发,很多基础都不了解,只要解决问题就好,但是近来为了让自己知识体系化&a…

基于springboot+vue的租房管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign(签名)进行请求,各接口对sign的签名内容、方式可能不一样,但一般都是从接口的入参中选择部分内容组成一个字符串,然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

深入探究node搭建socket服务器

自从上篇中sokect实现了视频通话,但是是使用ws依赖库实现的服务端,所以最近再看ws源码,不看不知道,一看很惊讶。 接下来一点点记录一下,如何搭建一个简易的服务端socket,来实现上次的视频通讯。 搭建一个…

Java面试笔记

Java面试笔记 Java面试笔记-网络模块 TCP的三次握手 TCP的简介: 面向连接的、可靠的、基于字节流的传输层通信协议 将应用层的数据流分割成报文段并发送给目标节点的TCP层 数据包都有序号,对方收到则发送ACK确认,未收到则重传 使用校验和来…

OpenCV 4基础篇| OpenCV图像基本操作

目录 1. 图像读取1.1 cv2.imread() 不能读取中文路径和中文名称1.2 cv2.imdecode() 可以读取中文路径和中文名称 2. 图像的显示2.1 openCV显示图像 cv2.imshow()2.2 matplotlib显示图像 plt.imshow() 3. 图像的保存 cv2.imwrite()4. 图像的复制4.1 img.copy()4.2 np.copy()4.3 …

模板(类模板)---C++

模板目录 2.类模板2.1 类模板语法2.2 类模板与函数模板区别2.3 类模板中成员函数创建时机2.4 类模板对象做函数参数2.5 类模板与继承2.6 类模板成员函数类外实现2.7 类模板分文件编写2.8 类模板与友元2.9 类模板案例 2.类模板 2.1 类模板语法 类模板作用: 建立一个…

Stable Diffusion——文生图界面参数讲解与提示词使用技巧

Clip终止层数 什么是Clip CLIP(Contrastive Language-Image Pretraining)是由OpenAI于2021年开发的一种语言图像对比预训练模型。其独特之处在于,CLIP模型中的图像和文本嵌入共享相同的潜在特征空间,这使得模型能够直接在图像和文…