【JavaEE】HTTPS加密原理

news2024/11/22 9:23:18

HTTPS加密原理✿✿ヽ(°▽°)ノ✿

在这里插入图片描述

文章目录

  • JavaEE & HTTPS加密原理
    • 1. 为什么要加密
    • 2. HTTPS加密原理
      • 2.1 初始想法
      • 2.2 引入非对称加密
      • 2.3 中间人攻击
      • 2.4 引入证书

JavaEE & HTTPS加密原理

1. 为什么要加密

例子:(运营商劫持)

你可能经常遇到一个现象,就是在下载一些软件的时候,明明是软件A,弹出的下载连接确实软件B:

未劫持的版本:

在这里插入图片描述

劫持后的版本:

在这里插入图片描述

  • 变成QQ浏览器了 >、 v <、
  • 因为数据报在网络上是通过许多交换机和路由器的转发进行传输的,所以经过运营商设备很正常!
    • 因此被劫持了

在这里插入图片描述

在这里插入图片描述

不仅仅运营商可以劫持,黑客当然也可以~

  • 只要网络上的数据是明文传输的,都是存在被劫持被更改的风险!
  • 而我们让网络数据传输变得相对安全的方法就是,让破解的成本高于数据的价值!
    • 因为再厉害的方法,都不是万能的~

HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):

一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。

https即在http的基础上通过加密,提高破解成本!

  • 此处的加密,我们就只作为一个“行为”,如何加密的不讲~
    • 认为加密后就是乱码~
  • 解密也是,看成一个“行为”就是了

2. HTTPS加密原理

2.1 初始想法

我们的想法是:将明文转化为密文传过去

明文 => 密文, 【加密】

密文 => 明文, 【解密】

而加密的过程我们抽象成一个对象“秘钥”,通过这个秘钥,可以让我们的明文通过一定的逻辑去计算后转化为密文

  • 加密一般针对的是HTTP的各种header 和 body
    • 一般黑客篡改响应,而不是篡改请求让服务器返回不同的响应,因为知道正文没这个必要去篡改请求,反而有风险~
    • 因为看得到请求才能篡改响应和篡改请求,至于不让请求发出去或者发不一样的请求(响应是发回黑客,不是客户端),客户端如果收不到(超时重传),起不到效果~
    • 所以,只有黑客解密成功,并加密成功,客户端才认这个数据
      在这里插入图片描述

而这就是最原始的:对称秘钥

  • 即,加密和解密用的是同一把钥匙

那我们来看一下数据报在网络上的传输~

在这里插入图片描述

  • 这样,数据报在网络上以密文的形式传输,黑客自然就无法篡改

聪明的你可能想到了:

  1. 如果这个密钥每个客户端都是一样的,那么黑客也可以是客户端,这样密钥就拿到手了,所以每个客户端都是不一样的密钥~
  2. 如果这个密钥由每个客户端自己生成的,那么则需要连同密文一起传给服务器才行,而黑客因此也可以拿到密钥了!这样子,对称密钥的安全性几乎为0~

在这里插入图片描述

2.2 引入非对称加密

由于对此加密的不安全性,则需要引入非对称加密,提高数据传输安全性~

非对称加密的加密规则如下:

  • 相比于对称加密,它多了一把密钥

在这里插入图片描述

就是说,通过pub加密的密文,不能由pub解密,得由与之对应的pri解密;而通过pri加密的密文,不能由pri解密,得由与之对应的pub解密!

  • 同理,通过pub解密的明文,也只能由pri加密;pri解密的明文,也只能由pub加密!

那我们来看一下数据报在网络上的传输~

第一步:

在这里插入图片描述

  • 目前所有人都拥有公钥pub,只有服务器拥有私钥pri

第二步:

在这里插入图片描述

  • 客户端本来就有key,响应的时候没必要传key
    • 千万不能用pri加密key,因为pub可以进行解密!
    • 并且私钥就是私用的,并不是人人皆知~

为什么不用pub直接加密req?

原因是,服务区虽然可以pri解密计算响应,但是这么返回响应呢?

  1. pri加密响应,pub可以解密
  2. pub加密响应,客户端看不懂
  • 这样,数据报在网络上以密文的形式传输,黑客自然就无法篡改

2.3 中间人攻击

相信聪明的你又能想到黑客可以怎么做:

在这里插入图片描述

  • 之后客户端就是小丑了

在这里插入图片描述

  • 黑客又赢了~

这就是中间人攻击~

2.4 引入证书

说到底,这里的问题就是,客户端直接相信了黑客传过来的pub,那么我们只需要判断这个pub的权威性,就行了~

这里的证书,不是“纸质”的证书,而是一个抽象的“对象”,里面又很多属性

  • 即,电子数字证

在这里插入图片描述

有一个权威的机构,负责颁发证书

  • 而我们的服务器要加密传输的https,那么我们就需要去这个机构里,申请证书!

  • 申请的时候,要提交一些资料(甚至要交钱),机构审核通过了,就会颁发证书

    • 而我们在提交资料的时候,就提交上公钥pub,就行了~

