HTTP认证机制(翻译)
发现一篇介绍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认证机制(翻译)的更多相关文章
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
- WPS 认证机制
WPS 认证机制 WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)(有的叫做AOSS.有的叫做QSS,不过功能都一致.)是由Wi-Fi联盟组织实施的认证项目,主要致力于简化无线 ...
- 基于Token的WEB后台认证机制
几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...
- HTTP中的摘要认证机制
引子: 指定和服务器端交互的HTTP方法,URL地址,即其他请求信息: Method:表示http请求方法,一般使用"GET","POST". url:表示请求 ...
- USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制
USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...
- 一个NB的安全认证机制
这是一个NB的安全认证机制. 1.这是一个安全认证机制 2.可以防止黑客截获到客户端发送的请求消息,避免了黑客冒充客户端向服务器发送操作的请求. 原理与步骤: 1.客户端与服务器端都会放着一份验证用的 ...
- 【pac4j】OAuth 认证机制 入门篇
1,pac4j是什么? pac4j是一个支持多种支持多种协议的身份认证的Java客户端. 2,pac4j的12种客户端认证机制:目前我只有用过第一和第八种. OAuth (1.0 & 2.0) ...
- web安全认证机制知多少
如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制 ...
- (golang)HTTP基本认证机制及使用gocolly登录爬取
内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...
- Android 怎样开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)
前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
随机推荐
- <网页web工作面试题>
磨刀不误砍柴工,在百忙之余的中午休息时,我录入一下我的面试题,把基础的知识重新温故,稳固! 1.块级元素和行内元素都有哪些? 答:块级元素:div,form,fildset等 行内元素:hr,p,fo ...
- Balloons(山东省第一届ACM省赛)
Balloons Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Both Saya and Kudo like balloons ...
- 关于Oracle GoldenGate中Extract的checkpoint的理解 转载
什么是checkpoint? 在Oracle 数据库中checkpoint的意思是将内存中的脏数据强制写入到磁盘的事件,其作用是保持内存中的数据与磁盘上的数据一致.SCN是用来描述该事件发生的准确的时 ...
- 对"QQGame-大家来找茬"的辅助工具的改进
[前言]最近在博客园首页上看到有“大家来找茬”这个游戏(此游戏为找出两个相近图片的不同点)外挂的相关帖子,所以这里我也翻看了我之前(2009年5月)的写的一个简单的辅助程序(采用 VC6 开发的).我 ...
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
- 安装fast cgi
1. 下载 在HTTPD主页,找到"mod_fcgid" 下载“mod_fcgid-2.3.9-crlf.zip” 2. 生成so文件 首先,设置APACHE2_HOME系统变量. ...
- 【cocos2d-js官方文档】一、搭建 Cocos2d-JS 开发环境
http://blog.csdn.net/qinning199/article/details/40395085
- messagePaneHost
Microsoft.Dynamics.Framework.UI.WinForms.Controls.MessageBarType messageBarType; super(); imageList ...
- WIN7无法记住远程登录密码
1.单点win7系统开始菜单——“运行”,然后输入“gpedit.msc”确定: 2.打开本地组策略后,依次展开:计算机配置 > 管理模板 > 系统 > 凭据分配: 3.双击右侧列表 ...
- 对于旅游业的手机app的分析
对旅游行业的手机app的测试及分析 随着收入水平的提高,旅游已成为人们的惯常需求.或是为了增长见闻,感悟人生:又或者是愉悦感情,消闷解愁:还有的是为了体验生活,追求情调,同时锻炼身体.当然,旅游的目的 ...