Java EE 网络原理之HTTPS

文章目录

  • 1. HTTPS 是什么?
  • 2. "加密" 是什么?
  • 3. HTTPS 的工作过程
    • 3.1 引入对称加密
    • 3.2 引入非对称加密
    • 3.3 中间人攻击
    • 3.4 引入证书
  • 4. Tomecat
    • 4.1 tomcat 的作用

1. HTTPS 是什么?

HTTPS也是⼀个应用层协议,是在 HTTP 协议的基础上引⼊了⼀个加密层
HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现⼀些被篡改的情况
比如,臭名昭著的 “运营商劫持”
不止运营商可以劫持,其他的 黑客 也可以用类似的手段进行劫持,来窃取用户隐私信息,或者篡改内容

在互联网上,明文传输是比较危险的事情
HTTPS 就是在 HTTP 的基础上进行了加密,进⼀步的来保证用户的信息安全

2. “加密” 是什么?

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

加密解密 到如今已经发展成⼀个独力的学科: 密码学
而密码学的奠基⼈,也正是计算机科学的祖师爷之⼀,艾伦·⻨席森·图灵


明文 + 密钥 => 密文
密文 + 密钥 => 密文

在密码学中,使用密钥加密,有两种主要的方式

  1. 对称加密(加密和解密,使用的密钥 是用一个密钥)
    设 密钥为 key
    明文 + key => 密文
    密文 + key => 明文
  2. 非对称加密(有两个密钥)
    这两个密钥,一个称为“公钥”,一个称为“私钥”
    (公钥就是可以公开的,私钥相反)
    明文 + 公钥 => 密文
    密文 + 私钥 => 明文 或者
    明文 + 私钥 => 密文
    密文 + 公钥 => 明文
    (用一个要是加密,就用另一个钥匙解密)

3. HTTPS 的工作过程

既然要保证数据安全,就需要进行 “加密”
网络传输中不再直接传输明文了,而是加密之后的 “密文”
加密的方式有很多,但是整体可以分成两⼤类:对称加密 和 非对称加密

3.1 引入对称加密

在这里插入图片描述
客户端使用密钥进行对称加密
服务器拿着同一个密钥进行解密
由于黑客手里没有密钥,就无法获取到加密之前的内容

这里只是“比较安全”,网络中不存在“绝对安全”


但是服务器不只是和一个客户端通信,而是和很多客户端通信

这些客户端使用的 对称密钥 是相同的吗?

很明显,必须要求每个客户端的密钥都不相同,彼此之间才不知道对方的密钥是什么
在这里插入图片描述
此时要求每个客户端对于的密钥都不同
现在就需要每个客户端,载荷服务器建立连接的时候,就把密钥给生成出来
(涉及到一些随机数机制在里面,保证给个客户端生成的密钥都不同)
客户端再把自己的密钥通过网络传输给服务器


但是万一密钥被黑客截获了呢?
在这里插入图片描述
此时,黑客就知道了通信的密钥
后续传输的加缪数据,黑客就可以很轻松的进行解密

如何让密钥更安全的到达服务器呢?
这个时候就需要针对密钥进行加密

这里我们就引入非对称加密

3.2 引入非对称加密

为了解决上述安全传输密钥的问题,引入了“非对称加密”

非对称加密中,有一对密钥,公钥、私钥
可以使用公钥加密,私钥解密
或者使用私钥加密,公钥解密


在这里插入图片描述
服务器生成一对公钥和私钥
服务器把公钥返回给客户端
服务器自身把私钥藏好

但是这个时候黑客也能公钥

客户端仍然生成对称密钥
使用服务器的公钥,对对称密钥进行加密
得到了密钥的密文

如果黑客拿到加密后的 对称密钥
是无能为了的,公钥加密需要私钥解密
私钥只有 服务器 采用,黑客手里没有

服务器手里持有着私钥,服务器就很容易的能解密出对称密钥是什么
于是服务器就得到了原始的对称密钥
接下来客户端和服务器就使用这个对称密钥加密传输即可


