【HTTPS】

目录

1. 运营商劫持

2. 明文和密文

3. HTTPS 的基本工作过程

3.1 对称密钥

3.2 非对称密钥

3.3 中间人攻击

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

4. Tomcat


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

1. 运营商劫持

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

【HTTPS】_第1张图片

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

【HTTPS】_第2张图片

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

2. 明文和密文

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

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

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

3. HTTPS 的基本工作过程

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

3.1 对称密钥

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

【HTTPS】_第3张图片

 

【HTTPS】_第4张图片

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

【HTTPS】_第5张图片

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

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

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

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

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

3.2 非对称密钥

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

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

【HTTPS】_第6张图片

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

3.3 中间人攻击

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

【HTTPS】_第7张图片

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

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

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

【HTTPS】_第8张图片

 

服务器向权威机构申请证书,该证书有以下内容:服务器的 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 !

【HTTPS】_第9张图片

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

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

【HTTPS】_第10张图片

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

【HTTPS】_第11张图片

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

【HTTPS】_第12张图片

便可看到 tomcat 的欢迎界面。

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

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

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

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

 

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


【HTTPS】_第13张图片

 

你可能感兴趣的:(frontend,java-ee,https)