• 【HTTPS】


    目录

    🍳1. 运营商劫持

    🍥2. 明文和密文

    🎀3. HTTPS 的基本工作过程

    🌍3.1 对称密钥

    💙3.2 非对称密钥

    🏓3.3 中间人攻击

    🍉3.4 引入证书  第三方权威机构颁布证书

    🎃4. Tomcat


    HTTPS 是在 HTTP 协议的基础上,增加了加密层。HTTP 协议是按照文本的方式明文传输的,这就意味着,在传输的过程中,数据会遭受篡改。

    1. 运营商劫持

    由于通过网络传输的任何数据包都会经过运营商的网络设备,如路由器或交换机,那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改。这便是典型的运营商劫持。举一个具体的例子:比如下载一个 天天动听,按理说,点击下载按钮,会弹出天天动听的下载链接:

    但如果被运营商劫持了,点击下载按钮,弹出的却是 QQ浏览器的下载链接:

    为了改善上述情况,就给 HTTP 协议加密,这也就是 HTTPS了。

    2. 明文和密文

    明文:实际要传达的信息,也就是说间谍是谁。

    密文:明文根据一定的方式,转换后得到的信息。

    把明文变成密文:加密。把密文变成明文:解密。在加密和解密的过程中,需要一个关键的钥匙,也就是密钥。

    3. HTTPS 的基本工作过程

    HTTPS 的加密过程是针对 HTTP 的各种 header 和 body 来说的。

    3.1 对称密钥

    对称密钥:只有一个密钥,key。

     

    服务器对应的客户端有很多个,不同的客户端使用的密钥是不同的!如果大家都用一个密钥,黑客自己也可以作为一个客户端,把密钥拿到手。

    既然是不同的客户端,不同的密钥。此处就要求让客户端在连接到服务器的时候,自己生成一个密钥,让每个客户端自己生成自己的,互不相关,也就生成了不同的密钥了。

    既然客户端需要自己生成一个密钥,如何把这个密钥告诉给服务器呢?通过网络传输!

    客户端生成了自己的密钥之后,就把 key 通过网络发给服务器,但这个数据报可能会被黑客截获,此时黑客就知道密钥了。这样一来,数据就会被截获了。

    看起来似乎要针对 key 进行加密了,总不能要嵌套一个 key2 来对 key 进行加密吧?那这样一来,key2 又有被截获的风险。

    为了更进一步的提高安全性,就需要引入非对称加密了。

    3.2 非对称密钥

    非对称加密:需要两个密钥,一个叫做公钥,一个叫做私钥。为了保证对称密钥能够安全到达服务器,引入了非对称加密,保护对称密钥。非对称加密在对称密钥传输完成之后,就不再使用了。

    客户端希望自己的 key 安全传给服务器,不被黑客拿到。

    黑客跟客户端都能拿到公钥 pub ,黑客拿到这个密文后,由于这个数据是使用 pub 加密的,想要解密,只能使用和 pub 成对的这个 pri 才行,而黑客是没有 pri 私钥的。黑客无法解密,也就拿不到 key!!就相当于黑客手里有一把一模一样的锁头 (pub) ,但没有钥匙 (pri),因此也就拿不到 key 。由于黑客没有拿到 key,所以黑客无法针对密文数据进行解析和篡改。而客户端后续的业务数据,客户端都是使用 key 来进行加密的,也就是使用对称加密的方式。对称加密速度快,成本低。

    3.3 中间人攻击

    但即便是这种方式,安全也是相对的。黑客依旧有别的办法来截获客户端的数据,比如以下情况:

    黑客自己生成了一对非对称密钥 pri2 和 pub2,同时黑客将公钥 pub 记住了。后续黑客就可以使用自己的 pri2 针对密文解密,拿到 key。之后黑客可以继续使用服务器中的 pub,来重新对 key 进行加密,把密文发给服务器。后续客户端传输的所有数据,都会被黑客截取到!

    这是非对称加密会产生的一个弊端,也叫中间人攻击。中间人攻击破解的关键,在于让客户端能够信任公钥。

    3.4 引入证书  第三方权威机构颁布证书

     

    服务器向权威机构申请证书,该证书有以下内容:服务器的 url ,证书的过期时间,颁布证书的机构是啥,服务器的公钥 pub。这些都是明文的。还有一份加密后的签名。该签名针对证书的所有属性,计算一个校验和(签名)。再由证书颁发机构,使用自己的私钥对这个签名进行加密。需要注意的是,如果所有属性不变,即数据相同,那么按照相同的算法计算得到的结果,也一定相同。反之,但凡有一个属性不一样,得到的校验和就会不同。

    客户端拿到证书之后,首先针对证书进行校验。

    1.  得到初始的签名之后,客户端使用系统中内置的权威机构公钥 pub2,针对上述证书中的加密签名进行解密,这个签名是权威机构计算出来的,设为 sum1。

    2. 计算现在的签名:客户端使用同样的签名计算算法,基于证书中的属性重新计算,得到 sum2。

    3. 比较两个签名是否相同。如果相同,说明证书中的数据是从未被篡改过的数据!!如果签名不同,说明证书的数据被篡改了,客户端的浏览器弹框报错!!

    在这种情况下,黑客还能不能篡改数据呢?

    黑客如果要篡改,要这样做:

    1. 黑客把证书中的服务器的公钥 (pub),替换成自己的公钥,这是他能做到的。

    2. 黑客针对证书的各个属性,重新计算签名

    3. 黑客需要把签名进行重新加密。但是所有人手里的 pub2 只能解开被 pri2 加密过的。也就意味着,黑客一定要知道权威机构的私钥(pri2),但这里的关键就是,黑客没有!!!

    4. Tomcat

    HTTP 是前后端交互的桥梁。前端是浏览器,而后端是 HTTP 服务器。HTTP 服务器本质上是一个 TCP 服务器(HTTP 是基于 TCP),这个服务器按照 HTTP 协议的约定,解析请求,构造响应。业界有许多现成的 HTTP 服务器,可以直接使用。在 java 圈子中,最知名的 HTTP 服务器要数 Tomcat !

    下载 tomcat 并不一定要选择最新的。大部分公司都在使用 8,新的版本可能会有 bug。

    启动 tomcat ,进入 bin 目录,如果是 windows 的话,双击 startup.bat,如果是 linux/mac,运行 startup.sh。

    tomcat 是一个 http 服务器,从外形上来看,就是一个黑框框。tomcat 的端口号为 8080。

    tomcat 启动之后,可以在网页上输入下述 url:

    便可看到 tomcat 的欢迎界面。

    部署一个网站到 tomcat 上,就是把对应的内容拷贝到 tomcat 的 webapps 目录即可。

    将博客系统放入到 webapps 中,在地址栏中输入以下路径,便可访问到博客的详情页:

    为什么要把网页往 tomcat 中部署?

    直接双击 html 运行的网页与在 tomcat 中部署网页有什么区别呢?前者只能在自己的电脑中打开,别人无法直接访问,而后者可以通过网络访问,这是跨主机的。别人就可以通过网络访问我的页面。

     

    构造一个 HTTP 服务器,要根据 HTTP 协议解析请求报文,还要根据 HTTP 协议构造响应报文,但这些东西 Tomcat 已经做好了。Tomcat 提供了一系列的 API,这组 API 也称为 Servlet ,可以让程序员在程序中直接调用,如此一来,程序员就可以更加专注于业务逻辑了。


     

  • 相关阅读:
    Spring Boot 中的 ApplicationRunner 和 CommandLineRunner
    「专升本信息技术」计算机基础知识单选题集(02)
    118. 杨辉三角 --力扣 --JAVA
    北大联合智源提出训练框架LLaMA-Rider
    influxdb2如何同时应用多个聚合函数
    Android Studio 快捷键及使用技巧汇总
    中集集团飞瞳全球港口航运人工智能领军企业中集飞瞳,成熟港航人工智能AI为港口船公司大幅提效降本,新一代智慧港口智慧船公司解决方案
    Java 操作 Excel:生成数据、设置单元格样式、设置数据有效性(hutool)
    Scala函数式编程
    CVPR2022 | 弱监督多标签分类中的损失问题
  • 原文地址:https://blog.csdn.net/qq_41233305/article/details/130880404