https 的理解
前言:
本篇博文来记录下对http及https的理解。(会有点 杂,补缺补漏)
引用:https://blog.csdn.net/u011109589/article/details/80306479
内容:
首先,我们先 了解下http协议的整个执行过程
-
- 建立TCP/IP连接
在HTTP工作开始之前,客户端与服务器通过TCP三次握手建立连接。 - 客户端向服务器发送HTTP请求行
建立了TCP连接,客户端向服务器发送HTTP请求行,例如:GET/sample/hello.jsp HTTP/1.1 。 - 客户端发送请求头和请求体
客户端向服务器发送请求头信息、请求体内容,最后客户端会发送一空白行表示客户端请求完毕。 - 服务器应答响应行
服务器会做出应答,表示对客户端请求的应答, 状态行:HTTP/1.1 200 OK 。 - 服务器向客户端发送响应头信息
服务器向客户端发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束。 - 服务器向客户端发送响应包体
接着,服务器以Content-Type响应头信息所描述的格式向客户端发送响应包——所请求的实际数据。 - 服务器关闭TCP连接
如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive ,TCP连接在发送后将仍然保持打开状态,客户端可以继续通过相同的连接发送请求。
- 建立TCP/IP连接
接着讲一下,HTTP是无状态,只负责接受客户端的请求和 服务器的响应传递 ,不会记录 状态,所以就有了session和cookie的出现,用来记录些相关的信息
好的扯远了,再讲一下HTTP的传输时明文传输,所以就表示所传递的数据被劫持之后就赤果果的展示在坏蛋面前了,这就很糟糕了。所以HTTPS就出现了
那么什么时HTTPS呢 ?就是http+ssl/tls。(相当的具体吧)
好的,跟着来讲讲什么时SSL和TLS吧 。其实两个东西是同一个东西(贼顺)
- SSL/TLS
SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均
支持SSL,其最新的版本是3.0。
TLS的全称是Transport Layer Security,即安全传输层协议。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操
作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。
那么HTTPS传输又是一个什么样的过程呢?
一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步:
(1) 客户端向服务器发起HTTPS请求,连接到服务器的443端口。
(2) 服务器端有一个密钥对,即公钥和私钥,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
(3) 服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:证书的发布机构CA、证书的有效期、公钥、证书所有者、签名。
(4) 客户端收到服务器端的SSL证书之后,验证服务器发送的数字证书的合法性,如果发现发现数字证书有问题,那么HTTPS传输就无法继续。
如果数字证书合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥;然后用公钥对对称密钥进行加密,变成密文。
至此,HTTPS中的第一次HTTP请求结束。
(5) 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
(6) 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是对称密钥,然后用对称密钥对数据进行对称加密。
(7) 服务器将加密后的密文发送给客户端。
(8) 客户端收到服务器发送来的密文,用对称密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
(上面提到了两种加密,对称加密和非对称加密。那就来说一说为什么要这俩结合 ,从字数不难看出非对称加密相对而言更安全,因为私钥不用传递自己保存。那么为什么不直接用非堆成加密呢,因为非对称加密解密的速度慢啊,所以为了兼顾加密的安全性和速度 就将两者进行了结合。)
(啰嗦下,非对称加密就是拥有一组密钥:公钥和私钥。私钥自己保存,公钥随便给。由公钥加密的东西可以用私钥解码,就这么厉害,对于其中的实现原理,不懂啊!以后学习到了再来补充好了)
还要说些啥呢?哦,记录下http版本间的改进
http1.0到http1.1最大的区别就是这个东东:Connection:keep-alive,由短链接到长连接。http1.0采用的是短链接,因为当时网页资源还比较少所以短链接够了,然后互联网的发展,东西就越来越多了啊,什么js包、css包图片啊啥的,如果还是采用短链接,那么就得一次一次的发起http请求,每次建立tcp连接三次握手然后在四次挥手,不得影响效率了,所以就出现了长连接,tcp连接后保持连接,浏览器看可以通过相同的连接发起请求,节约了网络带宽。
http1.1到http2.0
HTTP2.0中新的二进制分帧层将HTTP消息分解为互不依赖的帧,然后乱序发送,最后在另一端按照每个包重新组装,就实现了一个连接上有多个请求和响应,从而带来了巨大的性能提升.