既然已经引入了非对称加密,为什么还需要引入对称加密呢?
直接使用非对称加密,来完成所有业务数据的加密传输即可

进行非对称加密/解密,运算成本是比较高的,运算速度也是比较低的
对称加密,运算成本低,速度快

使用非对称加密,只是用来进行这种关键环节(传输密)(一次性的工作,体积也不大),成本就比较可控
后续要传输大量的业务数据,都使用效率更高的对称加密,比较友好的做法

如果业务数据都使用非对称加密,整体的传输效率就会大打折扣了

引入安全性,引入加密,也势必会影响到传输效率,我们也是希望让这样的影响能尽可能降到最低

3.3 中间人攻击

上述 对称加密 + 非对称加密,这样的过程中还存在一个严重的漏洞,黑客如果利用好这个漏洞,仍然可以获取到原始的明文数据
这个漏洞就是“中间人攻击”


在这里插入图片描述

客户端 经过 入侵的设备向服务器询问密钥
然后服务区就提前生成好了一对 公钥(pub1)和 私钥(pri1)

服务器就返回 pub1
但是黑客自己生产了一对非对称密钥,其中公钥(pub1),私钥(pub2)

这个时候黑客入侵的设备就返回了 pub2(黑客替换了响应的公钥)

客户端不知道 pub2 是黑客的,一位就是服务器的,于是就使用 pub2 针对堆成密钥进行加密了

黑客收到加密的对称密钥之后
因为这个密钥是使用 pub2 加密的,黑客就可以使用 pri2 进行解密
黑客解密之后,拿到对称密钥
并且使用服务器刚才的 pub2 重新对 对称密钥进行加密,进一步的发送给服务器
重新使用 pub1 加密,就是为了不让服务器发现其中的端倪

服务器收到数据之后,使用 pri1 解密,这个解密是完全能够成功的,服务器也收到了对称密钥

这个时候服务器就返回

3.4 引入证书

那么如何解决上述的“中间人攻击呢”?

之所以能进行中间人攻击,关键点在于客户端没有“分辨能力”
客户端不知道当前这个密钥是不是黑客伪造的

这里的“分辨”不能靠“自证”
引入第三方的可以被大家都信任的“公证机构”
公证机构说这个歌密钥是正确的,不是被伪造的,我们就是可以信任的

在这里插入图片描述

网站的开发人员搭建这个服务器的时候,就会生成好 公钥私钥(每个客户端都不一样)

服务器就会向公正机构提出申请(提交一些材料,域名、公钥、厂商…)

公正机构就会对这些材料进行审核,审核通过就会给服务器颁发一个 “证书”
(这是计算机 的证书,也就是一段结构化的数据,这段数据就会包含一些重要的信息,比如数字签名)

这个时候,就会把证书返回给服务器,服务器也会保存好证书

客户端访问服务器就会直接询问证书

服务器就会向客户端返回证书

客户端拿到证书,也就拿到了证书的公钥
客户端就需要验证这个公钥是否是服务器崔楚的公钥
这个过程,就称为“证书的校验”
校验的核心机制,就是“数字签名”,数组全面就是被加密后的校验和
拿着你数据的每个字节,带入公式,就能算出一个结果数字,称为校验和
把这个数据和校验和一起发送给对方
对方再按照同样的方式再算一遍校验和
如果对方自己算的校验和 和 收到的校验和一致,就认为数据在传输过程中,没有改变过

颁发证书的时候,公证机构,就会针对整数值的各个属性,计算出一个校验和
并且针对这个校验和进行加密,就得到了数字签名
这个加密也是非对称加密
公正机构,自己生成一对公钥和私钥
公正机构就会自己持有私钥
公钥就会发布给各个客户端设备
(往往公钥都还是内置到系统中的,安装了操作系统,就会自带公证机构的公钥)

公正机构,就会使用自己的私钥,对校验和进行加密,得到数字签名

