【JavaEE】HTTPS及其安全机制

news/2024/3/29 6:38:41/文章来源:https://blog.csdn.net/m0_73067372/article/details/131735172

目录

1、什么是HTTPS

 2、HTTPS的基本工作过程

2.1、使用对称密钥进行加密

2.2、使用非对称密钥进行加密

2.3、中间人攻击

2.4、证书


1、什么是HTTPS

HTTPS是在HTTP协议的基础上引入了一个加密层(SSL)。HTTP协议内容都是按照文本的方式传输的,这就导致在传输过程中会出现一些被篡改的情况。

黑客入侵运营商劫持问题,HTTP是以明文的方式将数据在网络上传输的,这就代表这不安全,就像上一个博客中写的,我们使用Fiddler抓包,可以看见我们写的请求信息,比如一个登录网站,在你输入账号和信息之后,浏览器给服务器发送请求,一旦有人截取了你的数据报,那么这些敏感信息,就会一览无余的展现在别人面前。当然还有运营商劫持问题,由于我们通过网络传输的任何数据报都会经过运营商的网络设备(路由器、交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。当你在网页上点击下载一个资料的时候,点击下载按钮之后,并不能下载对应的资料,而是下载了别的你用不上的资料,这就是运营商将返回给你的响应进行了篡改。

为了改善这个问题,就使用了在HTTP的基础上进行加密的方法,也就是使用HTTPS协议,进一步的来保证安全。也不能说使用了HTTPS协议,那么网络上的数据传输就一定安全了,我们常说一山更比一山高,安全永远实现对的,不管你如何增添安全措施,总会有大佬有针对的措施,只要我们黑客获取我们数据的成本比数据本身的价值更高,那么数据就是安全的。

这里需要了解一下,这些概念:

  • 明文:是指没有加密的文字,一般人都能看都懂。
  • 密钥:可以将明文转换密文的一种参数,也可以理解为"钥匙"。
  • 密文:密文就是使用密钥对明文加密之后的数据。

 2、HTTPS的基本工作过程

既然要保证数据安全,就需要进行"加密",所以HTTPS引入的加密层,称为SSL或TLS,加密的方式有很多种,但是整体可以分为两大类:对称加密非对称加密

  • 对称加密:需要一个密钥,加密和解密使用同一个密钥,对称加密的特点就是,计算起来比较快速
  • 非对称加密:需要两个密钥。一个叫做公钥,一个叫做私钥。使用公钥加密,使用私钥解密。计算的成本就更高一点。这里的公钥并没有什么特殊的界定,只要自己直到的叫做私钥,公开的大家都知道的叫做公钥。

我们这里加密针对的是HTTP的各种header和body进行加密


2.1、使用对称密钥进行加密

使用对称密钥对明文进行加密,就是客户端使用一个密钥key,对要传输的数据(明文)进行加密(针对HTTP的各种header和body进行加密)形成密文之后,通过网络传输到服务器,服务器通过密钥key,对密文进行解密,就得到了客户端传输的数据的明文。

  • 明文+key=密文
  • 密文+key=明文

 在数据的传输过程中黑客还是会在中间截获客户端和服务器中间传输的数据报,但是由于我们对这个数据报中的数据(header和body)进行了加密,黑客在没有密钥key的情况下,无法直接获取我们的数据,就需要破解,一旦破解的成本高于数据本身的价值,那么黑客也就不会进行破解了,那么我们传输的数据就是安全的。

虽然看起来使用对称密钥已经解决了问题。但是上述的说法是建立在服务器已经知道客户端使用的对称密钥是什么的情况下。一个服务器对应很多的客户端,服务器不可能将所有的客户端信息全部记录下来,也不可能所有的客户端使用密钥都是相同的,如果客户端的密钥是相同的,那么黑客作为一个客户端访问服务器,那么这个密钥黑客也就拿到了,这样加密也就形同虚设了。

所以说使用对称密钥加密,需要每个客户端在连接上浏览器之后,各自生成一个与其他客户端不同的密钥。对要传输的数据进行加密。这样黑客就无法简单的获取到传输的数据具体内容了。也就提高了数据的安全性。但是这里只是说明了每个客户端使用的密钥不同。每个客户端生成密钥之后,服务器是如何知道客户端的密钥的???

当然每个客户端在生成自己的密钥之后,需要通过网络传输让服务器知道自己的密钥,但是在这个过程中,黑客就会截获你传输的密钥,那么你家加密的数据,就会被解密了,要解决这个问题,就需要使用非对称加密对产生的对称密钥进行加密。 


2.2、使用非对称密钥进行加密

非对称密钥是对对称密钥进行加密让对称密钥能够安全的传输到服务器因为非对称密钥计算成本更高一点,对称密钥的计算成本更低,计算速度更快。所以我们使用对称密钥对传输的数据(明文)进行加密,使用非对称密钥给对称密钥加密,就可以将客户端或者服务器对明文使用的对称密钥,无法让黑客获取到。在一次连接中非对称密钥使用一次,让服务器得到客户端的对称密钥之后,就不使用了。

非对称密钥由服务器产生,有两个密钥,一个为私钥,自己保留一个为公钥,向外发送,人人都可以获取到。客户端通过公钥加密,服务器通过私钥解密。

  • 明文+公钥=密文
  • 密文+私钥=明文

这里的加并不是加密解密的时候,使用密钥表示的数字和明文相加,这里只是从宏观上来看加密和解密的过程。

 首先是客户端向服务器询问服务器产生的公钥,客户端得到公钥pub之后,就会生成一个对称密钥key,这个时候客户端就会将生成的对称密钥key通过非对称密钥的公钥进行加密,发送给服务器,在数据传输期间虽然黑客的设备可以截获到你的数据报,但是他没有私钥,所以无法获取到你传输的数据内容,服务器在拿到数据之后,使用私钥pri解密,服务器就知道了客户端生成对称密钥key,之后的数据传输,服务器和客户端的数据传输都可以使用对称密钥key对明文进行加密。期间黑客的设备虽然可以得到数据报,但是无法获取具体内容。

我们使用对称密钥和非对称密钥两者相结合使用,看起来好像是安全了,并不是。下面我们来看一下"中间人攻击"问题。


2.3、中间人攻击

上面说到,客户端和服务器之间传输的数据的时候,黑客拿不到私钥,无法得到传输的数据的明文,那么中间人攻击就是黑客伪造一个服务器,自己生成一对非对称密钥。将自己生成的公钥pub2给客户端。服务器给客户端的公钥pub会被黑客截取保留,客户端无法得到服务器的公钥pub,这个时候客户端拿到黑客的公钥pub2之后,以为是服务器的公钥pub,就会生成对称密钥key,并使用pub2进行加密后传输,传输的数据报被黑客截取之后,黑客通过私钥pri2进行解密,得到了客户端的key,然后使用截取的服务器的pub对key进行加密,发送给服务器。服务器使用私钥pri解密之后,得到客户端的key。之后客户端和服务器使用key对明文加密之后进行传输,但是他们传输的的数据内容,黑客全都知道。

 


2.4、证书

为了破解中间人攻击,只要让客户端能够识别接收到的公钥是不是对应服务器返回的就可以,所以这里就引入了证书。这个证书是由一个第三方工信机构颁布。

现在的服务器(网站)一般再设立之初,就需要去专门的认证机构,申请证书,服务器先提供资质证明个工信机构,工信机构通过审核之后,会给服务器发送一个证书,该证书并不是普通的纸质的证书,而是一串字符串。里面存在一些校验机制(校验的过程类似TCP/UDP的校验和),服务器会把自己生成的公钥放在证书中,客户但也不在询问公钥,而是询问服务器证书,得到证书之后,就可以使用证书的公钥进行解密了。网站在申请的证书中存在自己的公钥,那么客户端的证书的有效时间内只会生成一次非对称密钥。

 我们也可通过网页来查看证书中的一些属性。

❓❓❓客户端再拿到这个证书之后,对证书是如何进行验证的??


工信机构颁布的证书中存在很多的属性,例如颁发者、颁发给谁、证书的有效时间、服务器的公钥...,再颁布证书的时候工信机构会通过对证书中所有的属性进行计算来得到一个签名,也就是我门前面说的校验和。这个签名由颁布证书的机构使用自己的私钥进行加密。

✨客户端再拿到这个证书之后的校验过程

  1. 由于权威的证书机构本身就不多,所以操作系统中内置了一系列的证书机构的公钥。
  2. 得到初始的证书的签名,客户端使用系统中内置的权威机构的公钥pub2,正对证书中的加密签名进行解密,得到了初始签名(这个签名是由权威机构计算出来的,记为sum1)
  3. 客户端将得到的证书中的属性,使用同样的签名计算算法,重新计算,得到一个签名sum2
  4. 比较两个签名是否相同,如果相同,说明这个证书没有被篡改过;如果两个签名不同,说明这个证书中的属性被篡改过,客户端的浏览器就会弹框报错。

此时黑客即使,将证书中的服务器的公钥pub2篡改成自己的公钥,然后使用相同的签名计算算法将证书中所有属性进行计算,得到签名。但是黑客没有权威机构的私钥,无法对这个签名进行加密。那么篡改证书就会失败。证书的关键,不是让黑客"看不见",而是让黑客"改不了"。

所以,HTTPS再进行数据传输的时候,经过了5个密钥,客户端生成的对称密钥key,服务器生成的公钥pub2和私钥pri2,证书机构的公钥pub1和私钥pri1.

✨总结:整体的从对称密钥到证书,流程梳理

  1. 现实使用对称密钥,来保证业务数据的安全。
  2. 使用非对称密钥,来安全传输对称密钥
  3. 通过中间人攻击,黑客能够拿到对称密钥
  4. 引入证书,使客户端能够验证该服务器公钥是否合法。

上面我们说到的这些,对称加密+非对称加密+证书,这也是一个协议,我们给他起了一个名字叫做SSL,后来改名为TLS。换句话说,我们说到的HTTPS其实就是HTTP+SSL。

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

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

相关文章

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域&#x…

Spring Security 构建基于 JWT 的登录认证

一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全,使用它需要采用 …

利用集合框架实现-超市会员管理系统

借助集合框架来实现超市会员管理系统,实现以下功能: 1.开卡 2.积分累计 3.查询剩余积分 4.积分兑换 5.修改密码 6.退出 -------------------------------------------------------------------------------------------------- 展示&#x…

图像处理学习笔记(一)

目录 图像处理学习笔记(一)一、基础知识1、彩色图像(1)RGB(2)HSV(3)HSI(4)CMYK(5)YUV(6)YCbCr 2、灰度图像3、…

14款奔驰R400升级ACC自适应巡航系统,增加您的行车安全性

有的时候你是否厌倦了不停的刹车、加油?是不是讨厌急刹车,为掌握不好车距而烦恼?如果是这样,那么就升级奔驰原厂ACC自适应式巡航控制系统,带排队自动辅助和行车距离警报功能,感受现代科技带给你的舒适安全和…

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例)

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例) 1、前言1.1 成功拷贝但是比例错误1.2 直接报错 2、解决办法3、号外 1、前言 今天朋友给我一个需求,需要把xlsx文件中的图片拷贝到另一个xlsx中,但是试过网上比…

