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数据通信,总结下来无外 ...
随机推荐
- 《Java 程序设计》课堂实践项目-简易计算器
<Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...
- c++MFC工程修改在共享DLL中使用MFC为使用标准Windows库的解决办法
由于创建MFC工程时,默认是在共享DLL中使用MFC,如果将此选项改成使用标准Windows库,会报如下错误 c:\program files\microsoft visual studio 9.0\ ...
- [NOI2018]归程 kruskal重构树
[NOI2018]归程 LG传送门 kruskal重构树模板题. 另一篇文章里有关于kruskal重构树更详细的介绍和更板子的题目. 题意懒得说了,这题的关键在于快速找出从查询的点出发能到达的点(即经 ...
- 使用SDNN (space displacement neural network)进行多字体手写识别
手写单字体的识别,在看过卷积神经网络的mnist例子之后,很容易实现,那么如何实现多字体的同时识别呢? 如下图 LeCun大神所用的是SDNN space displacement neural ne ...
- 洛咕 P3961 [TJOI2013]黄金矿工
甚至都不是树形背包= = 把每条线抠出来,这一条线就是个链的依赖关系,随便背包一下 // luogu-judger-enable-o2 #include<bits/stdc++.h> #d ...
- POM.XML文档汉化
#class_issueManagement project 所述 <project> 元素是描述符的根.下表列出了所有可能的子元素. modelVersion:String:声明此POM ...
- sqlmap注入分类
注入分法不同,种类不同,来个简单的分类: 1.get型:sqlmap -u “http://xxx.xx.xxx/xx.xxx?xx=xxx” 2.post型: sqlmap -u “http:// ...
- trampoline蹦床函数解决递归调用栈问题
递归函数的调用栈太多,造成溢出,那么只要减少调用栈,就不会溢出.怎么做可以减少调用栈呢?就是采用"循环"换掉"递归". 下面是一个正常的递归函数. functi ...
- 浅谈ajax同步、异步的问题
最近实习的时候看到过firefox的同步.异步的警告,想着概念不是那么清楚,于是整理了一下ajax同步异步方面的知识.我是小白,做个笔记. 首先就是概念问题,ajax根据async进行区分同步和异步过 ...
- Netty源码分析第7章(编码器和写数据)---->第4节: 刷新buffer队列
Netty源码分析第七章: 编码器和写数据 第四节: 刷新buffer队列 上一小节学习了writeAndFlush的write方法, 这一小节我们剖析flush方法 通过前面的学习我们知道, flu ...