此时,客户端拿到了数字签名,就可以通过系统内置的公正机构的公钥,进行解密了,就得到了最初的校验和

客户端再 重新 计算一遍 这里的校验和,和解密出来的校验和进行对比
如果校验和一直,就可以认为证书没有得篡改过
公钥就是可信的(服务器原始的公钥)


上述情况之下,黑客就无法对证书内容进行篡改,即使篡改了,也很容易被发现

当黑客收到证书之后,如果直接修改里面的公钥,替换成自己的,客户端在进行证书校验的时候,就会发现校验和不一致了
客户端就可以认为是篡改过了(客户端这边往往会弹出一些对话框来警告用户,粗拿在安全风险)

那么黑客替换公钥只是,能否自己替换到数字签名,自己算一个呢?
这个是不能的,校验和好算,针对校验和加密,需要使用 公证机构 的私钥,才能进行的
黑客没有这个私钥,如果黑客拿自己的私钥加密,客户端也就无法使用公证机构的公钥解密了
公证机构的公钥是客户端系统自带的,黑客也无法替换

结合上述过程,证书就是可信的,通过了校验,就说明公钥就是服务器原始的公钥了

黑客是否能自己也申请一个证书,完全替换掉,服务器的证书呢?
行不通的,申请证书,需要提交资料
其中就有网站的主域名,认证机构自然就会认证这个域名是否是你所有的

4. Tomecat

Tomecat 是 HTTP 服务器

使用 HTTP 进行通信,就需要涉及到 HTTP 客户端 和 HTTP 服务器

HTTP 客户端:浏览器、Postman、爬虫程序

HTTP 服务器:可以自己写代码实现(基于 TCP socket)
但是实际上可以直接使用别人写好的 HTTP 服务器,或者基于这些服务器进行 二次 开发

Tomecat 就是 java 中最流行的 HTTP 服务器

Tomecat 是一个绿色的软件,只要解压岁,就可以使用
在这里插入图片描述

  • bin 目录下放的是 tomcat 的一些相关可执行脚本
    在这里插入图片描述
    .bat 就是 Windows 上的 批处理程序
    .sh 就是 Linex 上的 shell 脚本

双击点开 startup.bat,就可以启动 Tomcat
在这里插入图片描述
最终的 Tomcat 就是一个控制台程序


tomcat 闪退了怎么办?

如果闪退了,最关键的是要能看到 “报错信息”

把 startup.bat 拖到 cmd 中运行,如果闪退,大概率 cmd 中能显示出出错信息

  1. 端口被占用了 (已经启动 tomcat, 再启动第二个)
    有的人电脑上可能装了其他的程序也占用了 8080 (windows自带的 HTTP 服务器,IIS)

  2. 环境变量问题 (可能是 tomcat 找不到 jdk,也可能是 tomcat 找不到自己所在的目录) 提示是缺哪个环境变量,就配置上即可


Tomcat 启动之后,就可以通过浏览器来访问 Tomcat 的欢迎界面

在这里插入图片描述
在这里插入图片描述
Tomcat 的日志,在控制台中,可能是乱码
原因:
Tomcat 默认使用的字符集,是 utf8
而 Windows cmd 的字符集是 gbk


  • conf 中放的是 Tomcat 的配置文件
    一个程序的功能是非常丰富的
    我们一般就是通过配置文件的方式来进行设置的

在这里插入图片描述
tomcat 的配置主要是通过 xml 的方式来提供的


  • logs 日志
    调试一个程序的最重要的手段

后续自己写的程序,代码中打印的日志,就可以在上述目录中看到

日志,就是通过 System.out.println 等方式,打印的一些字符

我们平时写代码使,会用调试器打断点来调试
但是服务器不适合,不能打断点停下来,因为这样其他的客户端就无法响应
而且,经常也会涉及到“概率性问题”,有的时候100 个请求,才会触发一次 问题

使用调试器,本质上是

  1. 更好的理解程序的执行该过程
  2. 更好的还珠到某些临时结构(摸个变量的中间的值)