而第一步的索要pub就变为索要证书:

在这里插入图片描述

  • 现在,每个人都拥有这个证书

与之前的方法不同的是,黑客不能轻易的篡改证书,是由于现实原因和客户端证书的验证机制:

一、黑客不可以自己去申请证书?

  1. 成本高
  2. 只有pri才能解密得到key,而这个pri还在服务器那~
  3. 证书的属性里面有“服务器的域名”等等…,所以黑客如果改域名为服务器的以免穿帮,校验和也会因此变化~

二、黑客自己就是权威机构?

  1. 不现实,成本极其高,因为权威机构规模得很大
  2. 不安全,权威机构人人都是实名的,所以黑客不会这么做,客户端有损失,就会查到

客户端验证证书的机制,靠的就是证书的这一个属性:签名(即校验和)

  • 这个校验和的计算,跟之前学的校验和一样,是由一个“一一对应”的函数计算得来的
    • 假如**校验和 = f(x1, x2, x3, x4 …)** ,那么这个函数的每一对参数序列,都对应不一样的值!
    • 也就是说,只有证书的所有属性都不变,校验和才不变

在这里插入图片描述

而这个签名,由证书的私钥pri进行加密了,而我们怎么解密的?

  • 这个是一个权威的机构,几乎每一台机器上,都保存了他们的pri所对应的pub
  • 而黑客跟客户端一样,拥有公钥去获取签名

第二步(校验):

在这里插入图片描述

问题:

  1. 那这样黑客不就知道客户端的信息了吗?
    • 并不是,这里黑客只知道“我要证书”的请求(截断它的请求,会超时重传,所以没必要)
    • 黑客也只知道证书这个对象,而这个对象本来就是公布的
    • 而真正值钱的信息则是客户端信任后发布的请求!
  2. 黑客就不能修改属性后,调整到与校验和一致?
    • 不行,因为计算校验和的函数是“一一对应”的函数
    • 其次,调整后不符合侵略目的
  3. 黑客就不能修改属性后,修改校验和?
    • 不行,因为黑客得到校验和,将其修改,那么还要将其加密,加密成能由pub解密的密文,而这个加密过程的难度等同于去“解密对称密钥key”,因为黑客没有证书pri
  4. 能不能将校验和正文传过去
    • 不行,因为客户端会将这个正文当成密文,用pub解密,解密后就会发现对不上~
    • 那得找到解密后为正确的校验和的那个密文,那就是加密啊,回归到问题3的逻辑了~

这样黑客破解起来的成本就很高了

  • 但不代表这种方式百分百安全,因为安全是相对的,没有绝对的安全~

文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

✿✿ヽ(°▽°)ノ✿


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

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

相关文章

亚马逊云科技基于智能搜索,为企业打造知识库

知识库需求在各行各业中普遍存在&#xff0c;例如制造业中历史故障知识库、游戏社区平台的内容知识库、电商的商品推荐知识库和医疗健康领域的挂号推荐知识库系统等。亚马逊云科技为保证推荐系统的时效性和准确性&#xff0c;需要大量的数据/算法/软件工程师的人力投入和包括硬…

Threejs 快速入门

最小环境 首先&#xff0c;在正式学习Threejs前&#xff0c;有几个概念需要说明的。Threejs在底层其实还是调用html5中的canvas api来实现绘图的。但和我们一般绘制2D图像不同&#xff0c;Threejs在底层使用的是canvas的webgl context来实现3D绘图。webgl context本身更多是直…

如何向gitee开源项目提交代码

文章目录 前言登录账号fork项目fork完成拉去代码check out出分支开发提交代码到自己的远程仓库创建pull requestcreate pull request 前言 如何向开 源 项 目 提交自己的代码呢&#xff1f;相信很多小伙伴都会看到比较不错的开源项目&#xff0c;然后想在此基础上实现自己的代…

读财报丨Q1保费环比增长33.4%,慧择增长源泉来自于何处?

一季度我国经济表现开局良好&#xff0c;保险行业增长态势明朗。从财报来看&#xff0c;中国人寿、中国平安、中国人保、新华保险、中国太保等大型上市险企Q1净利润纷纷超预期&#xff0c;随着巨头业绩转暖&#xff0c;保险中介行业也迎来了发展好时机。 近日&#xff0c;国内…

Xshell安装教程-Xshell 7激活教程-Xshell换机转移许可证详解

Xshell 7是一款功能强大的终端模拟器&#xff0c;支持SSh2&#xff0c;SSh3&#xff0c;SFTP&#xff0c;TELNET&#xff0c;RLOGIN和SERIAL。通过提供业界先进的性能&#xff0c;Xshell包含了其他SSH客户端无法发现的功能和优势。 本篇文章主要为大家介绍Xshell 7的安装、激活…

自动化回归测试工具—— AREX 上手实践

AREX 是一款开源的自动化测试工具平台&#xff0c;基于 Java Agent 技术与比对技术&#xff0c;通过流量录制回放能力实现快速有效的回归测试。同时提供了接口测试、接口比对测试等丰富的自动化测试功能&#xff0c;无需编程能力也可快速上手。 AREX 可以通过 Docker-Compose …

