当前位置: 首页 > news >正文

【Java EE初阶二十二】https的简单理解

1. 初识https

         当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制;引入 HTTPS 防止你的数据被黑客篡改 ;

        HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的在于"加密”;

1.1 关于明文和密文

        明文:一般来说传递的原始全部信息称为明文;

        密文:通过一些手段对明文进行特殊处理获取到的真正想传输的内容信息为密文;

        一般来说,明文 + 密钥 => 密文;密文 + 密钥 => 明文;

1,2 秘钥加密方式

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

1、对称加密.

        加密和解密,使用的密钥是同一个密钥
        设密钥 为 key,则
        明文 + key => 密文;密文 + key =>明文

2、非对称加密.

        有两个密钥(一对),这俩密钥,一个称为“公钥”,一个称为"私钥"(公钥就是可以公开的,私钥就是自己藏好的),则规则如下:

        明文 + 公钥 => 密文,密文 + 私钥 =>明文或者

        明文 + 私钥 =>密文,密文 + 公钥 =>明文;

        主要就是用一个钥匙加密,就用另一个钥匙解密;

2. https的工作过程

        https工作目标是针对 HTTP 这里的 header 和 body 进行加密;

2.1 先引入对称加密

        详细的请求图解如下所示:

        

        上面的模型存在一个重要问题,服务器不是只和一个客户端通信, 而是和很多客户端通信,
这些客户端使用的对称密钥必须要求每个客户端的密钥都不相同,彼此之间才不能知道对方的密钥的;所以服务器就需要记录不同客户端的秘钥,如下所示:

        如上图所示,此时要求每个客户端对应的密钥都不同.现在就需要每个客户端,在和服务器建立连接的时候,就把密钥给生成出来 (涉及到一些随机数机制在里面,保证每个客广端生成的密钥都不同),客户端再把自己的密钥通过网络传输给服务器;

        秘钥被黑客截获之后的原理如下所示:

2.2 非对称加密

        为了解决上述安全传输密钥的问题,引入了"非对称加密”,非对称加密中,有一对密钥.公钥和私钥,可以使用公钥加密,私钥解密,或者使用私钥加密,公钥解密;其工作原理如下所示:

        既然已经引入了非对称加密,为啥还需要引入对称加密呢?
        一般来说直接使用非对称加密,来完成所有业务数据的加密传输即可,进行非对称加密/解密,运算成本是比较高的.运算速度也是比较低的.
        对称加密,运算成本低, 速度快.
        使用非对称加密,只是用来进行这种关键环节 (传输密钥)(一次性的工作,体积也不大),成本就比较可控
        后续要传输大量的业务数据,都使用效率更高的对称加密,比较友好的做法.如果业务数据都使用非对称加密,整体的传输效率就会大打折扣了. 

        上述的对称加密+非对称加密过程就是https的基本盘,但是上述的流程中还存在一个严重的问题,就是黑客如果利用好这个漏洞,任然可以获取到明文数据;

2.3 中间人攻击

        关于中间设备的入侵消息流程如下所示:

        q:如何解决上述 中间人攻击问题呢?

        a:之所以能进行中间人攻击,关键要点在于客户端没有"分辨能力,客户端不知道当前这个公钥是不是黑客伪造的!这里的"分辨”不能靠"自证”(谁都是说自己是真的),所以最好的方法就是引入第三方可以被大家都信任的"公证机构",公证机构说这个公钥是正确的,不是被伪造的,我们就是可以信任的;

2.4 使用证书,校验服务器的公钥

        关于公正机构何生成数字签名的流程如下图所示:

        如上图所示,客户端拿到了证书,也就拿到了证书中的公钥,客户端就需要验证这个公钥是否是服务器最初的公钥(是否是被黑客篡改了??),这个过程, 就称为"证书的校验";
        如何进行校验?

        其核心机制,就是"数字签名"=> 被加密后的校验和,(拿着数据的每个字节,带入公式,就能算出一个结果数字,称为校验和),此时, 客户端拿到了数字签名,就可以通过系统内置的公正机构的公钥,进行解密之后得到最初的校验和;客户端再重新计算一遍这里的校验和, 和解密出来的校验和进行对比,如果校验和一致,就可以认为证书没有被篡改过,公钥就是可信的 (服务器原始的公钥)

        故此在上述机制下,黑客就无法对证书内容进行篡改了.即使篡改,也很容易被发现.当黑客收到证书之后,如果直接修改里面的公钥,替换成自己的,客户端在进行证书校验的时候,就会发现校验和不一致了 ,随意客户端就可以认为证书是篡改过了.(客户端这边往往就会弹出一些对话框来警告用户,存在安全风险)

        q:那么黑客替换公钥之后,能否自己替换掉数字签名,自己计算一个呢?

        a:不能的!校验和好算,针对校验和加密,需要使用公证机构的私钥才能进行的,黑客没有这个私钥.如果黑客拿自己的私钥加密,客户端也就无法使用公证机构的公钥解密了,就有可能遇到这种情况,公证机构的公钥是客户端系统自带的,黑客也无法替换,

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

