【Java EE】网络原理——HTTPS

目录

1.HTTPS是什么

2.“加密”是什么

3.HTTPS的工作过程

3.1引入对称加密

3.2 引入非对称加密

4.中间人攻击

5.引入证书

6. 理解数据签名

7.通过证书解决中间人攻击

7.1 查看浏览器的授信任证书发布机构

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

7.3 中间人整个掉包证书?

8. 常见问题

9. 总结


1.HTTPS是什么

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

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

例如:“运营商劫持”

未被劫持的效果,点击下载按钮,就会弹出天天动听的下载链接。

已被劫持的效果,点击下载按钮,就会弹出QQ浏览器的下载链接

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

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

2.“加密”是什么

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

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

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

加密解密到如今已经发展成一个独立的学科:密码学

3.HTTPS的工作过程

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

网络长春树中不再直接传输明文了,而是加密之后的“密文”

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

3.1引入对称加密

对称加密其实就是通过同一个“密钥”,把明文加密成密文,并且也能把密文解密成明文。

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

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

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是什么。

但是如果直接把密钥明文传输,那么黑客也就能获得密钥了。

此时需要引入非对称加密

3.2 引入非对称加密

非对称加密要用到两个密钥,一个叫做“公钥”,一个叫做“私钥”。

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

  • 通过公钥对明文加密,变成密文。
  • 通过私钥对密文解密,变成明文。

也可以反着用

  • 通过私钥对明文加密,变成密文。
  • 通过公钥对密文解密,变成明文。

  • 客户端在本地生成对称密钥,通过公钥加密,发送给服务器。
  • 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥。
  • 服务器通过私钥解密,还原出客户端发送的对称密钥,并且使用这个对称密钥加密给客户端返回的对应数据。
  • 后续客户端和服务器的通信都只能用对称加密即可,由于该密钥只有客户端和服务器两个主机知到,其他主机/设备不知道密钥即使截获数据也没有意义。

由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密。

那么问题:

  • 客户端如何获取到公钥?
  • 客户端如何确定这个公钥不是黑客伪造的?

4.中间人攻击

黑客可以使用中间人进行攻击,获取到对称密钥。

  1. 服务器具有非对称加密算法的公钥S,私钥S'
  2. 中间人具有非对称加密算法的公钥M,私钥M'
  3. 客户端向服务器发送请求,服务器明文传送公钥S给客户端。
  4. 中间人劫持数据报文,提取公钥S并保存好,然后将劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发送给客户端。
  5. 客户端收到报文,提取公钥M,自己形成对称密钥X,用公钥M加密X,形成报文发送给服务器。
  6. 中间人劫持后,直接用自己的私钥M'进行加密,得到通信密钥X,再用曾经保存的服务器公钥S加密后,将报文推送给服务器。
  7. 服务器拿到报文,用自己的私钥S'解密,得到通信秘钥X。
  8. 双方开始采用X进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的。

5.引入证书

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

这个证书可以理解成一个结构化的字符串,里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名
  • ……

 需要注意的是:申请证书的时候,需要在特定平台生成检查,会同时生成一对密钥对,即公钥和私钥。这对密钥对就是用来在网络通信中进行明文加密以及数字签名的。

6. 理解数据签名

签名的形成是基于非对称加密算法的,注意,目前暂时和https没有关系。

当服务端申请CA证书的时候,CA机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:

  1. CA机构拥有非对称加密的私钥A和公钥A'
  2. CA机构对服务端申请的证书明文数据进行hash,形成数据摘要。
  3. 然后对数据摘要用CA私钥A'加密,得到数字签名S。

服务端申请的证书明文好数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端

7.通过证书解决中间人攻击

在客户端和服务器刚建立连接的时候,服务器给客户端一个证书。

这个证书包含了刚才的公钥,也包含了网站的身份信息。

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

  • 判定证书的有效期是否过期。
  • 判定证书的发布机构是否受信任(操作系统之中已内置的受信任的证书发布机构)。
  • 验证书是否被篡改:从系统重拿到该证书发布机构的公钥,对签名进行解密1,得到一个hash值(称为数据摘要),设为hash1,然后计算整个证书的hash值,设为hash2,对比hash1和hash2是否相等,如果相等,则说明证书是没有被篡改过的。
7.1 查看浏览器的授信任证书发布机构

Chrome浏览器,点击右上角的

选择“设置”,搜素“证书管理”,即可看到以下界面

7.2 中间人有没有可能篡改证书?
  • 中间人篡改了证书的明文
  • 由于他没有CA机构的私钥,所以hash之后用私钥加密形成签名,那么也就没办法对篡改后的证书形成匹配的签名。
  • 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一样,则说明证书已经被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