当开发同事辞职,接手到垃圾代码怎么办?

目录 一、前言 二、开发中的另一种选择 三、低代码概念 四、低代码在开发中的优势 01、开发效率提高 02、开发成本减少 03、维护性更高 五、有低代码后就不要开发了? 一、前言 事实上&#xff0c;垃圾项目是日积月累而成的&#xff0c;所谓冰冻三尺非一日之寒&#xf…

列表与字典—>一维列表

这一期内容可以结合着与第一期一起看https://guidm.blog.csdn.net/article/details/130900129?spm1001.2014.3001.5502 让我们来先做个题目&#xff1a; 1、输入一个整数n&#xff0c;要求输出[1,n]范围内的所有完数。 完数是一个正整数&#xff0c;该数恰好等于其所有不同…

计算机组成原理笔记概览

Chapter 1 计算机概要与技术Chapter 2 指令:计算机的语言Chapter 3 算术运算Chapter 4 处理器Chapter 5 大容量和高速度:开发存储器层次结构适配教材:《计算机组成与设计 硬件/软件接口 原书第5版》 要学计算机组成原理,你得知道它是干什么的,抓住总线:如何改进计算机的…

nacos入门-纯springboot整合nacos(百分之百可以-参考官网,比官网还全)

我是一个大数据工程师&#xff0c;但是被迫营业做后端&#xff0c;现在接手了一个项目&#xff0c;干&#xff01;有个东西叫Nacos。没接触过&#xff0c;那不行&#xff0c;会被优化的。我一大数据工程师搞gr的springcloud&#xff0c;网上很多说整合整合springboot的&#xf…

Python+Django生活用品商城网站前后端

程序示例精选 PythonDjango生活用品商城网站前后端 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonDjango生活用品商城网站前后端 >>编写代码&#xff0c;代码整洁&am…

Java多线程wait notify和park unpark的使用

目录 一、wait & notify的使用1、API介绍2、demo2、多线程模式3、wait和notify的原理 二、Park & Unpark的使用1、基本使用2、特点3、park和unpark的原理 一、wait & notify的使用 1、API介绍 obj.wait() 让进入 object 监视器的线程到 waitSet 等待 obj.wait(n)…

508教室使用方法

一、教室平面图 508教室的布局如下&#xff0c;重要的设备已经在图中标出。总开关、一体机和机柜。   二、使用方法 2.1 房间机器上电 进门后首先走到“总开关位置”&#xff0c;将电匝闭合。 原来的开关如图所示&#xff0c;有3组开关&#xff0c;1号组开关用于控制插座、…

商业智力,Social焕新|数说故事重磅发布“SocialGPT”,国内首个专注Social领域的商业大模型

AGI时代的到来&#xff0c;市场风云变幻&#xff0c;世界正在经历着一场技术革命的颠覆性洗礼。 2023年6月6日6时&#xff0c;数说故事正式对外发布数说故事“SocialGPT”&#xff0c;国内首个专注Social领域的商业大模型。数说故事“SocialGPT”大家昵称它为“社牛”大模型&a…

chatgpt赋能python:Python如何保存为py文件

Python如何保存为py文件 如果你是一个Python初学者或者在使用Python进行编程&#xff0c;你可能会想知道如何将Python代码保存为.py文件。本文将向您介绍Python如何保存为py文件&#xff0c;这样你就可以像其他编程语言一样&#xff0c;通过编辑器来直接修改和运行代码了。 保…

spring实例化bean之实例化

1.关键方法createBean doGetBean中调用getSingleton方法中调用singletonFactory.getObject()触发lambda表达式中的createBean方法 AbstractAutowireCapableBeanFactory#createBean protected Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] …

安装和使用MySQL

文章目录 零、学习目标一、获取MySQL安装程序二、安装MySQL数据库管理系统三、启动并使用MySQL命令行&#xff08;一&#xff09;启动MySQL命令行&#xff08;二&#xff09;在MySQL命令行里操作数据库1、显示数据库2、使用数据库3、查看数据库里的表4、查看表的记录 零、学习目…

还在用InputStream的available()方法获取流的字节数吗?那你可要小心了!

问题说明 因为项目需求&#xff0c;需要从一个url获取文件流然后保存到minio文件服务器中。 先看看下面的代码片段 MinioClient minioClient MinioClient.builder().endpoint(new URL("http://ip:port")).credentials("username", "password"…

关于npm install md5报错the command again as root/Administrator的解决办法

nodejs安装依赖报错 (venv) PS D:\pythonProject> npm install md5 npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! requiredBy: . npm ERR! } npm ERR! npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was…

QQ群内增加ChatGPT机器人

0. 起因 最近弄了一个QQ群&#xff0c;人在逐渐增多&#xff0c;问问题的人也越来越多&#xff0c;有些问题是编程基础问题&#xff0c;2023年了&#xff0c;这些问题都不应该由人类来解决了&#xff0c;交给AI吧。所以&#xff0c;想在QQ群里加个ChatGPT机器人&#xff0c;应…