3. Tomcat

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

        HTTP 客户端:浏览器,Postman,爬虫程序等;

        HTTP 服务器:已经有现成的 http 服务器, 咱们只需要去使用或者基于这些 http 服务器进行二次开发即可,人家的代码已经把如何处理 http 请求,如何构造 http 响应都封装好了,咱们只需要调用这些 api 来构造咱们的业务逻辑即可(即自己制作一个相应的网站);

3.1 下载tomact

        1、进入官网

        2、选择 Tomcat8 系列版本

        3、下载压缩包

        4、直接使用即可

3.2 认识tomcat

        Tomcat 是一个 Java 写的 http 服务器,Tomcat 是一个基于 java 实现的"绿色软件",只要解压缩,就可以使用.(需要提前安装好 JDK);下面认识一下关于tomcat文件夹里的相关文件及其作用;

1、bin目录

        双击上述 startup.bat,就可以启动 tomcat,最终的 tomcat 就是一个控制台程序了故服务器开发的话,服务器基本上都是控制台程序,(一般来说都是不带界面的)

        关于tomcat启动失败的几个原因如下所示:

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

        1)、端口被占用了

        (已经启动 tomcat, 再启动第二个),或者电脑上可能装了其他的程序也占用了 8080(像Windows自带的 HTTP 服务器, lS)

        2)、环境变量问题

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

        Tomcat 启动成功之后,就可以通过浏览器来访问 tomcat 的欢迎页面.

        

        tomcat 的日志,在控制台中,可能是乱码的,主要原因是Tomcat 默认使用的字符集是 utf8
而 windows cmd 的字符集是 gbk.

2、关于conf

        conf 中放的是 tomcat 的配置文件,一个程序的功能可能是非常丰富的.就需要按需开启这里的某些功能.给程序猿使用的专业程序,一般很少会专门做一个界面,来让大家修改配置,我们一般就都是通过配置文件的方式来进行设置的;

3、关于log

        日志是调试一个服务器程序最重要的手段.我们后续自己写的程序,代码中打印的日志,就可以在上述目录中看到;

        日志,就是通过 System.out.printin 等方式打印的一些字符串.调试程序,就是使用调试器,打断点,单步执行;调试器不适合给服务器程序使用.给程序打个断点,服务器运行到断点,停下来了.(服务器就卡着了)此时此刻,其他客户端的请求可能就无法被响应了;

        使用调试器的本质上是
        1、更好的理解程序的实际执行过程.
        2、更好的关注到某些临时结果(某个变量的中间的值)

        使用日志的缺点:使用日志调试,每一次添加或改动日志,都需要重新编译运行一次,这就会花费很多的时间;

4、关于webapps

        webapps 中,每个目录,都是一个 webapp (就包含了一个网站的后端代码和前端代码);

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

        下面通过一个例子来感受一下tomcat:

        如上图所示,这就是 tomcat 的重要作用,可以让浏览器通过网络来访问到一个 html 页面.

        

        而上图所示,则是直接双击打开html页面,这个做法是让浏览器打开一个本地文件
和上面是有本质区别的;

        Tomcat 就像是一个"底座"一样,我们所编写的网站,都是要架到这个底座上,然后才能够被外面的用户顺利访问到;刚才只是在 tomcat 上放了一个简单的"静态网页",实际上 tomcat 还能支持"动态网页”,从而让程序猿写出更复杂的逻辑,功能更强大的页面;