这两点,都是可以通过日志替代的

使用日志调试,每次添加/改动日志,都需要重新编译运行


  • webapps 里面放的即使若干个 webapp(网站)

在这里插入图片描述
webapps 中,每个目录,都是一个 webapp (就包含了一个网站的后端代码和前端代码)

这个目录中还能见到 .war 压缩包文件.war 包
使用 tomcat 发布程序的一种方式
写好的一个网站,就可以打包成 war 包,拷贝到 tomcat 的 webapp 里
tomcat 就会自动对 war 进行解压缩,从而完成网站的部署和加载

war 包是自己写的代码,生成的结果,目前这里还没有

4.1 tomcat 的作用

在这里插入图片描述
这就是 tomcat 的重要作用
可以让浏览器通过网络来访问到一个 html 页面

在这里插入图片描述
直接双击打开,这个做法是让个浏览器打开一个本地文件,和上面有本质的区别

但是目前电脑上的 tomcat 部署的网页,别人是无法直接访问到的(NAT 问题)

但是如果使用的是云服务器是可以的


静态页面:页面内容是固定的

动态页面:根据用户输入的不同内容,显示出不同的界面

一个静态假面,就是一个单纯的 html
动态界面就要复杂一些,这就需要在背后让程序员来编写一些代码,来描述一些逻辑
通过大量的代码,复杂的逻辑,来实现

tomcat 就可以支持静态页面,也能支持动态页面
tomcat 提供了一组 api,封装了 HTTP 协议,可以让程序员更方便的去编写动态界面
(这组 api 称为 Servlet)

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

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

相关文章

js实时监听input输入框值的变化

实习日记之通过调用common chemistry的api接口实现输入keyword查找cas号和mw。做了一个简单的html网页&#xff0c;用到了ajax技术。比较简单&#xff0c;适合刚入门的宝学习参考。代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&l…

【HBuilder + IDEA + XFtp + XShell】打包部署上线

简述 前后端分离&#xff1a;需要将前后端的程序包打包发送至应用Linux服务器上Linux服务器 &#xff08;1&#xff09;需要启用SSHD服务&#xff0c;该服务会监听22号端口&#xff08;一般是开启的&#xff09; &#xff08;2&#xff09;搭建&#xff1a;MYSQL、Nginx、jdk、…

《HelloGitHub》第 93 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、Java、Go、C/C、Swift...让你在短时间内…

[Angular] 笔记 18:Angular Router

Angular Router 视频 chatgpt&#xff1a; Angular 具有内置的大量工具、功能和库&#xff0c;功能强大且经过良好设计&#xff0c;如组件化架构、依赖注入、模块化系统、路由和HTTP客户端等。这些功能可以直接用于项目中&#xff0c;无需额外的设置或第三方库。这简化了开发流…

显示器与按键(LCD 1602 + button)

一、实验目的&#xff1a; &#xff08;1&#xff09;学习lcd 1602的编程与使用、 &#xff08;2&#xff09;机械式复位开关button软件消抖的方法。 二、实验内容&#xff1a; 1、必做&#xff1a;先显示开机画面&#xff0c;&#xff1a;在1602显示器上&#xff0c;分两行…

白话机器学习的数学-2-分类

1、设置问题 图片分类&#xff1a;只根据尺寸把它分类为 纵向图像和横向图像。 如果只用一条线将图中白色的点和黑色的点分开&#xff1a; 这次分类的目的就是找到这条线。 2、内积 找到一条线&#xff0c;这是否意味着我们要像学习回归时那样&#xff0c;求出一次函数的斜率…

关于 K8s 的一些基础概念整理

〇、前言 Kubernetes&#xff0c;将中间八个字母用数字 8 替换掉简称 k8s&#xff0c;是一个开源的容器集群管理系统&#xff0c;由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。 下面简单列一下 k8s 的几个特性&#xff1a; 自…

