HTTP, HTTPS 和WebSocket 的相关介绍

2,516 阅读13分钟

你一定听过以下三种协议,但是他们都是什么,各自的发展史,各自的特点是什么呢?今天就来简单的介绍一下,如有错误欢迎指出,可以直接看总结

  1. HTTP协议
  2. HTTPS 协议
  3. Websocket 协议

1. HTTP 协议

1.1 什么是HTTP协议

HTTP 超文本传输协议 (Hypertext Transfer Protocol, 是一个简单的请求-响应协议,通常运行在TCP之上。底层是基于TCP/IP协议的。是应用层协议,是无状态的。是互联网应用最为广泛的一种网络协议。

1.2 HTTP协议的发展历史

产生时间版本内容发展现状
1990HTTP/0.9交换信息的无须协议,仅限于文字,只能get请求没有作为正式的标准
1996HTTP/1.0传输内容格式不受限制,增加了put,patch,head,options,delete正式作为标准
1997HTTP/1.1持久连接,节约宽带,host域,管道机制,分块传输编码等正式作为标准
2013HTTP/2多路复用,服务器推送,头信息压缩,二进制协议等正式作为标准
2018HTTP/3--

1.2.1 : 发展史 详解

详细可以看你知道HTTP2吗?

http1.0 有以下瓶颈

1.一条连接上只能发送一个请求
2.请求只能从客户端开始,客户端不可以接受除了响应以外的其他指令
3.首部未经压缩就发送, 首部信息越多延迟越大
4.每次互相发送相同的首部造成浪费
5.可任意选择数据压缩格式。

所以为了解决以上的问题

 1.AJAX : 局部web页面替换加载的异步通信手段。即: 只更新局部页面
 2.comet : 一旦服务器有内容更新, 就直接返回给客户端,不会让请求等待
 利用ajax和comet技术可以提高web的浏览速度,但并没有解决http协议本身存在的问题,

所以有了HTTP1.1, HTTP1.1 新增了2个特性

 1.持久连接keep-alive : 节省通信量(http1.1 默认都是持久连接的)
   因为tcp每次断开都会增加通信量的开销,所以有了持久连接,可以加快web页面的打开速度。
 2.管道化pipeling: 不需要等响应,直接发送下一次请求,这样就不会发生1.0中的队头阻塞了

但是HTTP1.1 只解决了部分问题,所以有了SPDY协议
HTTP2 就是基于 SPDY协议 , 谷歌发布的, 专门为了解决HTTP 协议所遭遇的瓶颈。

  1. 以会话层方式加入
  2. 使用了SSL(在传输层和应用层之间对网络连接进行加密) 
  具有多路复用,赋予请求优先级,压缩HTTP首部,服务器预推送功能,服务器提示功能等

但是他并不能消除web展示速度的问题, 因为SPDY基本上只是将【单个域名】的通信多路复用,对一个web网站来说, 域名太多, 改善效果会收到限制。并且很多web网站并不是仅仅由HTTP 协议瓶颈导致的问题,所以要想提高web网站的速度还是要从其他地方入手。 所以有了HTTP3!

基于UDP协议的QUIC协议,
原生具有多路复用,一条流丢包不会影响其他流,
小丢包情况下,其他流有冗余数据可以重组,不需要重传,
加密安全

HTTP 协议的特点

  • 无状态
  • 每次请求都要重新建立连接
  • 基于请求和响应:基本的特性,由客户端发起请求,服务端响应简单快速、灵活
  • HTTP2 有 具有多路复用,赋予请求优先级,压缩HTTP首部,服务器预推送功能,服务器提示功能等

HTTP 协议的缺点:

http虽然使用广泛,但是也存在不小的安全缺陷,在网络支付中尤其明显

  1. 通信使用明文,内容会被窃听
  2. 不验证通信方的身份信息,可能遭到伪装
  3. 报文不完整, 容易遭到篡改

HTTPS 协议

1. HTTPS定义:

HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer):

是以安全为目标的HTTP通道,在HTTP基础上通过传输加密和身份认证保证了传输过程的安全性HTTPS在HTTP的基础上加入了SSL(下面有介绍),多用于交易支付等方面。

