【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的工作流程大致如上所示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c# 类的介绍及延伸

类介绍 类的定义是以关键字 class 开始&#xff0c;后跟类的名称。 类属于引用类型&#xff0c;只能通过new方式创建。 如果类定义中没有指定基类&#xff0c;那其基类为system.object // <访问修饰符> class class类名 <access specifier> class class_name { //…

华为配置WDS手拉手业务示例

配置WDS手拉手业务示例 组网图形 图1 配置WDS手拉手业务示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。但企业考虑到AP通过有线部署的成本较高&#xff0c;所以通过建立…

golang 监听ip数据包(golang纯享版)

golang 监听ip数据包(golang纯享版) 【注】本机编译运行平台为linux&#xff0c;如需测试代码请移至linux平台进行代码测试 本文以ip4 作为案例进行包抓取示范&#xff0c;ip6抓取与ip4方式异曲同工&#xff0c;可自行举一反三得出 第一步&#xff0c;通过wireshark抓包拿到…

第四十二回 假李逵翦径劫单身 黑旋风沂岭杀四虎-python读写csv和json数据

李逵答应了宋江三件事&#xff1a;不可吃酒&#xff0c;独自前行&#xff0c;不带板斧。李逵痛快答应了&#xff0c;挎一口腰刀&#xff0c;提着朴刀&#xff0c;带了一锭大银子&#xff0c;三五个小银子就下山去了。 宋江放心不下&#xff0c;于是请同乡朱贵也回家一趟&#…

spring boot3登录开发-3(账密登录逻辑实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 内容简介 用户登录逻辑实现 创建交互对象 1.创建用户登录DTO 2.创建用户登录VO 创建自定义登录业务异…

Vue模板引用之ref特殊属性

1. 使用实例 <template><input ref"input" name"我是input的name" /><br /><ul><li v-for"arr in array" :key"arr" id"111" ref"itemRefs">{{arr}}</li></ul> </…

windows11本地深度学习环境搭建Anacond,keras,tensorflow,pytorch, jupyter notebook

前言 工欲善其事&#xff0c;必先利其器。 第一步 安装Anaconda 下载地址&#xff1a; https://www.anaconda.com/download 路径默认 这里都勾选上 然后会卡在这里&#xff0c;卡很久&#xff0c;不用管&#xff0c;等着就行 第二步 配置环境 conda env list 列出所有…

css复习

盒模型相关&#xff1a; border&#xff1a;1px solid red (没有顺序) 单元格的border会发生重叠&#xff0c;如果不想要重叠设置 border-collapse:collapse (表示相邻边框合并在一起) padding padding影响盒子大小的好处使用 margin应用&#xff1a; 行内或行内块元素水…

XFF伪造 [MRCTF2020]PYWebsite1

打开题目 直接查看源码 看到一个./flag.php 访问一下 购买者的ip已经被记录&#xff0c;本地可以看到flag&#xff0c;那么使用xff或者client-ip伪造一下ip试试 bp抓包 加一个X-Forwarded-For头 得到flag

GPT-SoVITS 快速声音克隆使用案例:webui、api接口

参考: https://github.com/RVC-Boss/GPT-SoVITS 环境: Python 3.10 PyTorch 2.1.2, CUDA 12.0 安装包: 1、使用: 1)下载项目 git clone https://github.com/RVC-Boss/GPT-SoVITS.git2)下载预训练模型 https://huggingface.co/lj1995/GPT-SoVITS 下载模型文件放到GPT…

高刷电竞显示器 - HKC VG253KM

今天给大家分享一款高刷电竞显示器 - HKC VG253KM。 高刷电竞显示器 - HKC VG253KM源于雄鹰展翅翱翔的设计灵感&#xff0c;严格遵循黄金分割比例的蓝色点晴线条&#xff0c;加上雾面工艺及高低起伏错落有致的线条处理&#xff0c;在VG253KM的背部勾勒出宛若大鹏展翅的鹰翼图腾…

关于Kinect 互动沙盘 深度图 Shader Graph 分层

把Kinect的深度图穿给Shader Graph using com.rfilkov.kinect; using UnityEngine; using UnityEngine.UI; public class GetDepthTex : MonoBehaviour { public Material Mat_SandTable; void Update() { Mat_SandTable.SetTexture("_MainTex"…

网络安全笔记总结

IAE引擎 1.深度检测技术--DFI和DPI技术 DFI和DPI都是流量解析技术&#xff0c;对业务的应用、行为及具体信息进行识别&#xff0c;主要应用于流量分析及流量检测。 DPI&#xff1a;深度包检测技术 DPI是一种基于应用层的流量检测和控制技术&#xff0c;对流量进行拆包&#x…

关于git子模块实践(一)

背景 在日常项目开发中&#xff0c;随着项目的迭代&#xff0c;不可避免的是主项目会引入到很多三方库&#xff0c;或者自研的一些模块。有一种场景&#xff0c;就是这些模块&#xff0c;是随着开发而进行迭代&#xff0c;且多个项目公用的&#xff0c;这种情况&#xff0c;在…

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

袁庭新ES系列09节 | 使⽤kibana对类型及映射操作

前言 类型及映射是Elasticsearch中重要的两个概念。本章节袁老师将带领同学们来学习Elasticsearch中的类型和映射部分的内容。先透露一下&#xff0c;在Elasticsearch中&#xff0c;类型&#xff08;type&#xff09;相当于关系数据库中的table概念&#xff1b;映射&#xff0…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

解决ubuntu系统cannot find -lc++abi: No such file or directory

随着CentOS的没落&#xff0c;使用ubuntu的越来越多&#xff0c;而且国外貌似也比较流行使用ubuntu&#xff0c;像LLVM/Clang就有专门针对ubuntu编译二进制发布文件&#xff1a; ubuntu本身也可以直接通过apt install命令来安装编译好的clang编译器。不过目前22.04版本下最高…

高通 Android 12 Settings不显示版本号问题

1、最近项目遇到一个奇葩问题&#xff0c;编译系统版本号不见了&#xff1f; 2、一开始我想着可能是自己代码没有make clean结果编译几个小时&#xff0c;然后烧录固件发现还是未生效。 3、然后这时候我又去看git log review最近修改也没有太大发现&#xff08;待定&#xff…

第10章 高级缓存一致性设计

缓存一致性协议如何适应更大规模的系统。广播和侦听协议更早地涉及了可扩展性问题&#xff0c;因为流量和侦听频率时随着处理器个数的增加至少呈线性增加趋势&#xff0c;可用的互连网络带宽会很快被广播流量占满。本章讨论的基于目录式缓存一致性协议来实现可扩展性。主要问题…