发现一篇介绍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. 每天一个 Linux 命令(18):locate 命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 di ...

  2. Microsoft Capicom 2.1 On 64bit OS

    第一步下载capicom.dll http://files.cnblogs.com/files/chen110xi/DLL.7z 第二步注册capicom.dll至SysWow64 第三步VS中设置 ...

  3. Pycharm注册码(2016.2)

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  4. 关于MariaDB5.5不是有效的Win32 应用程序

    操作系统:Windows XP sp3 数据库:MariaDB 5.5.49 问题原因: 使用文本编辑器打开mysqld.pdb文件. 在13行1012列,会发现如下信息: 这说明v5.5.49是使用 ...

  5. JAVA IO 学习

    Java流的分类 1.输入/输出流 输入流:只能向其读数据,不能写. 输出流:只能向其写数据,不能读. 所谓的输入输出都是相对应用程序而言的. 2.字节流/字符流 单位不同,字节流操作8位,字符流操作 ...

  6. mac下有道词典用不了

    有道词典           对于Chrome取词,通过安装插件就可以解决 Chrome 下取词的问题,这个插件就放在有道词典程序目录中.最简便的安装方法如下: 首先确保你已经安装好了有道词典.然后复 ...

  7. 一些不错的学习资料(node)

    Node.js的api中文文档 http://expressjs.jser.us/ 关于Node.js的一系列不错的学习文章 http://blog.fens.me/ express框架的使用 htt ...

  8. AndroidStudio中activity实现去掉标题栏

    1.在代码中实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE) 这段代码需要放在setContentView()前面 2.设置在Manifest ...

  9. function语句和function表达式的随笔

    function语句: function fn(){};/*利用function关键字声明,其在作用域顶端*/ function表达式: var fn = function(){};或者 var fn ...

  10. try-catch-finally 引发的奇怪问题

    今天,发现我们的一个Windows Service无法正常停止,无奈之下只能杀了进程. 为了找到原因,我在本地进行调试,发现程序里用到了多线程,而代码正是卡在了workThread.Abort()语句 ...