image.png

2. HTTPS 加密:

HTTPS 加密最终是对称加密,但是对称加密的key在传输过程中使用的是非对称加密,所以HTTPS严格上来说是混合加密 。

其中非对称加密传输对称加密的秘钥的过程叫通信加密(SSL)。

而建立完安全通道后,使用对称加密传输内容的过程叫内容加密(但是内容加密有被篡改的风险)

2.1 常见的加密方式有2种:

1. 对称秘钥加密(共享秘钥加密)

对称密钥加密,又称为对称加密、私钥加密、共享秘钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。

攻击者只要获得秘钥,就可以解密,所以有了公开秘钥加密。

常见的对称加密算法:DES、3DES、AES、Blowfish、IDEA、RC5、RC6;

  • 客户端自己封装一种加密算法
  • 发送 加密数据 和 秘钥 给服务端
  • 服务端用秘钥解密数据
2 非对称秘钥加密(公开秘钥加密)

在这种密码学方法中,需要一对密钥,一个是私人密钥(不公开),另一个则是公开密钥(公开的)。

这两个密钥是数学相关,是某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。

相对于对称加密 处理速度会慢一些

  • 服务器端为客户端统一创建一个加密方式,由服务器端指定创建,称为公钥
  • 客户端使用公钥加密,然后将密文传输给 服务端
  • 服务端使用 私钥 解密

常见的非对称加密算法:RSA、Elgamal、背包算法、Rabin。 signal项目中发送消息用的是DH加密算法就是非对称秘钥加密。

RSA这种加密算法应用非常广泛,如SSH、HTTPS、TLS、电子证书、电子签名、电子身份证等。

2.1 证书颁发机构 CA :

CA机构:

CA机构 :证书颁发机构,负责签发、作废和保存证书。

CA证书:

CA 证书: CA机构签发的证书都叫CA证书

  • 数字证书:网络身份证,用来验证网络上 证明 数字证书持有者的 身份。
  • 电子认证:以PKI为基础,利用密码技术对网络上传输的信息进行加密和解密、数字签名和验证签名,从而确保网上传递信息的真实性、保密性、完整性和不可否认性;

SSL证书:

SSL证书 :是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为服务器证书。

CA证书的本质是利用SSL/TLS协议保护传输数据的安全,因此又称为SSL证书。所以说某种意义上CA证书 = SSL证书。

CA机构除了可以颁发SSL证书之外,还可以颁发其他数字证书,比如:代码签名证书和电子邮件证书等等。

总之 , CA 是一个值得信任的证书机构,由CA颁发的证书都可以成为CA证书,SSL证书只是CA机构颁发的证书中的一种


目的: 用来解决公钥传输信任问题。

证书的申请:

  • 服务器申请:是所有人可信任的
  • 自己生产:比如抓包工具,但是客户端和浏览器是不维护的,默认不受信任

证书包含的主要信息:

  • 证书颁发机构
  • 证书颁发机构签名
  • 证书绑定的服务器域名
  • 证书版本、有效期
  • 签名使用的加密算法
  • 公钥

如何防止CA证书被篡改:

  • 每个证书上都有数字签名: CA 会用一些摘要算法(MD5算法 单向函数生成的散列值)将证书的明文生成摘要,然后用CA的私钥进行加密,生成签名

  • 验签的过程: client 拿到证书后,用同样的摘要算法将明文生成摘要,然后对比。



2.2 总结 HTTPS 加密过程:

  • 对称加密使用的是同样的密钥,所以安全性不高, 但是速度快
  • 非堆成加密 使用的是一对密钥,所以安全性虽然高,但是处理速度慢

解决方案: 使用【非对称加密的公钥】 加密 【对称加密的密钥】 ,接收方使用 私钥解密得到 【对称加密的密钥】

所以HTTPS 的加密过程就是: 服务端需要生成密钥对,并且向CA申请证书,然后把公钥附在证书上,传给client,这样当client拿到证书上的公钥时,可以用此公钥 加密 【对称加密的密钥】 传给 服务端。

