《图解HTTP》读书笔记(第八章)

确认访问用户身份的认证

核对的信息通常是指以下这些:

  • 密码:只有本人才会知道的字符串信息
  • 动态令牌:仅限本人持有的设备内显示的一次性密码
  • 数字证书:仅限本人(终端)持有的信息
  • 生物认证:指纹和虹膜等本人的生理信息
  • IC卡等:仅限本人持有的信息

HTTP/1.1 使用的认证方式如下所示:

  • BASIC认证(基本认证)
  • DIGEST 认证(摘要认证)
  • SSL 客户端认证
  • FormBase认证(基于表单认证)

BASIC认证

BASIC认证是从HTTP/1.0就定义的认证方式。

当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码。

用户输入用户名和密码后,用户名和密码会经过BASE64加密附加到请求信息中再次请求HTTP服务器,HTTP服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。

用户名和密码用:合并,将合并后的字符串使用BASE64加密为密文,每次请求时,将密文附于请求头中,服务器接收此密文,进行解析,判断是否认证。

缺点

HTTP基本认证的目标是提供简单的用户验证功能,其认证过程简单明了,适合于对安全性要求不高的系统或设备中,如大家所用路由器的配置页面的认证,几乎都采取了这种方式。其缺点是没有灵活可靠的认证策略,另外,BASE64的加密强度非常低,直接能在请求头中看到,几乎相当于明文了。

另外,除此之外想再进行一个BASIC认证时,一般的浏览器却无法实现注销认证操作。

DIGEST认证

摘要认证是另一种HTTP认证协议,它试图修复基本认证协议的严重缺陷。具体来说,摘要认证进行了如下改进:永远不会以明文方式在网络上发送密码

可以防止恶意用户捕获并重放认证的握手过程;可以有选择地防止对报文内容的篡改;防范其他几种常见的攻击方式。

通过下图可以了解摘要认证的工作原理:
《图解HTTP》读书笔记(第八章)_第1张图片

  • 在图a中,客户端请求了某个受保护文档

  • 在图b中,在客户端能够证明其知道密码从而确认其身份之前,服务器拒绝提供文档。服务器向客户端发起质询,询问用户名和摘要形式的密码

  • 在图c中,客户端传递了密码的摘要,证明它是知道密码的。服务器知道所有用户的密码,因此可以将客户提供的摘要与服务器自己计算得到的摘要进行比较,以验证用户是否知道密码。另一方在不知道密码的情况下,很难伪造出正确的摘要

  • 在图d中,服务器将客户端提供的摘要与服务器内部计算出的摘要进行对比。如果匹配,就说明客户端知道密码。可以设置摘要函数,使其产生很多数字,让人不可能幸运地猜中摘要。服务器进行了匹配验证之后,会将文档提供给客户端——整个过程都没有在网络上发送密码。

SSL客户端认证

从使用用户ID和密码认证方式来讲,只要二者的内容正确,即可认证是本人的行为。但如果用户ID和密码被盗,就很有可能第三方冒充。利用SSL客户端认证则可以避免该情况发生。

SSL/TLS包括单向和双向认证,单向认证即是客户端认证服务端的,双向认证即是客户端和服务端互相认证。

SSL客户端采用双因素认证

多数情况下,SSL客户端认证不仅会依靠证书完成认证,一般会基于表单认证组合形成一种双因素认证来使用。

Session管理及Cookie应用

由于HTTP协议是无状态协议,所以会使用Cokkie来管理Session,用来区分不同的用户。

具体的实现过程如下:

  • 客户端首次访问服务器时发送登录信息;
  • 服务器接收到用户的登录信息后,返回的报文中包含Session IDCookie.
  • 客户端下次访问服务器时会带上这个Session IDCookie,服务器就可以区分不同的客户端了

但是为了保证数据的有效性,Cookie一般具有有效期,由服务器端决定,超过有效期,客户端需要重新提交登录信息。

你可能感兴趣的:(计算机网络)