Apache(httpd) 搭建笔记

Apache 搭建笔记 安装Apache HTTP服务器:启动Apache服务并设置开机自启 配置SSL证书配置Apache的SSL虚拟主机:重启Apache服务以使更改生效: 多站点配置第一个虚拟主机配置第二个虚拟主机创建每个站点的根目录: 强制跳转http>&g…

Midjourney助力交互设计师设计网站主页

Midjourney的一大核心优势是提供创意设计,这个功能也可以用在网站主页设计上,使用Midjourney prompt 应尽量简单,只需要以"web design for..." or "modern web design for..."开头即可 比如设计一个通用SAAS服务的初创企…

阿里云AliYun物联网平台使用-客户端API获取设备传感数据

一、前言 上一篇文章中,已经实现了虚拟数据上云,本文我们将进行上位机客户端的开发,即通过调用阿里云IOT物联网云平台的SDK,开发能获取传感器的遥感数据。 二、云平台操作 调用API需要用户的AccessKey Secret,这意味着…

因创始人被捕,Multichain停运!华人加密项目信任何在?

Multichain作为第四大加密货币桥梁,允许用户在八个区块链之间转移加密货币,并持有近16亿美元的投资者存款。对于运行在Fantom区块链上的DeFi而言,多链极为重要。 然而,跨链协议MultiChain5月下旬爆出“出金延迟或暂停”的灾情&…

