发现一篇介绍HTTP认证的好文章,就尝试翻译了一下,记录在下面。(翻译的很挫,哈哈哈)

原文: http://frontier.userland.com/stories/storyReader$2159

=====================================================================================================

HTTP 认证(Authentication) 模式

简介

这篇文章描述了HTTP客户端认证(authentication )的两种模式,本文假设你已经熟悉了HTTP请求、响应、状态码和消息头的结构。

HTTP Access Authentication Framework(HTTP访问认证框架)

HTTP协议(RFC 2616)定义了一种简单的访问认证模式。 假设有某一组网页,它们通常作为一个被保护的领域被引用,或者仅仅对能够对服务器验证提供凭证的用户开放访问。
如果一个HTTP客户端(例如一个web浏览器),请求一个属于一个被保护领域的页面,服务器会响应401,并在响应中包含一个 WWW-Authenticate 头信息。 这个头信息必须包含至少一个适用于被请求页面的 认证质询(authentication challenge)。
下一步,客户端发送另一个请求,这次请求会含有一个认证头属性(Authentication header field ),它包含客户端对服务器认证质询(authentication challenge)的凭证(credentials )。
如果服务器接受到这个凭证,它响应被请求的页面。 另一方面,它返回另一个401响应来表明客户端的凭证是无效的。
真正的WWW-Authenticate和认证头属性的内容依赖于使用的认证模式。写作这篇文章时,有两种认证模式被广泛使用。

Basic Access Authentication

basic authentication 模式假设你(浏览器)的认证包含一个用户名(username)和一个密码(password),密码只对你和服务器可知。
服务器的401响应包含一个由”Basic”字符和一个可以指定被保护领域名称的名值对构成。
例如:WWW-Authenticate: Basic realm="Control Panel"
当接受到服务器的401响应后,你的浏览器提示你输入关联到这个领域的用户名和密码。如下图:

你接下来发送的请求的认证头信息包括字符”Basic”和一个base64编码的一个字符串(它是由 用户名,冒号(:)和密码组成),例如
Authorization: Basic QWRtaW46Zm9vYmFy
QWRtaW46Zm9vYmFy 编码之前应该类似于 zhangsan:123456
服务器以base64解码客户端发来的凭证并与数据库比对,如果正确,那么你就登录进来了。
basic authentication 模式最大的缺点在于对于窃听者来说很容易窃取到你的密码,因为它是通过明文传输的。

Cryptography to the Rescue!(使用密码学来解决)
另外一种可用的认证模式叫做 摘要认证(digest authentication ), 它通过使用加密来弥补明文传输的缺点,通常是使用MD5报文摘要算法(FRC 1321)。
MD5可以将任意长度的字符串计算为128位的数字, 因为MD5是单向的,本质上来说是不可能通过密文得到最初的结果的(不可逆)。
现在,如果你像basic认证中那样将用户名和密码使用md5加密后发送给服务器,那么很显然一个窃听者可以记录你加密后的用户名和密码。当这个窃听者向服务器请求认证时,它可以简单地把这个加密后的用户名和密码发送给服务器,并最终登录成功。 这叫做 重放攻击(replay attack)。

Digest Access Authentication(摘要访问认证)

为了安全的阻止重放攻击(replay attack), 很明显我们需要一个更加复杂的认证过程: 摘要认证模式。
首先,服务器最初的401响应中的WWW-Authenticate头信息中包含着除了认证范围(realm)字符串之外的更多的一些名值对,包括一个叫做nonce(number used once 非重复随机数)的值。服务器必须确保每一个401响应中包含一个唯一的,之前未使用的nonce值。
现在你的浏览器在接下来的请求中包含这样的认证头信息,它包含你的明文的用户名,你刚刚在401响应中接受到的nonce值和所谓的摘要请求,摘要请求可能按照下面的方式计算得到(hashMD5为MD5加密):
A1 = string.hashMD5 (username + ":" + realm + ":" + password)
A2 = string.hashMD5 (paramTable.method + ":" + paramTable.uri)
requestdigest = string.hashMD5 (A1 + ":" + nonce + ":" + A2)  (requestdigest 就是计算得到的请求摘要)

在这个计算过程中,所有的计算值要么是服务器已知的要么是请求头信息的一部分,所以服务器可以进行同样的计算,如果它的计算得到(yield)同样的请求摘要(就是上面计算最终得到的requestdigest), 那么就可以确定你拥有正确的密码。
更进一步, 因为MD5算法是不可逆的,窃听者不能够从请求摘要中获得你的密码。同样,服务器能够相当有效的阻止重放攻击(replay attack),因为它不会在超过一次的认证请求中接受同一个nonce值。对于每次新的请求,服务器都要给出一个不同的nonce值,所以客户端每次也必须产生一个新的请求摘要。

