HTTP协议特点与HTTPS的安全性

HTTP协议主要特点包括如下:

  1. 支持客户/服务器模式。

  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。

  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP怎么保持持久连接?

随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题。

Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。

Keep-Alive实现:
通过请求的头部字段:Connection,time,max来实现持久连接。
如:Connection:Keep-Alive,time :20,max:10

time:表示第一次http请求发起之后20秒内不断开,并且之后相同host的请求都用同一个http连接通道进行通信;
max:表示最大可以连接的请求数量。

怎么判断HTTP持久连接断开?

HTTP持久连接断开时服务端会通过响应报文的请求头字段的Connect-Length 、chunked来告诉客户端持久连接已经断开了。

持久连接断开标志:
Connect-Length :1024
chunked为空值

Cookie/Session
由于HTTP的无状态特点,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

为了解决这种重复上传的问题,于是有了Cookie/Session的技术解决方案:
Cookie用于客户端,可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。

与 Cookie 相对的一个解决方案是 Session,它是通过服务器来保持状态的。

HTTP协议特点参考资料: 深入理解http协议的特点

HTTPS与网络安全

HTTP是不安全的,因为服务端未检查客户端的有效性,这样很可能被中间人拦截伪装客户端向服务端发送请求。

HTTPS在HTTP传输层之上加了一个安全层(SSL或TLS协议实现),可以做到以下3点:
1. 数据的保密性
2. 校验双方身份的真实性
3. 数据的完整性

image.png

HTTPS连接建立流程:


HTTPS连接建立流程

image.png

通过上面HTTPS连接建立流程分析,大致可以分为下面5个步骤:

  1. 客户端将自己支持的加密算法发送给服务器,请求服务器证书;
  2. 服务器选取一组加密算法,并将证书返回给客户端;
  3. 客户端校验证书合法性,生成随机对称密钥,用公钥加密后发送给服务器;
  4. 服务器用私钥解密出对称密钥,返回一个响应,HTTPS连接建立完成;
  5. 随后双方通过这个对称密钥进行安全的数据通信。

校验双方身份的真实性

上面说了加密,保证了数据不能被他人读取,但通信的双方怎样校验对方的身份呢?HTTPS使用了数字证书,数字证书就是身份认证机构(Certificate Authority)盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这个人。证书的合法性可以向CA验证。

数字证书就是身份认证机构(Certificate Authority)盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这个人。证书的合法性可以向CA验证。

数字证书主要包含以下信息:

  • 证书颁发机构
  • 证书颁发机构签名
  • 证书绑定的服务器域名
  • 证书版本、有效期
  • 签名使用的加密算法(非对称算法,如RSA)
  • 公钥

客户端收到服务器的响应后,先向CA验证证书的合法性(根据证书的签名、绑定的域名等信息),如果校验不通过,浏览器会中止连接,向用户提示证书不安全。

数据的完整性

服务器在发送报文之前做了3件的事:

  • 用哈希算法对报文提取定长摘要
  • 用私钥对摘要进行加密,作为数字签名
  • 将数字签名附加到报文末尾发送给客户端

客户端接收到报文后:

  • 用公钥对服务器的数字签名进行解密
  • 用同样的算法重新计算出报文的数字签名
  • 比较解密后的签名与自己计算的签名是否一致,如果不一致,说明数据被篡改过。

非对称加密与对称加密

HTTPS了两种加密方式:对称加密和非对称加密

连接过程中使用的是非对称加密,非对称加密很耗时;
后续通信过程使用对称加密,提高加密速度。

以下是非对称加密的过程:


非对称加密

发送方通过公钥对数据进行加密,将加密数据传给接收方,接收方通过私钥进行解密得到相应的数据;这种加密和解密用的钥匙不一样的方式叫做非对称加密。

非加密方式是安全的,因为私钥在服务端本地的,并没有在网络上传输,即使客户端的公钥被篡改了,通过私钥也解析不出来,但是这种方式的缺点是耗时比较长;

以下是对称加密的流程:


对称加密

发送方通过秘钥(会话秘钥)对数据进行加密,接收方也通过相同的秘钥进行解密,这种发送方和接收方用同样秘钥加解密的方式叫做对称加密。

秘钥是通过非对称加密连接的时候生成的,已经保证了客户端的安全性,所以在数据传输过程中可以认为数据是安全的。

参考资料:关于HTTPS,你需要知道的全部

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容