文章目录
- HTTPS
- HTTPS的工作过程
- 对称加密和非对称加密
- 中间人攻击
- HTTPS过程的总结
- Tomcat
- Tomcat的作用
- 静态网页和动态网页
HTTPS
- HTTPS主要就是把HTTP进行加密
明文 + 密钥 -> 密文
密文 + 密钥 -> 明文 - 在密码学中,使用密钥进行加密,有两种首要的方式
1.对称加密。加密和解密,运用的密钥是同一个密钥
设密钥为key
明文 + key -> 密文
密文 + key -> 明文
数学上的问题就是加密和解密这里
2.非对称加密,有两个密钥(一对)
这两个密钥,一个称为公钥,一个称为私钥
自己藏好的)就是(公钥就是可能公开的,私钥就
明文 + 公钥 -> 密文
密文 + 私钥 -> 明文
明文 + 私钥 -> 密文
密文 + 公钥 -> 明文
用一个钥匙加密,就用另一个钥匙解密
举个例子:
HTTPS的工作过程
- 目标:针对HTTP这里的header和body进行加密
对称加密和非对称加密
1.先引入对称加密
上面的模型存在一个核心的问题。服务器不是只和一个客户端通信,而是和很多客户端通信。
这些客户端使用的对称密钥是相同的吗?
啥就是很明显,必须要求每个客户端的密钥都是不同的,彼此之间才不知道对方的密钥
如果都是相同的话,那么黑客搞一个客户端服务器的请求,把你的密钥获取到,这些材料不都全都知道了吗
问题:
针对以上情况就,如何让密钥更安全地到达服务器呢???
必须针对秘钥进行加密
那是否要再搞一个密钥2,启用密钥2对上面的密钥进行加密呢?
(此时,还要想办法把秘钥2也传输给服务器)无论引入多少个密钥,你套上几层娃,都有泄露的风险,这种方法就不行了
- 为了应对上述安全传输秘钥的问题,引入了非对称加密
非对称加密中,有一对密钥,公钥和私钥。
能够使用公钥加密,私钥解密
或者使用私钥加密,公钥解密
过程:服务器这里有公钥和私钥,把公钥传给客户端,虽然中间可能会被黑客截获公钥,但是黑客没有私钥,是解锁不了的,然后客户端进行对密文,公钥的加密,再发给服务器,黑客还是没有私钥,于是还是解锁不了
既然已经引入了非对称加密,为啥还必须引入对称加密呢?
直接使用非对称加密,来完成所有的业务信息的加密传输即可。
进行非对称加密/解密,运算成本是比较高的。运算速度也是比较低的。对称加密,运算成本低,速度快
使用非对称加密,只是用来进行此种关键环节(传输秘钥)(一次性的工作,体积也不大),成本就比较可控。后续要传输大量的业务数据,都使用效率更高的对称加密,是比较好的做法。
如果业务数据都使用非对称加密,整体的传输效率就会大打折扣了。
引入安全性,引入加密,也势必会影响到传输效率,我们也是希望这样的影响能够尽可能降到最低!
中间人攻击
上述对称加密 + 非对称加密过程就是HTTPS的基本盘了。但是只有这些是不够的,上述流程中还存在一个严重的漏洞,黑客如果利用好这个漏洞,仍然可以获取到原始的明文数据!!!
举个中间人攻击的例子:
中间人攻击的过程:
如何处理上述的中间人攻击呢?
之所以能进行中间人攻击,关键要点在于客户端没有分辨能力。客户端不知道当前这个公钥是不是黑客伪造的!!!
这里的分辨,不能靠自证(谁都说自己是真的)
可以信任的!!!就是引入第三方的允许被大家都信任的公证机构,公证机构说这个公钥是正确的,不是伪造的,我们就
基本过程:
对于证书,数字签名如何加密的理解:
正确的公钥就是对校验和进行计算,验证是否
本来是拿服务器的公钥算的效验和,放入到数字签名中,如果黑客替换了公钥计算出的效验和,就和客户端依据内置的公证机构的公钥进行解密拿到效验和,就不一样了,那么就不是原始的公钥了
黑客无法直接替换公钥:
黑客可以直接重新计算一个数字签名,能够吗?
黑客是否可以自己也申请一个证书,完全替换掉,服务器的证书呢???
通过这是行不通的,申请证书,需要提交资料。其中就有网站的主域名,认证机构自然会认证该域名是否是你所有的了(难道你能够拿着别人的域名说是自己的吗)
HTTPS过程的总结
面试中经典的面试题
https加密:
(1) 对称加密,加密业务资料
(2) 非对称加密,加密对称密钥
(3) 中间人攻击
(4) 使用证书,来验证服务器的公钥
这些相结合,就保证了https的安全性了
Tomcat
- Tomcat:HTTP服务器
运用HTTP进行通信,就需要涉及到HTTP客户端和HTTP服务器
HTTP客户端:浏览器,Postman,爬虫程序
HTTP服务器:可以自己写代码实现(基于 TCP socket)
但是实际上一般来说在编写过程中不需要大家从头开始去写,有一些大佬们,已经写好了现成的http服务器,我们只需要去应用或者基于这些http服务器进行二次开发即可
二次开发:人家的代码已经把如何处理http请求,如何构造http响应都封装好了。我们只应该调用这些api来构造我们的业务逻辑即可
业务逻辑干什么的。比如:博客网站,外卖网站,电商网站就是:你开发的网站
Tomcat是Java中最流行的HTTP服务器
这里贴一个Tomcat的下载教程:下载教程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,这两种后面主导使用的方式不会乱码
- conf中放的是tomcat的配置文件
我们程序员一般都是通过配置文件的方式来进行设置的这些功能(一个代码的功能可能是多种多样的)
tomcat的设置首要是通过xml的方式来提供的 - logs,日志,调试一个服务器程序最主要的手段,后续自己写程序的时候,代码中打印的日志,就可以再上述目录中看到
日志和调试器:
通过System.out.println等方式打印的一些字符串就是日志,就
调试器:打断点,单步执行
调试器不适合给服务器程序采用,给工具打断点,停下来了(服务器就卡着了),此时此刻,其他客户端的请求可能就无法被响应了。经常也涉及到概率性问题。100个请求,才触发一次的挑战。
使用调试器,本质上是:
1.更好地理解脚本的实际执行过程
2.更好得关注到某些临时结果(某个变量的中间的值)
这两点都许可通过日志代替
包括一些算法题,也可以使用日志
使用日志的缺点:
使用日志调试,每次添加/改动日志,都需要重新编译运行
如果一次编译需要1个小时呢?
IO多路复用
6. webapps里面放的就是诺干个webapp(网站)
webapps中,每个目录,都是一个webapp(就包含了一个网站的后端代码和前端代码)
.war包的生成:
Tomcat的作用
- 通过一个简单的例子,感受一下,tomcat的作用
需要云服务器,大家才能访问我的网页
Tomcat就像是一个底座一样,我们所编写的网站,都是要架到该底座上,然后才能被外面的用户顺利访问到,Java是这么做的,其他编程语言还有别的玩法
静态网页和动态网页
- 刚才只是在tomcat上放了一个静态网页,实际上tomcat还能支持动态网页,这样就有更复杂的逻辑,有功能就更强大的页面
- 静态页面:页面内容都是固定的
比如一个搜索的网页,百度 - 动态页面:根据用户输入的内容不同,产生出不同的结果
有明显的输入:
不同的就是比如在百度搜索两个不同的关键词,得到的页面结果
虽然内容不同,可是页面结构非常相似。就像一个模子里刻出来的一样
无明显的输入:
有的页面虽然用户没有明显的输入,但是也有差异,也是动态页面
比如B站,主页给你推荐的内容,不同的用户的页面就是不同的。很多网站会根据用户的历史操作,来推测用户的喜好,进一步给用户推荐他感兴趣的内容
什么是Servlet?