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

Java HTTP协议(二)--- HTTPS,Tomcat

文章目录

  • HTTPS
    • HTTPS的工作过程
      • 对称加密和非对称加密
      • 中间人攻击
    • HTTPS过程的总结
  • Tomcat
    • Tomcat的作用
    • 静态网页和动态网页

HTTPS

  1. HTTPS主要就是把HTTP进行加密
    明文 + 密钥 -> 密文
    密文 + 密钥 -> 明文
  2. 在密码学中,使用密钥进行加密,有两种主要的方式
    1.对称加密。加密和解密,使用的密钥是同一个密钥

设密钥为key
明文 + key -> 密文
密文 + key -> 明文
加密和解密这里是数学上的问题

2.非对称加密,有两个密钥(一对)
这两个密钥,一个称为公钥,一个称为私钥
(公钥就是可以公开的,私钥就是自己藏好的)

明文 + 公钥 -> 密文
密文 + 私钥 -> 明文

明文 + 私钥 -> 密文
密文 + 公钥 -> 明文

用一个钥匙加密,就用另一个钥匙解密

举个例子:

在这里插入图片描述

HTTPS的工作过程

  1. 目标:针对HTTP这里的header和body进行加密

对称加密和非对称加密

1.先引入对称加密

在这里插入图片描述
上面的模型存在一个重要的问题。服务器不是只和一个客户端通信,而是和很多客户端通信。
这些客户端使用的对称密钥是相同的吗?
很明显,必须要求每个客户端的密钥都是不同的,彼此之间才不知道对方的密钥是啥

如果都是相同的话,那么黑客搞一个客户端服务器的请求,把你的密钥获取到,这些数据不都全都知道了吗
在这里插入图片描述
问题:
在这里插入图片描述
在这里插入图片描述
针对以上情况就,如何让密钥更安全地到达服务器呢???
需要针对秘钥进行加密
那是否要再搞一个密钥2,使用密钥2对上面的密钥进行加密呢?
(此时,还要想办法把秘钥2也传输给服务器)无论引入多少个密钥,你套上几层娃,都有泄露的风险,这种方法就不行了

  1. 为了解决上述安全传输秘钥的问题,引入了 非对称加密
    非对称加密中,有一对密钥,公钥和私钥。
    可以使用公钥加密,私钥解密
    或者使用私钥加密,公钥解密

过程:服务器这里有公钥和私钥,把公钥传给客户端,虽然中间可能会被黑客截获公钥,但是黑客没有私钥,是解锁不了的,然后客户端进行对密文,公钥的加密,再发给服务器,黑客还是没有私钥,所以还是解锁不了
在这里插入图片描述
在这里插入图片描述
既然已经引入了非对称加密,为啥还需要引入对称加密呢?
直接使用非对称加密,来完成所有的业务数据的加密传输即可。
进行非对称加密/解密,运算成本是比较高的。运算速度也是比较低的。对称加密,运算成本低,速度快

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

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

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

中间人攻击

上述对称加密 + 非对称加密过程就是HTTPS基本盘了。但是只有这些是不够的,上述流程中还存在一个严重的漏洞,黑客如果利用好这个漏洞,仍然可以获取到原始的明文数据!!!

举个中间人攻击的例子:
在这里插入图片描述
中间人攻击的过程:
在这里插入图片描述
如何解决上述的中间人攻击呢?
之所以能进行中间人攻击,关键要点在于客户端没有分辨能力。客户端不知道当前这个公钥是不是黑客伪造的!!!

这里的分辨,不能靠自证(谁都说自己是真的)
引入第三方的可以被大家都信任的公证机构,公证机构说这个公钥是正确的,不是伪造的,我们就是可以信任的!!!

基本过程:
在这里插入图片描述
对于证书,数字签名如何加密的理解:
在这里插入图片描述
对校验和进行计算,验证是否是正确的公钥
在这里插入图片描述
本来是拿服务器的公钥算的效验和,放入到数字签名中,如果黑客替换了公钥计算出的效验和,就和客户端通过内置的公证机构的公钥进行解密拿到效验和,就不一样了,那么就不是原始的公钥了

黑客无法直接替换公钥:
在这里插入图片描述
黑客可以直接重新计算一个数字签名,可以吗?

在这里插入图片描述
黑客是否可以自己也申请一个证书,完全替换掉,服务器的证书呢???
这是行不通的,申请证书,需要提交资料。其中就有网站的主域名,认证机构自然会认证这个域名是否是你所有的了(难道你可以拿着别人的域名说是自己的吗)

HTTPS过程的总结

面试中经典的面试题
https加密:
(1) 对称加密,加密业务数据
(2) 非对称加密,加密对称密钥
(3) 中间人攻击
(4) 使用证书,来验证服务器的公钥

这些相结合,就保证了https的安全性

在这里插入图片描述

Tomcat

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

HTTP客户端:浏览器,Postman,爬虫程序
HTTP服务器:可以自己写代码实现(基于 TCP socket)
但是实际上一般来说在开发过程中不需要我们从头开始去写,有一些大佬们,已经写好了现成的http服务器,我们只需要去使用或者基于这些http服务器进行二次开发即可

二次开发:人家的代码已经把如何处理http请求,如何构造http响应都封装好了。我们只需要调用这些api来构造我们的业务逻辑即可

业务逻辑:你开发的网站是干什么的。比如:博客网站,外卖网站,电商网站

  1. Tomcat是Java中最流行的HTTP服务器
    这里贴一个Tomcat的下载教程:下载教程

  2. Tomcat 是一个Java写的http的服务器
    开发网站,就需要涉及到HTTP服务器。
    bin目录下放的是tomcat的一些相关可执行脚本

