HTTP协议:基本认证与摘要认证

HTTP协议:基本认证与摘要认证

认证就是客户端要给服务器出示一些自己的身份证明,来证明自己是谁!一旦服务器知道了客户端的身份,就可以判定客户端可以访问的事务和资源了。 在HTTP中,认证通常是通过提供用户名和密码来进行认证的。我们来介绍一下常用的两种认证方式:基本认证与摘要认证!

一、基本认证

在基本认证中,Web服务器可以拒绝一个事务,质询客户端,请用户提供有效的用户名和密码。服务器会返回401状态码来初始化认证质询,并用WWW-Authenticate响应首部指定要访问的安全域。浏览器收到质询时,会打开一个对话框,请求用户输入这个域的用户名和密码,然后将用户名和密码用Base64编码,再用Authorization请求首部回送给服务器。

1.基本认证实例

1)用户请求服务器上某资源:/family/jeff.jpg。

2)服务器回送一条401 Authrization Required,对此资源进行密码质询。同时通过WWW-Authenticate首部说明如何以及在哪里认证。

3)浏览器收到401质询,弹出认证对话框。用户输入用户名和密码后,浏览器会用一个冒号将其连接在一起,并经过Base64编码,然后将其放入Authorization首部发送给服务器。

4)服务器对用户名和密码进行解码,验证他们的正确性,然后用一条HTTP 200 OK报文返回所请求的资源。

2.基本认证缺点

1)基本认证会通过网络发送用户名和密码,这些用户名和密码以Base64编码,Base64编码是一种可逆编码,非常容易破解,所以基本认证相当于以明文的方式传输用户名和密码,非常容易被第三方拦截!

2)使用基本认证登录后,除非关闭浏览器或者清除历史记录,不然无法登出!

3)基本认证没有考虑到重放攻击,即使base64编码是不可逆的,攻击者也可以通过重放攻击来获得服务器的信任。

二、摘要认证

为了弥补基本认证的不足,摘要认证做了以下改进:

1)以密文(不可逆)形式发送密码。

2)防止重放攻击

1.如何加密?

摘要认证遵循的箴言是“绝不通过网络发送密码”,客户端不会发送密码,而是会发送一个指纹或密码的“摘要”,这是密码的不可逆扰码。客户端和服务器都知道密码,因此服务器可以验证所提供的摘要是否与密码相配。

摘要是对信息主题的浓缩。摘要是一种单向函数,主要用于将无限的输入值转换为有限的浓缩输出。常见的摘要函数MD5,会将任意长度的字节序列转换为一个128位的摘要。

2.如何防止重放攻击?

使用单向散列函数加密密码,可以保证密码不以明文形式传送,但是仅仅隐藏密码并不能避免危险,因为即便是不知道密码,攻击者可以通过截获摘要,一遍遍的重放给服务器。在重放攻击的角度,加密和不加密没有区别。

摘要认证中防止重放攻击的前提条件是客户端和服务器都知道密码的明文形式。服务器先发送给客户端一个随机数,客户端使用散列函数加密随机数和密码,然后发送给服务器端。这样即使第三方截获报文,利用重放攻击进行认证也无济于事,因为每次事务的随机数不一样!

猜你喜欢

转载自xiaohu7978.iteye.com/blog/2067858