7.3 中间人整个掉包证书?
  • 因为中间人没有CA密钥,所以无法制作假的证书(为什么?)。
  • 所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包。
  • 这个确实能够做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
  • 永远记住:中间人没有CA密钥,所以对任何证书都无法进行合法修改,包括自己的。

8. 常见问题

为什么摘要内容再网络传输的时候一定要加密形成签名?

常见的摘要算法由:MD5和SHA系列

以MD5为例,我们不需要研究具体的计算签名的过程,只需要了解MD5的特点:

  • 定长:无论多长的字符串,计算出来的MD5值都是固定长度。
  • 分散:源字符串只要改变一点点,最终得到的MD5差别都会很大。
  • 不可逆:通过原字符串生成MD5很容易,但是通过MD5还原成原创理论上是不可能的。

正因为MD5有这样的特性,我们可以认为两个字符串的MD5值相同,则认为这两个字符串相同。

9. 总结

HTTPS工作过程中涉及到的密钥有三组。

第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使⽤这个私钥对证书的签名进⾏加密. 客⼾端通过这个公钥解密获取到证书的签名, 从⽽校验证书内容是否是篡改过.
第⼆组(⾮对称加密): ⽤于协商⽣成对称加密的密钥. 服务器⽣成这组 私钥-公钥 对, 然后通过证书把公钥传递给客⼾端. 然后客⼾端⽤这个公钥给⽣成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥.
第三组(对称加密): 客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.
其实⼀切的关键都是围绕这个对称加密的密钥. 其他的机制都是辅助这个密钥⼯作的.
第⼆组⾮对称加密的密钥是为了让客⼾端把这个对称密钥传给服务器.
第⼀组⾮对称加密的密钥是为了让客⼾端拿到第⼆组⾮对称加密的公钥.

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

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

相关文章

latex公式输入练习

给大家提供几个公式供大家练习latex输入数学公式,同时也是对自己新学latex语言的一种复习吧。(如果大家对latex输入公式感兴趣,推荐一下哔站视频:LaTeX公式保姆级教程 (以及其中的各种细节)_哔哩哔哩_bilibili) 公式一…

基于.NetCore和ABP.VNext的项目实战七:全局异常处理并日志记录