产业大模型刚开卷,京东跑进“最后半公里”

点击关注 文|姚 悦 编|王一粟 “京东一直在探索哪些产品、技术、场景可以真正把大模型用起来,在我们内部的场景中反复验证后,才决定在7月份对外发布,现在我们在零售、健康、物流、金融等业务场景里已经积累了一些经…

Java使用JNI实现C文件的调用

1.使用IDEA新建工程 构建最基本的maven类型就行,文件结构如下: 其中最主要的类如下: package org.linx;public class TestJNI {static {/*** 加载jni库,有一个重要的点就是生成的为libnative.so,下面加载代码需要消…

【Maven三】——maven生命周期和插件

系列文章目录 Maven之POM介绍 maven命令上传jar包到nexus 【Maven二】——maven仓库 maven生命周期和插件 系列文章目录前言一、什么是生命周期&why1.三套生命周期2.clean生命周期3.default生命周期4.site生命周期5.命令行与生命周期 二、插件目标三、插件绑定1.内置绑定2…

将媒体公司资产迁移到 Amazon S3 的技术方案

随着媒体公司的发展,他们在仓库中积累了大量的旧磁带和未数字化的视频。这些资产可能很有价值,但以目前的形式很难访问和货币化。此外,将这些资产存储在仓库中既有风险又昂贵。 媒体企业可以通过将其资产迁移到云存储来解决这些问题&#xf…

【C++】面试基础搬运

c/c c三大特性 封装 最开始接触代码是C语言,那么开始写一些逻辑代码的时候会很麻烦,因为你要在函数中定义变量,然后按顺序写对应的逻辑,接着可以将逻辑封装成函数。当时会感觉很麻烦,因为很散装,知道后面…

Nacos报错Could not resolve placeholder ‘order.name‘ in value “${order.name}“怎么解决?

出现这个原因有两个: 1.首先在Nacos配置中心,写入yml配置文件的数据和后端服务在取数据的时候名称不一致 如下图,现在我的配置中心为order-service 看看其中的文件内容信息: 再看看后端是怎么取的: 看出上面错误了吗…

C# IEnumerator 用法

一、概述 IEnumerator 是所有非泛型枚举器的基接口。 其泛型等效项是 System.Collections.Generic.IEnumerator<T> 接口。 C# 语言的 foreach 语句&#xff08;在 Visual Basic 中为 for each&#xff09;隐藏了枚举数的复杂性。 因此&#xff0c;建议使用 foreach 而不…

[每周一更]-(第54期):Go的多版本管理工具

参考 https://zhuanlan.zhihu.com/p/611253641https://learnku.com/articles/78326 前文概要 Go语言从开始使用从1.13起步&#xff0c;随着泛型的支持&#xff0c;带领团队在转型Go的时候&#xff0c;做基础组件架构选型使用1.18&#xff0c;但是Go版本不断迭代想使用最新版本…

3Ds max入门教程:创建尼亚加拉大瀑布模型

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 初学者在3ds Max中为尼亚加拉大瀑布建模 这次您将学习通过几个简单的步骤在3ds max中对尼亚加拉大瀑布&#xff08;从远处看起来很逼真&#xff09;进行建模。所以&#xff0c;让我们开始吧&#xff01; …