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 ...
随机推荐
- 【转】Oracle AWR 配置查看
源地址:http://blog.sina.com.cn/s/blog_439628be0101d7l3.html
- linux查找日志技巧
对于从事web开发的人员来说.服务器上的日志多如牛毛,如何快速从中找出所需信息非常重要,以下是我在工作中用到的查找日志的简单命令,希望能对您有所帮助: 工具/原料 linux SecureCR ...
- 提交到github远程仓库遇到的问题
1.could not read from remote repository 可能原因是没有将ssh 密匙添加到github,所以没有权限 解决办法: 1. ssh-keygen -C 'your@ ...
- HEVC学习之二CTU, CU, CTB, CB, PB, TB
在H264标准中,编码层的核心是宏块,一个宏块大小为16X16,包含一个16X16的亮度块,以及对于常用的4:2:0采样格式来说还包含两个8X8的色度块.相对应的在HEVC中类似的结构为编码树单元(C ...
- pip install 报错原因
1. 要在~/.pip/pip.conf中添加源的地址. 2. 在运行pip install 命令的时候加上sudo -H
- xampp下创建多个虚拟网站目录
大家知道,伟大的IIS下面增加多个网站就1分钟搞定.现在换XAMPP下运行多个PHP目录,那我们需要有点探索精神.那么进入正题 首先,下载安装官方最新版本的xampp,地址:点击.记得如果电脑安装有I ...
- 删除项目中的.svn信息
有时候我们新开发一个项目时,会将以前的项目从svn上down下来,然后复制一份.这样就会有个问题,项目中的svn信息就会一直存在.下面介绍删除方法: 1.新建一个.txt的文档.然后将下面代码粘贴到文 ...
- 写 test-case心得
最近,写ticket较多,由于每天有忙不完的工作加不完的班,心里逐渐有一个小人儿在抱怨了.此种情况下,慢慢的写case时边变得懒散,想钻空闲,于是便简简单单总结几个纲要便完事.提交test-case到 ...
- angularjs1 实现地图添加自定义控件(搜索功能)及事件
// 添加地图自定义控件的事件 function addEventHandler(target, eventName, handler) { if (target.addEventListener) ...
- 把解压缩版的tomcat6注册成服务并设置自启动
操作步骤: 1.在“开始 ”→“运行 ”中输入cmd 命令,进入MS-DOS界面 2.cd 到tomcat的bin目录下 C:/> cd tomcat/bin 3.运行命令servi ...