http 与https的爱恨情仇

什么是HTTP?

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

发展历史:

版本            产生时间                                  内容                                                                                          发展现状
HTTP/0.9    1991年    不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求             没有作为正式的标准
HTTP/1.0    1996年    传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令    正式作为标准
HTTP/1.1    1997年    持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码                  2015年前使用最广泛
HTTP/2       2015年    多路复用、服务器推送、头信息压缩、二进制协议等                                           逐渐覆盖市场
 

HTTP特点:

  1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
  2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
  3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
  4. 简单快速、灵活
  5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

http2.0的一些解决策略:

  1. 通过Cookie/Session/useragent技术  其中  cookie (webView 有问题,使用共享cookie)
  2. HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
  3. head信息压:进行gzip 压缩

  4. 服务器自推送  类似于socket 

  5. 多功: 复用http, 多个请求同时响应

Method

POST、GET、PUT、HEAD、DELETE、OPTIONS、TRACE、CPPNNECT

状态码

  • 1xx    信息状态码   接受的请求正在处理
  • 2xx 成功 请求正常处理完毕
  • 3xx 重定向 需要进行附加操作已完成请求
  • 4xx 客户端错误 服务端无法处理请求
  • 5xx 服务器错误 服务器处理请求出错

http缺点

1.通讯使用明文(不加密),内容可能会被窃听

解决方案:加密 通讯加密SSL 内容加密  base64 或MD5加密

2.不验证通讯方身份,因此可能遭遇伪装    DOS攻击(不断攻击)

解决方案:无法确认服务端,无法确认客户端,是否有访问权限  证书 CA 或自签证书

3.无法验证报文的完整性,有可能已遭遇篡改

解决方案:中间人攻击  使用https 

HTTPS

HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。设计目标主要有三个。

(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么   

(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收   。

(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方 

加密方式

  • 共享秘钥加密(对称加密)
  • 使用两把秘钥的公开秘钥加密(非对称加密)
  • HTTPS采用混合加密机制  —在交换秘钥环节使用公开秘钥加密方式,之后建立通讯交换保温阶段则使用共享秘钥加密

HTTPS 缺点

  • 证书麻烦,贵
  • 相对于HTTP速度慢
  • 消耗内存资源多

单项认证

1.客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息

2.服务端给客户端返回SSL协议版本号、加密算法种类、随机数 等信息,同事也返回服务器端的证书,即公钥证书

3.客户端使用服务端返回的信息证书服务器的合法性

      3.1证书事发后过期

      3.2发行服务器证书的CA是否可靠

       3.3返回的公钥是否能正确解开返回证书中的数字签名

       3.4服务器证书上的域名是否和服务器的实际域名相匹配

      3.5验证通过后,将继续进行通讯,否则,终止通信

4.客户端向服务端发送自己所支持的对称加密房的方案,供服务器端进行选择

5.服务器端在客户端提供的加密方案中选择加密成都最高的加密方式

6.将加密方的方案通过,使用之前获取到的公钥进行加密,返回给客户端

7.客户端收到服务端返回的加密方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后产生该加密方式的随机

码,用作加密过程中的秘钥,使用之前从服务端证书中获取到的公钥进行加密,发送给服务端

8.服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的秘钥,在接下来会话中服务器和客户端将

会使用该密码进行对称加密,保证通讯过程中的信息安全。

双向认证

1.客户端向服务端发送SSL协议号,版本号、加密算法种类、随机数、等信息

2.服务端给客户端返回SSL协议版本号、加密算法种类、随机数等信息 同事也返回服务器端的证书,即公钥证书

3.客户端使用服务端返回的信息验证服务器的合法性,包括:

       3.1证书是否过期

       3.2发行服务器证书的CA是否可靠

       3.3返回的公钥是否能正确解开返回证书中的数字签名

       3.4服务器证书上的域名是否和服务器的实际域名相匹配

       3.5验证后,将继续进行通信,否则,终止通信

4.服务端要求客户端发送客户端的证书,客户端将自己的证书发送给服务端

5.验证客户端的证书,通过验证后,会获得客户端的公钥

6.客户端向服务端发送自己所支持的加密方案,共服务端进行选择

7.服务端在客户端提供的加密方案职工选择加密成都最高的加密方式

8.将加密方案通过使用之前获取的公钥进行加密,返回给客户端

9.客户端收到服务端返回的方案密文后,使用自己的私钥进行解密,获取具体加密方式,而后,产生该加密方式的随机码

用做加密过程中的秘钥,使用之前从服务端证书中获取到的公钥进行加密后,发送给服务端

10.服务端收到客户端发送的消息后,使用自己的私钥进行解密,获取对称加密的秘钥,在接下来的会话中,服务器和

客户端将会使用该密码进行对称加密,保证通信过程中的信息安全

 

 

原创文章 88 获赞 21 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ZhaiAlan/article/details/105385394