ABP框架已经默认为我们实现了全局的异常模块,这里我们自定义全局异常模块,先在HelloWorldController中写一个异常接口,测试下ABP的默认全局异常: [HttpGet][Route("Exception")]public string Exception(){throw new NotImplementedException("这是一个未实…

Vue——监听器简单使用与注意事项

文章目录 前言编写简单demo注意事项 前言 监听器,在官网中称为侦听器,个人还是喜欢称之为监听器。官方文档如下: vue 官网 侦听器 编写简单demo 侦听器在项目中通常用于监听某个属性变量值的变化,并根据该变化做出一些处理操作。…

leetcode第263题:丑数

丑数的因子只能是2,3,5。但是可能有多个2&#xff0c;多个3&#xff0c;多个5.因此需要循环地除以2、3、5. public class Solution {public bool IsUgly(int n) {if (n < 0) {return false;}int[] factors {2, 3, 5};for ( int i0;i<3;i) {int factorfactors[i];while …

Visual C++2010学习版详细安装教程(超详细图文)

Visual C 介绍 Visual C&#xff08;简称VC&#xff09;是微软公司推出的一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于开发C和C语言的应用程序。它提供了强大的编辑器、编译器、调试器、库和框架支持&#xff0c;以及丰富的工具和选项&#xff0c;使得开…

【计算机-ARM】

计算机-ARM ■ 指令集■ 1. RISC■ 2. CISC ■ ARM简介■ 1.■ 2. ■ ARM-CPU体系架构■ 1. M0■ 2. M3■ 3. M4■ 4. M7■ 5. M7■ 6. M7 ■ ARM-寄存器■ 1. 通用寄存器■ 2.■ 3.■ 4. ■ ARM-工作模式■ ARM-寄存器组■ ARM-异常向量表■ 由于soc0x00000000 是存放IROM芯片…

HDL-A/1-110VAC-2电流继电器 JOSEF约瑟 导轨安装

一. 应用 HDL系列电流继电器是静态型&#xff0c;不带方向性的、瞬动、交流电流继电器。可用于电力系统输电线,电机过负荷和短路保护中&#xff0c;作为启动元件。 继电器对短路电流中的直流分量不敏感&#xff0c;因此可用于要求哲态超小的线路中&#xff0c;改继电器由集成…

基于单片机的八路抢答器设计论文

绪 论1.1 课题研究的相关背景 抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。现在大多数抢答器均使用单片机(如MCS-5…

python基础-数据结构——hash表、线性探测、二重探测、双重哈希、闭散列(分离链接)(拉链法)Python代码实现

文章目录 哈希表及其碰撞解决策略1. 引言2. 哈希表简介3. 哈希函数4. 碰撞解决策略4.1 分离链接法&#xff08;拉链法&#xff09;4.2 开放寻址法4.2.1 线性探测4.2.2 二次探测4.2.3 双重哈希 5. 总结 哈希表及其碰撞解决策略 1. 引言 哈希表是一种高效的数据结构&#xff0c…

BugKu 哎,就是玩

说明&#xff1a;通过图片隐写找到迷宫压缩包解码密码&#xff0c;然后通过MG游戏得到井字棋游戏解压密码&#xff0c;最后通过完成井字棋得到flag. 打开实验包&#xff0c;解压后可以看到两个文件。 首先要通过TKR.png找到迷宫.zip的解压密码。 打开图片&#xff0c;发现图片…

【grafana】创建多变量table

这个普罗米修斯的指标啊&#xff0c;大多数都是键值对&#xff0c;而且笔者如果没记错&#xff0c;他这个值还必须是浮点。少数可以设成离散值&#xff08;Enum&#xff09;&#xff0c;但本质还是一个带翻译功能的键值对 这样的好处是&#xff0c;做起来非常简单&#xff0c;…

Websocket服务端结合内网穿透发布公网实现远程访问发送信息

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

计算机毕业设计hadoop+spark+hive物流快递大数据分析平台 物流预测系统 物流信息爬虫 物流大数据 机器学习 深度学习 知识图谱 大数据

1.Python爬虫采集物流数据等存入mysql和.csv文件&#xff1b; 2.使用pandasnumpy或者MapReduce对上面的数据集进行数据清洗生成最终上传到hdfs&#xff1b; 3.使用hive数据仓库完成建库建表导入.csv数据集&#xff1b; 4.使用hive之hive_sql进行离线计算&#xff0c;使用spark之…

乡村振兴的乡村环境综合整治:加强农村环境综合整治,改善农村人居环境,打造干净整洁的美丽乡村

目录 一、引言 二、农村环境问题的现状与挑战 &#xff08;一&#xff09;农村环境问题的现状 &#xff08;二&#xff09;农村环境问题的挑战 三、加强农村环境综合整治的必要性 &#xff08;一&#xff09;提升农民生活质量 &#xff08;二&#xff09;促进农村经济发…

ClickHouse 实现用户画像(标签)系统实践

文章目录 前言用户画像概述用户画像系统介绍用户画像系统的需求描述用户画像系统的需求分析用户画像系统的架构 关键技术实现&#xff08;Clickhouse SQL&#xff09;分析阶段运营阶段 基于ClickHouse的用户画像系统的优点 前言 本文介绍一个ClickHouse应用案例—用户画像系统…

成功案例(IF=12.2)| 肠道代谢组、微生物组和脑功能的综合分析揭示了肠-脑轴在长寿中的作用

研究背景 人类长寿是一种受遗传、环境等多种因素影响的复杂表型。近年来&#xff0c;肠道微生物群被认为是长寿的一个重要因素&#xff0c;如Akkermansia、Alisipes和Parabacteroides已被报道与长寿有关。此外&#xff0c;最近的一项研究表明&#xff0c;百岁老人的肠道微生物群…

学习笔记——IP地址网络协议——网络掩码(Netmask)

三、网络掩码(Netmask) 1、网络掩码概述 网络掩码(Netmask)又称子网掩码(Subnet Mask)网络掩码为32 bit&#xff0c;与IP地址的位数一样&#xff0c;通常也以点分十进制数来表示。 子网掩码不能单独存在&#xff0c;它必须结合IP地址一起使用。子网掩码只有一个作用&#xf…

AI图片光影重塑 - IC Light独立安装

两个前提&#xff1a; 1.安装GIT &#xff08;https://blog.csdn.net/qq_42372031/article/details/130676236&#xff09; 2.安装ANACONDA&#xff08;https://blog.csdn.net/ViatorSun/article/details/118578818&#xff09; 来到IC-Light主页&#xff08;https://github.…

品牌控价的同时也要做好数据分析

品牌在进行电商价格监测时&#xff0c;确实不应仅停留在收集低价数据的层面。在数据量巨大的今天&#xff0c;如何深度分析和挖掘这些数据的价值&#xff0c;为品牌的决策和战略提供有力支持&#xff0c;显得尤为重要。 首先&#xff0c;电商数据的监测和分析有助于品牌更全面…

函数高级:函数的默认参数|函数的占位参数|函数重载

函数的默认参数 函数占位参数 函数重载 总结&#xff1a; 函数的形参&#xff0c;有自己的参数值就用参数值&#xff0c;没有就用形参列表的默认值。 参数列表中&#xff0c;某位置有自己的默认值&#xff0c;从该位置起&#xff0c;往后就都必须设有默认值。 函数声明和函数…