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连接在发送后将仍然保持打开状态,客户端可以继续通过相同的连接发送请求。

  接着讲一下,HTTP是无状态,只负责接受客户端的请求和 服务器的响应传递 ,不会记录 状态,所以就有了session和cookie的出现,用来记录些相关的信息

  好的扯远了,再讲一下HTTP的传输时明文传输,所以就表示所传递的数据被劫持之后就赤果果的展示在坏蛋面前了,这就很糟糕了。所以HTTPS就出现了

  那么什么时HTTPS呢 ?就是http+ssl/tls。(相当的具体吧)

  好的,跟着来讲讲什么时SSL和TLS吧 。其实两个东西是同一个东西(贼顺)

  1. 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消息分解为互不依赖的帧,然后乱序发送,最后在另一端按照每个包重新组装,就实现了一个连接上有多个请求和响应,从而带来了巨大的性能提升.

posted @ 2019-01-02 21:42  肖习  阅读(308)  评论(0编辑  收藏  举报