Answers:
摘要身份验证通过将哈希函数应用于以下各项来以加密形式传达凭据:用户名,密码,服务器提供的现时值,HTTP方法和请求的URI。
而基本身份验证使用 未加密的 base64编码。
因此,基本身份验证通常仅应在提供传输层安全性(例如https)的地方使用。
有关所有详细信息,请参阅RFC-2617。
HTTP基本访问身份验证
基本身份验证使用base64编码(非加密)来生成包含用户名和密码信息的加密字符串。HTTP Basic不需要通过SSL来实现,但是如果不这样做,那么它根本就不安全。因此,我什至不会招待不使用它的想法。
优点:
缺点:
总结 –如果您可以控制客户端,或者可以确保客户端使用SSL,则HTTP Basic是一个不错的选择。SSL的缓慢性可以通过仅发出一个请求的速度来抵消
基本认证的语法
Value = username:password
Encoded Value = base64(Value)
Authorization Value = Basic <Encoded Value>
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>
HTTP摘要访问身份验证
摘要访问身份验证使用哈希(即摘要意味着切成小块)方法来生成加密结果。HTTP摘要访问身份验证是一种更复杂的身份验证形式,其工作方式如下:
优点:
缺点:
综上所述,HTTP Digest本质上容易受到至少两次攻击的攻击,而使用基于SSL的HTTP Basic对密码进行强加密的服务器则不太可能共享这些漏洞。
但是,如果您无法控制客户端,则客户端可能会尝试在没有SSL的情况下执行基本身份验证,这比Digest安全得多。
RFC 2069摘要访问身份验证语法
Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)
RFC 2617摘要访问身份验证语法
Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added
在邮递员中看起来如下:
注意:
让我们看看使用(工具来分析发送或接收的数据包)两种HTTP身份验证之间的区别Wireshark
。
1. Http基本认证
客户端按照Web服务器的要求输入正确的username:password后,Web服务器就会在数据库中检查凭据是否正确,并提供对资源的访问权限。
这是数据包的发送和接收方式:
客户端在第一个数据包中使用POST方法在资源-处填充凭据lab/webapp/basicauth
。作为回报,服务器使用http响应代码200 ok进行回复,即username:password是正确的。
现在,在Authorization
标头中显示它是基本授权,后跟一些随机字符串。此字符串是凭据的编码(Base64)版本admin:aadd
(包括冒号)。
2。Http摘要身份验证(RFC 2069)
到目前为止,我们已经看到,基本身份验证发送用户名:密码以明文方式在网络上。但摘要身份验证发送HASH使用Hash算法的密码。
这是显示客户端请求和服务器响应的数据包。
客户端键入服务器请求的凭据后,将response
使用算法将密码转换为,然后将其发送到服务器。如果服务器数据库的响应与客户端给出的响应相同,则服务器将授予对资源的访问权限否则为401错误。
另外,在上述Authorization
中,response
字符串使用的值来计算Username
,Realm
,Password
,http-method
,URI
和Nonce
如所示的图像中:
因此,我们可以看到摘要式身份验证由于涉及哈希(MD5加密)而更加安全,因此,虽然在基本身份验证中在Wireshark上显示了确切的密码,但数据包嗅探器工具无法嗅探该密码。