事实上,以上所描述的是摘要认证的一个轻量级实现版本。 RFC 2617 描述了增强的功能,包括一个用来阻止第三方操作在传输中的报文体的方法。

Security Considerations(安全思考)

你应该时刻记住即便是摘要认证,除了密码外的所有数据都是明文传输的,对于窃听者都是可窃听的。
没有一种方法可以使客户端去确认它正在访问的服务器就是它真实希望访问的那台。 没有一种适当的机制允许服务器来向客户端认证自己。
对于摘要认证安全细节的详细介绍可以参考 RFC 2617的第4部分。
不幸的是,一些浏览器目前缺乏对摘要认证的支持。

====================================翻译结束=======================================

basic authentication 实验截图(通过wireshark):

HTTP认证机制(翻译)的更多相关文章

  1. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  2. WPS 认证机制

    WPS 认证机制 WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)(有的叫做AOSS.有的叫做QSS,不过功能都一致.)是由Wi-Fi联盟组织实施的认证项目,主要致力于简化无线 ...

  3. 基于Token的WEB后台认证机制

    几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...

  4. HTTP中的摘要认证机制

    引子: 指定和服务器端交互的HTTP方法,URL地址,即其他请求信息: Method:表示http请求方法,一般使用"GET","POST". url:表示请求 ...

  5. USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制

    USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...

  6. 一个NB的安全认证机制

    这是一个NB的安全认证机制. 1.这是一个安全认证机制 2.可以防止黑客截获到客户端发送的请求消息,避免了黑客冒充客户端向服务器发送操作的请求. 原理与步骤: 1.客户端与服务器端都会放着一份验证用的 ...

  7. 【pac4j】OAuth 认证机制 入门篇

    1,pac4j是什么? pac4j是一个支持多种支持多种协议的身份认证的Java客户端. 2,pac4j的12种客户端认证机制:目前我只有用过第一和第八种. OAuth (1.0 & 2.0) ...

  8. web安全认证机制知多少

    如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制 ...

  9. (golang)HTTP基本认证机制及使用gocolly登录爬取

    内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...

  10. Android 怎样开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)

    前言         欢迎大家我分享和推荐好用的代码段~~声明         欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net           ...

随机推荐

  1. Underscore.js基础入门

    公司产品集成了对Underscore.js,所以需要对这个库有一定的了解.通过查阅资料,发现这个库主是对Array和JSON的处理支持.通过Underscore.js库,可以方便的对Array和JSO ...

  2. Centos 7 在VBox下不能联网

    摘要: 在Virtual Box下选择了Bridge Adaptor模式,安装CENTOS 7,网络连接一直都没有问题,后来不知道什么缘故就突然不能联网,很是烦恼,查询了很多网络方面的配置信息,也做了 ...

  3. SqlCommand执行带GO的SQL脚本文件

    今天工作中遇到了这个问题,其实只要把GO替换成“;”就行了,其它人写的例子用Split来拆分这一个脚本文件的内容,完全没有必要.希望对你有用.

  4. 使用VS2013逆向生成UML类图

    引自http://blog.csdn.net/funnyfu0101/article/details/7705173 首先.打开工程,[体系结构]->[新建关系图] 生成一个类图 然后[体系结构 ...

  5. iOS学习系列-Apache服务器的配置

    配置Apache服务器 一.目的 能够有一个测试的服务器,不是所有的特殊网络服务都能找到免费得! 二.为什么我们要用"Apache"? Apache是目前使用最广的web服务器 M ...

  6. Linux 脚本命令结果输出到文件

    From: http://bbs.chinaunix.net/thread-1997207-1-1.html sh test.sh | tee log.txt

  7. window.returnValue跨域传值问题[转]

    主页面用window.showModalDialog的时候,如果直接打开其它系统的页面,这时候别人的页面在window.returnValue=1;这样返回值的时候,主页面是取不到返回值的,原因就是因 ...

  8. java socket 通讯

    (转)http://blog.csdn.net/xn4545945/article/details/8098646

  9. 把CMSampleBufferRef转成Data

    CMSampleBufferRef ref=[output copyNextSampleBuffer]; NSLog(@"%@",ref); if(ref==NULL) break ...

  10. 关于IE下用HTTPS无法下载/打开文件

    关于IE下用HTTPS无法下载/打开文件(ie8兼容模式下,ie7/ie6下有些问题.) http协议下运行正常,可以下载文件但放到https协议下就不好用一保存,IE提示:ie无法下载,请求站点不可 ...