【Java网络编程06】HTTPS原理

news2024/12/22 9:06:04

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.coloradmin.cn/o/1466163.html

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

相关文章

高级语言期末2012级A卷

1.编写函数&#xff0c;输出任意正整数n的位数&#xff08;n默认为存储十进制的整形变量&#xff09; 例如&#xff1a;正整数13&#xff0c;则输出2,&#xff1b;正整数3088&#xff0c;则输出4 #include <stdio.h>int func(int n) {int count0;while(n>0) {n/10;co…

自学Python第十八天-自动化测试框架(二):DrissionPage、appium

自学Python第十八天-自动化测试框架&#xff08;二&#xff09;&#xff1a;DrissionPage、appium DrissionPage环境和安装配置准备工作简单的使用示例控制浏览器收发数据包模式切换 浏览器模式创建浏览器对象访问页面加载模式none 模式技巧 获取页面信息页面交互查找元素ele()…

【学网攻】 第(30)节 -- 综合实验三

系列文章目录 目录 系列文章目录 文章目录 前言 一、综合实验 二、实验 1.引入 实验目标 实验设备 实验拓扑图 实验配置 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节…

个人博客系列-环境配置-gitee(2)

注册gitee账户 地址&#xff1a;https://gitee.com/ 此步骤省略 新建仓库 执行以下命令 即可 拉取代码 创建目录 mkdir myCode && cd myCode 登录gitee找到项目&#xff0c;点击克隆&#xff0c;拉取代码 连接远程仓库命令 git remote add origin 仓库地址http…

负载均衡.

简介: 将请求/数据【均匀】分摊到多个操作单元上执行&#xff0c;负载均衡的关键在于【均匀】。 负载均衡的分类: 网络通信分类 四层负载均衡:基于 IP 地址和端口进行请求的转发。七层负载均衡:根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。 载体维度分类 硬…

证件照(兼容H5,APP,小程序)

证件照由uniappuyui开发完成&#xff0c;并同时兼容H5、App、微信小程序、支付宝小程序&#xff0c;其他端暂未测试。 先看部分效果图吧具体可以下方复制链接体验demo 首页代码 <template><view class""><view class"uy-m-x-30 uy-m-b-20"…

2024移动应用的发展趋势,开发者如何抢占变现先机?

2024年对移动应用市场将是变革之年&#xff0c;社交媒体变现方式的瞬息万变&#xff0c;到人工智能的快速崛起&#xff0c;移动应用市场的换代速度逐渐加快&#xff0c;一些新的机遇也在出现。 data.ai推出的2024全球移动市场预测&#xff1a; •TikTok将打破应用商店支出的所…

Linux中的各类时间 与 find命令的常用参数

之前研究wal日志清理的副产物&#xff0c;wal日志名被修改后文件的哪个时间会变&#xff1f;应该如何删除&#xff1f;由此整理一下Linux中atime、mtime、ctime的区别&#xff0c;以及find的常见用法。 一、 Linux中的各类时间 1. 各类时间的定义 Linux中有三种用于文件时间戳…

基于springboot+vue的桂林旅游景点导游平台(前后端分离)

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

3个精美的wordpress企业网站模板

WordPress企业网站模板 https://www.zhanyes.com/qiye/6305.html WordPress企业官网模板 https://www.zhanyes.com/qiye/6309.html WordPress律师模板 https://www.zhanyes.com/qiye/23.html

新代码质量评审标准与评分表格

前面发了一个《代码质量评审标准与评分表格》&#xff0c;是比较宽泛的&#xff0c;下面发一个更贴近具体场景的《新代码质量评审标准与评分表格》。 一、引言 本文档旨在为代码质量评审提供一个统一的标准和评分机制&#xff0c;以确保代码质量、可读性和可维护性。通过遵循这…

JAVA代码审计之XSS漏洞

Part1 漏洞案例demo&#xff1a; 没有java代码审计XSS漏洞拿赏金的案例。 所以将就看看demo吧 漏洞原理&#xff1a;关于XSS漏洞的漏洞原理核心其实没啥好说的&#xff0c;网上一查一大堆 反射性XSS漏洞 <% page language"java" contentType"text/html; c…

微服务远程调用Feign

目录 RPC概述 什么是Feign&#xff1f; Ribbon&Feign对比 Feign的设计架构 Spring Cloud Alibaba快速整合Feign Spring Cloud Feign扩展 日志配置 契约配置 通过拦截器实现参数传递 自定义拦截器实现认证逻辑 超时时间配置 RPC概述 微服务之间如何方便优雅的实…

【Linux进阶之路】Socket —— “UDP“ “TCP“

文章目录 一、再识网络1. 端口号2. 网络字节序列3.TCP 与 UDP 二、套接字1.sockaddr结构2.UDP1.server端1.1 构造函数1.2 Init1.3 Run 2.客户端1.Linux2.Windows 3.TCP1. 基本接口2. 客户端3. 服务端1.版本12.版本23.版本34.版本4 三、守护进程尾序 一、再识网络 1. 端口号 在…

给windows server安装nginx服务

一、先安装chocolatey https://chocolatey.org/install 二、查询nginx包 https://community.chocolatey.org/packages 三、安装nginx choco install nginx 四、通过命令行启动/关闭nginx net stop nginx net start nginx 我开发的chatgpt网站&#xff1a; https://chat.xut…

Unity中URP实现水效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片&#xff0c;使其倾斜一个角度&#xff0c;来模拟水底和岸边的效果2、随便创建几个物体&#xff0c;作为与水面接触的物体3、再新建一个面片&#xff0c;作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

【Java】类与对象(实验二)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 掌握类的定义与对象的创建。理解构造方法和this关键字的用法。掌握对象对于属性及方法的引用。 二、实验内容 1、编写一个Java程序&#xff0c;定义一个表示学生的类Student&#xff0c;该类包括: (1)这个类的…

C++力扣题目300--最长递增子序列 674--最长连续递增序列 718--最长重复子数组

300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2…

深入理解flinksql执行流程,calcite与catalog相关概念,扩展解析器实现语法的扩展

深入理解Flink Sql执行流程 1 Flink SQL 解析引擎1.1SQL解析器1.2Calcite处理流程1.2.1 SQL 解析阶段&#xff08;SQL–>SqlNode&#xff09;1.2.2 SqlNode 验证&#xff08;SqlNode–>SqlNode&#xff09;1.2.3 语义分析&#xff08;SqlNode–>RelNode/RexNode&#…

R的seurat和python的scanpy对比学习

现在的单细胞分析&#xff0c;往往避免不了scanpy的使用&#xff0c;我们可以通过对比seurat来学习scanpy 今天的格式怎么都改不了。。。手机阅读有点费劲&#xff0c;&#xff0c;推荐电脑阅读。 单细胞数据分析概览 单细胞分析&#xff0c;总流程 python教程 seurat教程 se…