clickhouse连接工具dbeaver

地址 地址&#xff1a; Download | DBeaver Community 安装 表引擎 表引擎之TinyLog 以列文件的形式保存在磁盘上&#xff0c;不支持索引&#xff0c;没有并发控制。一般保存少量数据的小表&#xff0c; 生产环境上作用有限&#xff0c;多用于平时练习测试用。 内存引擎&am…

k8s 架构

主要组件 k8s有如下的主要组件&#xff1a; Control plane(s) and worker node(s)OperatorsServicesPods of containersNamespaces and quotasNetwork and policiesStorage. 一个k8s集群是有一个或多个 cp&#xff08;控制平面&#xff09;节点和一组worker 节点组成的。这个…

GaussDB数据库中的同义词SYNONYM

目录 一、前言 二、GasussDB数据库中的Synonym 1、Synonym的概念 2、语法介绍 3、Synonym的用途 三、Synonym在GaussDB数据库中是如何使用的 1、表的同义词使用&#xff08;示例&#xff09; 2、视图的同义词使用&#xff08;示例&#xff09; 3、函数的同义词使用&am…

YOLO训练results.csv文件可视化(原模型与改进模型对比可视化)

一、单独一个文件可视化&#xff08;源码对应utils文件夹下的plots.py文件的plot_results类&#xff09; from pathlib import Path import matplotlib.pyplot as plt import pandas as pd def plot_results(fileruns/train/exp9/results.csv, dir):# Plot training results.c…

前后端分离nodejs+vue医院预约挂号系统6nrhh

医院预约挂号系统主要有管理员、用户和医生三个功能模块。以下将对这三个功能的作用进行详细的剖析。 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1a;Express/koa 前端:Vue.js 数据库&#xff1a;mysql 开发软件&#xff1a;VScode/webstorm/hbuiderx均…

YOLOv8改进 | 细节创新篇 | iAFF迭代注意力特征融合助力多目标细节涨点

一、本文介绍 本文给大家带来的改进机制是iAFF&#xff08;迭代注意力特征融合&#xff09;&#xff0c;其主要思想是通过改善特征融合过程来提高检测精度。传统的特征融合方法如加法或串联简单&#xff0c;未考虑到特定对象的融合适用性。iAFF通过引入多尺度通道注意力模块(我…

JDK9及之后版本使用 jlink 生成定制化的 JRE

许多java软件的运行需要依赖jre&#xff0c;在 jdk8 之后&#xff0c;不再提供默认的 jre&#xff0c;后续如果项目中还是想用 jre 的形式发布软件&#xff0c;那么可以使用 jlink 工具生成 jre。 一、jlink 命令详解 jlink 二、查看jdk中包含的所有模块 如果在 jdk 安装文件夹…

Hadoop之Yarn 详细教程

1、yarn 的基本介绍和产生背景 YARN 是 Hadoop2 引入的通用的资源管理和任务调度的平台&#xff0c;可以在 YARN 上运行 MapReduce、Tez、Spark 等多种计算框架&#xff0c;只要计算框架实现了 YARN 所定义的 接口&#xff0c;都可以运行在这套通用的 Hadoop 资源管理和任务调…

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

VSCode远程开发配置

目录 概要远程开发插件安装开始连接SSH无密码登录开发环境配置 概要 现在很多公司都是直接远程到服务器上写代码&#xff0c;使用远程开发&#xff0c;可以在与生产环境相同的环境中开发、测试和部署代码&#xff0c;减少因环境不同而导致的问题。当下VSCode远程开发是支持的比…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#xff0c;那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…

002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源

&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;下载资源链接&#x1f4…

Collector收集器的高级用法

Collectors收集器的高级用法 场景1&#xff1a;获取关联的班级名称 原先如果需要通过关联字段拿到其他表的某个字段&#xff0c;只能遍历List匹配获取 for (Student student : studentList) {Long clazzId student.getClazzId();// 遍历班级列表&#xff0c;获取学生对应班级…