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消息分解为互不依赖的帧,然后乱序发送,最后在另一端按照每个包重新组装,就实现了一个连接上有多个请求和响应,从而带来了巨大的性能提升.
https 的理解的更多相关文章
- 公钥与私钥对HTTPS的理解(数字证书的需要)
本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...
- [安全] HTTPS的理解
一.概述 在下面的章节,我们要搞明白以下几个问题: HTTP和HTTPS的区别,为什么要使用HTTPS HTTPS如何解决加密问题 HTTPS如何避免中间人攻击 CA证书是什么 CA证书是如何申请和颁 ...
- HTTP与HTTPS的理解
最近一直也在面试的过程中,可能由于各个方面的问题,导致没有时间抽出更新博客,今天开始陆续更新!!!以后自己的博客,会向React Native,swift ,以及H5延展,成为一个全栈的技术人员.本篇 ...
- HTTPS深入理解
HTTPS = HTTP + TLS
- 报文、http、https的理解
一.何为报文? 报文是网络中交换与传输的数据单位,即站点一次性要发送的数据块.报文包含了将要发送的完整的数据信息,其长短不一致,长度不限且可变. 二.报文的作用 报文多是多个系统之间需 ...
- charles刷分微信跳一跳小程序对https的理解
以前以为只要安装了https 客户端与服务端的数据会被加密就安全了 事实上 只要任意一款抓包工具 并伪造证书 就可以解密这个被所谓https加密的数据 如 可以下载charles的根证书 作为伪 ...
- 简单说一下你对http和https的理解
http是一种超文本传输协议,传输的数据都是未加密的,也就是显示在明面上的,是现在互联网上应用最为广泛的一种网络协议,相对来说不太安全,但是所需成本很小.http一般的端口号为80. https则是具 ...
- HTTP 与HTTPS 简单理解
HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因 ...
- 如果这样来理解HTTPS,一篇就够了!
1.前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢. 这其实是个误解:当今主流的移动端IM数据通信,总结下来无外 ...
随机推荐
- mfc 类的友元函数
知识点 友元函数 友元函数 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数..类授予它的友元特别的访问权.通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你 ...
- mfc 类成员函数
知识点 类成员变量初值 类的构造函数 类成员函数 类成员函数的位置 一.类成员变量初值 二.类的构造函数 构造函数 是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值. 构造函 ...
- opencv-Getting Started with Images
1.opencv库简单的操作图片 # coding = utf-8 # 书籍:<<学习opencv>> import cv2 from matplotlib import py ...
- 为什么Python类成员的调用和声明必须有"this"?
Python的这种设计是作者从Modula-3中借鉴来的,在后面使用的情况看来,这个设计也是比较成功的.我们对比Python和C++讨论一下这个问题: Modula-3是上世纪80年代末数字设备公司( ...
- IIS7 增加JSON文件解析
在MIME增加一个Json类型,在MIME增加一个配置如:添加---> 文件扩展名为 .JSON ,MIME类型为text/json(也有将application/x-javascript) 然 ...
- linux bash Shell脚本经典 Fork炸弹演示及命令详解
Jaromil 在 2002 年设计了最为精简的一个Linux Fork炸弹,整个代码只有13个字符,在 shell 中运行后几秒后系统就会宕机: :(){:|:&};: 这样看起来不是很好理 ...
- Linux中的mysql指令
如何启动/停止/重启MySQL一.启动方式1.使用 service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3 ...
- Windows下Redis安装及使用
1.下载安装Redis(安装直接下一步就行,此步骤省略) Redis-x64-3.2.100.exe 2.Redis使用 安装目录如下: ①cmd启动redis: ②将redis安装为服务 此时如果安 ...
- [C++]linux下实现rm()函数删除文件或目录
转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600866.html 在linux下有两个函数可以用来删除文件: #include <unistd.h ...
- python描述符详解
1描述符: 描述符是指将某种特殊类型的类的实例支配给另外一个类的属性. 对于特殊类型必须实现以下三个方法中至少一个方法: def __get__(self,instance,owner): -用 ...