HTTP认证:基本认证、摘要认证、HTTPS+表单认证

时间:2024-04-09 13:56:45

一、HTTP认证

认证就是给出一些身份证明,说明你是声称的那个人。

HTTP提供了一个原生的质询/响应的框架:

HTTP认证:基本认证、摘要认证、HTTPS+表单认证

(1)客户端请求服务器的某一受保护的资源

(2)服务器拒绝提供资源,并向客户端发起质询,询问用户名和密码

(3)客户端向服务器传送用户名、密码

(4)服务器检验认证成功,将资源提供给客户端

二、基本认证(Basic认证)

基本认证步骤

(1)客户端请求服务器某一受保护的资源

(2)服务器拒绝提供资源,并对客户端进行质询,返回一条状态为401 (Unauthorized Required)的响应,并在header中的WWW-Authenticate中说明认证方式

(3)客户端重新发送请求,并在header中的Authorization加上用户名、密码等认证参数。基本认证将用户名和密码打包在一起,并使用base-64编码方式对其进行编码。

(4)服务器检验成功后,返回一个正常状态码(如200)的响应,响应包含了请求的URI

基本认证安全缺陷:

(1)通过网络发送用户名和密码,虽然进行base-64编码可以隐藏用户名和密码,但base-64是可逆的,很容易进行反向编码。

(2)很多用户会对不同的服务使用同样的用户名和密码,基本认证直接发送用户名和密码,如被截货,会对其他的服务(比如在线支付)造成很大的威胁。

(3)没有提供对报文内容的防篡改保护,加入报文在传输过程中被代理截获,并被修改了报文的内容,被导致严重后果。

基本认证应用范围:

内些内部网站,家用路由器的管理页面,可能使用HTTP基本认证

下面是使用Fiddler对家用路由器登陆过程的抓包

HTTP认证:基本认证、摘要认证、HTTPS+表单认证

HTTP认证:基本认证、摘要认证、HTTPS+表单认证

三、摘要认证(Digest认证)

摘要认证利用摘要算法(如MD5)对用户名、密码、报文内容等做不可逆的编码,来防止重要信息被获取、篡改。

摘要认证步骤:

(1)客户端请求服务器某一受保护的资源

(2)服务器拒绝提供资源,并对客户端进行质询,生成一个随机数nonce,返回一条状态为401 (Unauthorized Required)的响应,并在header中的WWW-Authenticate中放置随机数nonce,并说明认证方式

(3)客户端选择一个算法(auth或者auth-int),计算出密码和其他数据的摘要,将摘要(response)和算法(qop)放在Authorization头部中。如果客户端还要对服务器进行认证,则生成客户端随机数(cnonce)、随机数生成次数(nc)也放在Authorization中发送服务器。

(4)服务器收到算法及支撑数据(请求方法、请求uri、服务器随机数等),计算出摘要,与客户端摘要进行比较,验证是否匹配。另外如果客户端发送cnonce,服务器会再生成一个随机数(nextnonce)出来,然后根据nextnonce、cnonce、实体主体等等生成应答摘要(rspauth),加到Authorization-Info头部中,返回客户端。

(5)客户端收到返回后,再算出摘要,与服务器返回的rspauth比较,验证是否匹配。后如果还要发送请求,重复3、4、5步骤。

摘要认证安全缺陷:

无法防止中间人攻击。一个中间人可以告知客户端使用基本认证模式,而摘要访问认证没有提供任何机制帮助客户端验证服务器的身份。

密码要进行可逆可还原的保存。很多用户会对不同的服务使用同样的用户名和密码,一旦服务器、客户端的密码被窃取还原,会对其他的服务(比如在线支付)造成很大的威胁。

摘要认证应用范围:

目前部分建设初期网站、内部网站可能使用摘要认证。

四、基于HTTPS+表单的认证

(一)HTTPS过程

HTTP认证:基本认证、摘要认证、HTTPS+表单认证

(1)客户端到服务器

Client Hello:

客户端向服务器发送Client Hello报文开始SSL通信。报文中包含客户端SSL版本、组件等相关信息。

(2)服务器到客户端

Server Hello:

服务器可进行SSL通信时,以Server Hello 报文作为响应。报文中包含服务器SSL版本、组件等相关信息

Certificate Server Key Exchange:

服务器发送Certificate Server Key Exchange报文,报文中包含公开**证书

Server Hello Done:

服务器发送 Server Hello Done 报文, 第一阶段SSL握手协商完成

(3)客户端到服务器

Client Key Exchange:

客户端发送Client Key Exchange 报文。 报文中包含已用服务器的公开**加密的Pre-master secret随机密码串

Change Cipher Spec:

客户端发送 Change Cipher Spec 报文,提示服务器后续通信会采用 Pre-master secret **加密。

Encryted Handshake Message:

客户端发送 Encryted Handshake Message报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准

(4)服务器到客户端

服务器同样发送 Change Cipher Spec 报文

服务器同样发送Encryted Handshake Message报文

(5)SSL连接建立完成

开始应用层的HTTP协议的通信

(二)基于HTTPS+表单的认证过程

(1)客户端将用户名、密码放入报文,通过 POST 方法发送请求到服务器。使用 HTTPS进行HTML数据的发送

(2)服务器验证收到的客户登录信息,认证通过后发送用户的 Session ID,并将认证状态与Session ID 绑定后记录下来。

(3)服务器向发送响应,并会在header中使用 Set-Cookie 写入 Session ID。服务器端对Session ID进行有效期的管理,保证其安全性。同时,为减轻跨站脚本攻击(XSS) 造成的损失,会在 Cookie内加上 httponly 属性。

(4)客户端收到响应的Session ID ,作为Cookie 保存在本地。下次向服务器发送请求时,自动发送该Cookie, 服务器端即可通过验证识别用户认证状态。

HTTP认证:基本认证、摘要认证、HTTPS+表单认证

目前大多数Web网站均使用基于HTTPS+表单的认证过程,上图为douban豆瓣网的登录过程抓包