HTTP和HTTPS

2020-10-23  本文已影响0人  CyberDunk1997

HTTP

图解HTTP:https://blog.csdn.net/zephyr999/article/details/80055420
HTTP1.0、HTTP1.1和HTTP2.0的区别:https://www.jianshu.com/p/be29d679cbff

1.1 HTTP的发送与传输流程

HTTP的发送与传输流程

1.2 各种协议与HTTP协议的关系

各种协议与HTTP协议的关系
1.3 端口号
1.4 HTTP是不保存状态的协议

2. HTTP报文格式

HTTP报文又分为请求报文和响应报文,两者的格式稍有区别。

2.1 请求报文

请求报文格式

2.2 响应报文

响应报文

HTTPS

1. 你需要提前知道的概念

1.1 对称加密和非对称加密
1.2 公钥和私钥的作用
1.3 数字证书

CA 证书其实就是数字证书,是由 CA 机构颁发的。至于 CA 机构的权威性,那么是毋庸置疑的,所有人都是信任它的。CA 证书内一般会包含以下内容:

CA 证书中的 Hash 值,其实是用证书的私钥进行加密后的值(证书的私钥不在 CA 证书中)。然后客户端得到证书后,利用证书中的公钥去解密该 Hash 值,得到 Hash-a ;然后再利用证书内的签名 Hash 算法去生成一个 Hash-b 。最后比较 Hash-a 和 Hash-b 这两个的值。如果相等,那么证明了该证书是对的,服务端是可以被信任的;如果不相等,那么就说明该证书是错误的,可能被篡改了,浏览器会给出相关提示,无法建立起 HTTPS 连接。除此之外,还会校验 CA 证书的有效时间和域名匹配等。

2. HTTPS请求的流程如下

HTTPS的流程

2.1 对图上的每一步进行解释

  1. 客户端向服务器发起HTTPS请求
  2. 服务器生成一对公钥和私钥,公钥用来给客户端加密,而自己则用私钥解密。公钥需要放在证书中一起返回给客户端,而私钥是绝对保密的,不会告诉任何人。
  3. 服务器返回一个数字证书CA(CA中包括了一个公钥和证书的其他信息)
  4. 首先,客户端要对数字证书进行验证(具体如何验证后面再讲)。如果验证没通过,则发出警告:这个https请求有危险!如果通过了,客户端会生成一个随机字符串,后面称这个随机字符串为random key(注意:这个random key是用来进行接下来的对称加密操作的!和公钥、私钥的作用不同!),并通过客户端数字证书中的公钥进行一次加密。
  5. 将刚才加密过的random key再次传给服务器。(因为是被公钥加密过的,所以只有拥有私钥的人才能解密!所以这里即使被人拦截到了,别人也不知道用的什么random key!)
  6. 接下来是服务器解密random key的过程,服务器先用私钥解析出服务器传的random key,获得random key后,再把服务器请求的资源(可能是HTML界面,或者请求的数据)用这个random key进行加密。注意:这次加密是对称加密,由于服务器和客户端都知道这个random key,所以他们可以用这个random key进行密文通信!
  7. 服务器将加密好的资源返回给客户端
  8. 客户端进行对称解密,获得资源

3. 为什么要对称和非对称两套加密方法?

4. HTTPS真的安全吗?

既然Https那么安全,那为什么用抓包工具还是可以看到里面的数据。这里需要对抓包过程的原理做一个简单的介绍,抓包,其实就是中间人攻击,在网络请求过程中,抓包工具充当着客户端/服务端的角色,当客户端请求数据时,抓包工具将请求进行拦截,然后构造数据(冒充客户端)向服务端发起请求,此时服务端会返回自己的公钥证书,然后抓包工具将服务端的公钥证书替换成自己的公钥证书,随后将数据返回可客户端(此时充当服务端的角色)。客户端拿到公钥证书后,使用公钥证书中的公钥对Pre-master secret进行加密,并发送给服务端,发送过程中又被抓包工具拦截,由于客户端使用的公钥其实就是抓包工具生成的证书公钥,所以抓包工具只需要使用自己的私钥进行解密即可拿到真实的Pre-master secret(因为抓包工具在之前的过程中已经拿到了双方的随机码,所以到这一步抓包工具相当于已经拿到了后续通信使用的密钥),随后抓包工具使用从服务端接收到的公钥证书中的公钥对Pre-master secret进行加密,然后发送给服务端。随后的通信过程虽然进行了加密,但抓包工具已经生成了密钥(master secret),所以可以查看Https的通信内容。一图以蔽之:

Charles抓包

从抓包的原理可以看出,对Https进行抓包,需要PC端和手机端同时安装证书。
既然这么容易被抓包,那Https会不会显得很鸡肋?其实并不会,能抓包,那是因为你信任抓包工具,手机上安装了与之对应的证书,你要不安装证书,你抓一个试试。而且安全这个课题,是在攻防中求发展,没有最安全,只有更安全,所以将攻击的成本提高了,就间接达到了安全的目标。

4.1 如何对Https进行抓包

这里以Charles4.0为例,对Https进行抓包:

  1. 依次点击菜单Help -> SSL Proxying -> Install Charles Root Certificate安装PC证书;
  2. 依次点击菜单Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Romote Browser, 此时会弹出一个框,提示让你去 chls.pro/ssl 去下载证书,下载完成后进行安装即可
  3. 依次点击菜单Proxy -> SSL Proxying Settings, 选中页面中的Enable SSL Proxying, 然后点击下面的add, 在弹出的框中的Host编辑框中填写. (表示可对所有Https请求进行抓包),端口填写443,点击OK;
  4. 手机设置代理(你的电脑的IP地址,端口默认为8888)即可进行抓包;

链接:https://juejin.im/post/6844903602494898183
作者:Liberuman
来源:掘金

HTTP1.0和HTTP2.0的区别

总的来说区别就是:

1. 多路复用和二进制帧

多路复用允许单一的 HTTP/2 连接同时发起多重的请求-响应消息。如下图:


多路复用

从这张图可以看出,请求index.html页面的时候,浏览器会去请求style.css和scripts.js的文件。左边的图是顺序加载两个个文件的,右边则是并行加载两个文件。

3. 主动push

服务器推送
上一篇 下一篇

猜你喜欢

热点阅读