HTTPS 协议的缺点:

  • 购买证书要钱
  • 增加数据8开销,消耗cpu 以及内存, 这样对于用户访问量很大的网站, 就会减少处理的请求数和速度。
  • HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
  • SSL证书可以伪造


websocket协议:

定义:

web浏览器和web服务器之间全双工通信标准。也就是说服务器可以主动给客户端推消息,客户端也可以主动向服务器发消息。

通信过程中可互相发送任意格式的数据。

网站为了实现推送技术,一般使用的是轮询,但是轮询需要反复发出请求,消耗资源,头部浪费,而websocket主要是为了解决AJAX 轮询和comet(基于 HTTP 长连接的“服务器推”技术)所引起的问题。

主要特点:

  1. 推送功能: 服务器直接推送数据, 不需要等待客户端发请求。
  2. 减少通信量:一直保持连接状态,首部信息小,通信量也减少了。

注意:为了实现websocket通信, 需要用到HTTP 的首部Upgrade 首部字段, 告知服务器通信协议发生了改变,以达到握手的目的。

使用:

js调用webscocket程序接口,以实现全双工通信。

一般情况下,http 使用ws协议 ,https 使用wss协议,且wss下不支持ip地址的写法

  • Firefox环境下https不能使用ws连接
  • chrome内核版本号低于50的浏览器是不允许https下使用ws链接
  • Firefox环境下https下使用wss链接需要安装证书
 http : new websocket(‘ws://xxx.xx.com/12012/up’)
 https: new websocket(‘wss://xxx.xx.com/12012/up’)

使用场景

社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基 于位置的应用、在线教育、智能家居等需要高实时的场景

优点:

  • 更好的二进制支持: websocket定义了二进制帧
  • 较少的开销:数据包头部较小
  • 支持扩展:可自定义自协议
  • 更好的压缩效果:可以沿用之前内容的上下文
  • 保持连接状态:

其他

1. SSL

1.1 SSL 定义:

  • SSL (Secure Sockets Layer 安全套接字协议)
  • TLS(Transport Layer Security传输层安全) : SSL 的继任者, 可以理解为SSL/3.1

SSL和其继任者TLS 是为网络通信提供安全及数据完整性的一种安全协议。

TLS与SSL在传输层与应用层之间对网络连接进行加密。

1.2 SSL 背景介绍:

Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)技术,可确保数据在网络上的传输过程中不会被截取及窃听。

  • 一般通用的规格为40 bit的安全标准,美国则已推出128 bit的更高安全标准。只要3.0版本以上的I.E.或Netscape浏览器即可支持SSL。
  • 当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

1.3 SSL 协议 分层 :

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

  • SSL协议可分为两层:
    • SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
    • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL 缺点(目前使用的SSL 3.0 和TLS1.0 )

  1. 通信慢
  2. 导致cpu以及内存资源 等硬件消耗,所以慢

解决方法: 使用SSL 加速器

2.中间人攻击(MITM攻击):

2.1 定义:

中间人攻击(Man-in-the-MiddleAttack,简称MITM攻击):是一种间接的入侵攻击,这种攻击模式是通过技术手段将受入侵者控制的一台计算机虚拟防止在网络连接中的两台通信计算机之间,这台计算机就称为 "中间人"。

简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。

SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。

总结:

🤔面试题:说下http 和https 和websocket的区别和联系?

http发展从0.9 到 3,虽然使用广泛,但是具有无状态,无连接,明文传输不安全等缺陷,

所以有了基于SSL(安全套接字)加密的HTPPS协议,HTTPS其实就是添加了加密和身份认证的HTTP。

其中加密方式分为非对称加密和对称加密,而HTTPS加密用到的是两者的结合,也就是需要使用【非对称加密的公钥】去加密 【对称加密的密钥】,而非对称加密中的公钥需要用到CA机构颁发含有数字签名的CA证书,也就是SSL证书

因为过程需要加密解密所以HTPPS 消耗cpu等内存资源比HTTP多,通信相对于HTTP更慢一些

websocket 其实是另一种协议,具有长连接,服务端推送的优点,是全双工的协议。但是他需要HTTP 告知服务器通信协议发生了改变,以达到握手的目的。可以实现推送技术,一般用于社交聊天,协同编辑等场景