3.3 静态网页和动态网页

        静态页面: 页面内容是固定的,如下图所示:

        动态页面: 根据用户输入的内容不同,产生出不同的结果

        如下图所示:

        

        综上所述,输入不同的内容,得到的页面结果;虽然内容不同,但是页面结构非常相似,简直是一个模子中刻出来"的一样;

        一个静态页面,就是一个单纯的 html;动态页面就要复杂一些,就需要在背后让程序猿来编写一些代码, 来描述一些逻辑,比如bilibili, 输入不同的词, 就需要检索出不同的数据.同时对于不同的用户,也就需要推荐出不同的感兴趣的内容.

        Tomcat 就是可以支持静态页面,也能支持动态页面;(Tomcat 提供了一组 api,封装了 HTTP 协议, 可以让程序猿更方便的去编写动态页面了,这组api被称为servlet

ps:本次的内容就到这里了,如果大家感兴趣的话,就请一键三连哦!!!

        

相关文章:

【Java EE初阶二十二】https的简单理解

1. 初识https 当前网络上,主要都是 HTTPS 了,很少能见到 HTTP.实际上 HTTPS 也是基于 HTTP.只不过 HTTPS 在 HTTP 的基础之上, 引入了"加密"机制;引入 HTTPS 防止你的数据被黑客篡改 ; HTTPS 就是一个重要的保护措施.之所以能够安全, 最关键的…...

系统学习Python——装饰器:类装饰器-[跟踪对象接口:基础知识]

分类目录:《系统学习Python》总目录 文章《系统学习Python——装饰器:类装饰器-[单例类:基础知识]》的单例示例阐明了如何使用类装饰器来管理一个类的所有实例。类装饰器的另一个常用场景是为每个生成的实例扩展接口。类装饰器基本上可以在实…...

go-redis 使用 redis 6.0.14 版本错误: consider implementing encoding.BinaryMarshaler

使用方法 err : bp.data.redis.Get(ctx, policyKey).Scan(&result)起初在 redis 5.x.x 版本并没有遇到错误,但是在切换 redis 实例之后就出现了错误(他们之间只是版本不同)。 修复方法 看错误日志的描述,大概含义就是需要我们…...

计网 - 域名解析的工作流程

文章目录 Pre引言1. DNS是什么2. 域名结构3. 域名解析的工作流程4. 常见的DNS记录类型5. DNS安全6. 未来的发展趋势 Pre 计网 - DNS 域名解析系统 引言 在我们日常使用互联网时,经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而,我…...

普中51单片机学习(EEPROM)

EEPROM IIC串行总线的组成及工作原理 I2C总线的数据传送 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许…...

智能风控体系之供应链业务模式

供应链金融是一种针对中小企业的新型融资模式,将资金流有效整合到供应链管理的过程中,既为供应链各环节企业提供贸易资金服务,又为供应链弱势企业提供新型贷款融资服务,以核心客户为依托,以真实贸易背景为前提&#xf…...

最少停车数(C 语言)

题目描述 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位&#xf…...

MAC M1安装vmware和centos7虚拟机并配置静态ip

一、下载vmware和centos7镜像 1、VMWare Fusion 官网的下载地址是:下载地址 下载好之后注册需要秘钥,在官网注册后使用免费的个人秘钥 2、centos7 下载地址: https://biosyxh.cn:5001/sharing/pAlcCGNJf 二、虚拟机安装 直接将下…...

java 课程签到管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 课程签到管理系统是一套完善的java web信息管理系统 采用serlvetdaobean,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…...

Linux——网络通信TCP通信常用的接口和tcp服务demo

文章目录 TCP通信所需要的套接字socket()bind()listen()acceptconnect() 封装TCP socket TCP通信所需要的套接字 socket() socket()函数主要作用是返回一个描述符,他的作用就是打开一个网络通讯端口,返回的这个描述符其实就可以理解为一个文件描述符&a…...

【web | CTF】反序列化打法

天命:因为是php的上古版本,所以本机无法复现,只能用归纳法解决,就是题海战术找相同点,fuzz来测试新的题目 题目一:绕过正则和绕过__wakeup函数,private属性 【web | CTF】攻防世界 Web_php_uns…...

如何在Linux搭建Inis网站,并发布至公网实现远程访问【内网穿透】

如何在Linux搭建Inis网站,并发布至公网实现远程访问【内网穿透】 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.…...

YOLOv9来了! 使用可编程梯度信息学习你想学的内容, v7作者新作!【文献速读】

YOLOv9文献速读,本文章使用 GPT 4.0 和 Ai PDF 工具完成。 文章地址:https://arxiv.org/pdf/2402.13616.pdf 文章目录 文章简介有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?论文试图解决什么问题&a…...

【鸿蒙 HarmonyOS 4.0】网络请求

一、介绍 资料来自官网:文档中心 网络管理模块主要提供以下功能: HTTP数据请求:通过HTTP发起一个数据请求。WebSocket连接:使用WebSocket建立服务器与客户端的双向连接。Socket连接:通过Socket进行数据传输。 日常…...

QT中的多线程有什么作用?

概述 在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上…...

redis最佳实践

原则:redis希望存储的是热点数据,尽量可以在一天内访问到。 最佳实践 选择合适的数据结构 redis有String、Hash、Set、SortedSet、List等结构,主要依据业务需要进行选择 string:几乎所有数据都可以用string存储,但是最好适用于…...

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录:以架构师的能力标准去分析每个问题,过后由表及里分析问题的本质,复盘总结经验,并把总结内容记录下来。当你解决各种各样的问题,也就积累了丰富的解决问题的经验,解决问题的能力也将自然得到极大的…...

【JavaEE】_HTTP请求报头header

目录 1. Host 2. Content-Length与Content-Type 2.1 Content-Length 2.2 Content-Type 3. User-Agent(UA) 4. Referer 5. Cookie header的整体格式是“键值对”结构,一行是一个键值对,这些键值对都是HTTP定义好的、有特殊含…...

随想录刷题笔记 —二叉树篇10 450删除二叉搜索树节点 669修剪二叉搜索树 108有序数组转换为二叉搜索树

450删除二叉搜索树节点 删除结点分为2种情况: 1.结点的孩子只有一个或没有,则直接用孩子或空替代 2.结点的孩子有两个,用左孩子替代,将左孩子的右孩子移到结点右子树的最左结点 解法一:递归 class Solution {publ…...

Docker基础篇(二)

docker run -d docker run -d 容器名或容器ID docker run -d 后台生成容器,并退出容器(除容器中在运行脚本) docker run -it 交互生成容器 docker run -d centos /bin/sh -c “while true; do echo zen; sleep 2;done” 查看容器中的进程…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...