在这里插入图片描述
启动Tomcat程序:
在这里插入图片描述
Tomcat闪退的原因:

在这里插入图片描述
可以通过日志确认Tomcat是跑起来的,还可以把Tomcat启动之后,就可以通过浏览器来访问tomcat的欢迎页面了
在这里插入图片描述
tomcat的日志,在控制台中,可能是乱码
原因:
Tomcat默认使用的字符集,是utf8
而windows cmd 的字符集是gbk
要么把tomcat改成gbk,要么把cmd改成utf8
在这里插入图片描述
这里就不处理了,后续还会介绍其他使用tomcat的方式,比如把tomcat集成到idea中,或者linux中使用tomcat,这两种后面主要使用的方式不会乱码

  1. conf中放的是tomcat的配置文件
    我们程序员一般都是通过配置文件的方式来进行设置的这些功能(一个程序的功能可能是多种多样的)
    tomcat的配置主要是通过xml的方式来提供的
    在这里插入图片描述
  2. logs,日志,调试一个服务器程序最重要的手段,后续自己写程序的时候,代码中打印的日志,就可以再上述目录中看到
    在这里插入图片描述
    日志和调试器:
    日志,就是通过System.out.println等方式打印的一些字符串
    调试器:打断点,单步执行

调试器不适合给服务器程序使用,给程序打断点,停下来了(服务器就卡着了),此时此刻,其他客户端的请求可能就无法被响应了。经常也涉及到 概率性问题。100个请求,才触发一次的问题。
使用调试器,本质上是:
1.更好地理解程序的实际执行过程
2.更好得关注到某些临时结果(某个变量的中间的值)
这两点都可以通过日志代替
包括一些算法题,也可以使用日志

使用日志的缺点:
使用日志调试,每次添加/改动日志,都需要重新编译运行
如果一次编译需要1个小时呢?
IO多路复用
在这里插入图片描述
6. webapps里面放的就是诺干个webapp(网站)
webapps中,每个目录,都是一个webapp(就包含了一个网站的后端代码和前端代码)
在这里插入图片描述

.war包的生成:
在这里插入图片描述

Tomcat的作用

  1. 通过一个简单的例子,感受一下,tomcat的作用
    在这里插入图片描述
    需要云服务器,大家才能访问我的网页
    在这里插入图片描述
    Tomcat就像是一个底座一样,我们所编写的网站,都是要架到这个底座上,然后才能被外面的用户顺利访问到,Java是这么做的,其他编程语言还有别的玩法

静态网页和动态网页

  1. 刚才只是在tomcat上放了一个静态网页,实际上tomcat还能支持动态网页,这样就有更复杂的逻辑,有功能就更强大的页面
  2. 静态页面:页面内容都是固定的
    比如一个搜索的网页,百度
  3. 动态页面:根据用户输入的内容不同,产生出不同的结果

有明显的输入:
比如在百度搜索两个不同的关键词,得到的页面结果是不同的
虽然内容不同,但是页面结构非常相似。就像一个模子里刻出来的一样

无明显的输入:
有的页面虽然用户没有明显的输入,但是也有差异,也是动态页面
比如B站,主页给你推荐的内容,不同的用户的页面就是不同的。很多网站会根据用户的历史操作,来推测用户的喜好,进一步给用户推荐他感兴趣的内容

什么是Servlet?
在这里插入图片描述

http://www.dtcms.com/a/406135.html

相关文章:

  • 深度学习学习路线图:从MNIST到MobileNetV4,从理论到实践的完整指南——轻量化模型演进与前沿实践
  • Linux925 shell 变量:本地、环境变量、全局变量;数组:普通数组、关联数组;交互定义、basename、dirname
  • 低价网站备案海报设计制作平台
  • 解读2025 《可信数据空间 技术能力评价规范》
  • 【51单片机篮球记分器+复合按键操作】2022-12-22
  • 网站域名属于哪里管网站 类库
  • 【超分辨率专题】DLoRAL:视频超分辨率的新范式,细节与时序一致的双重提升
  • VS2022 C++调试完全指南
  • 【JAVA】从入门到放弃-01-HelloWorld
  • 玳瑁的嵌入式日记---0925(ARM--时钟)
  • 《代码的“言外之意”:从词源学透彻理解编程》字符的“双重生活”:从Escape到Raw
  • 【Spark+Hive+hadoop】人类健康生活方式数据分析
  • K8S部署的rook-ceph下线osd流程
  • 建站历史查询如何做网站推广页面
  • maven使用非明文密码配置
  • 做网站后期维护工资贴吧wordpress ad widget
  • Reactor 模式:高并发网络编程的事件驱动利器
  • 无人机数传模块技术要点概述
  • Telegram机器人Token和ChatID获取教程
  • Deepoc具身智能模型:为传统电厂巡检机器人注入“灵魂”与“智慧”
  • 中医智慧+AI科技,七彩喜机器人让健康养护“智”在必得
  • Ubuntu 中 Bash / Zsh / Ash / Dash 的使用与区别(含对比图)
  • leetcode 814 二叉树剪枝
  • 【Redis】热Key/大Key问题、缓存击穿、缓存穿透、缓存雪崩、缓存与数据库一致性问题
  • 大模型剪枝系列——基于权重大小剪枝
  • 制作网站的模板深圳网站改版公司
  • 【Linux基础知识系列:第一百四十篇】理解SELinux与系统安全
  • dbswitch:一款免费开源、功能强大的异构数据库迁移同步工具
  • python+uniapp基于微信小程序美食点餐系统
  • Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件