- 浏览: 83753 次
文章分类
- 全部博客 (136)
- 我的技术资料收集 (98)
- 具体技术 (1)
- 的技术资料收集 (4)
- All Articles (1)
- 机器学习 Machine Learning (1)
- 网络编程 (1)
- java (2)
- ava (1)
- 零散技术 (1)
- C# (3)
- 技术资料收集 (1)
- CQRS (1)
- 数据库技术(MS SQL) (1)
- .Net微观世界 (1)
- Oracle SQL学习之路 (1)
- C/C++ (1)
- JS/JQ (1)
- Js封装的插件/实例/方法 (2)
- 敏捷个人 (2)
- Javascript (1)
- 程序设计---设计模式 (1)
- Bug (1)
- 未知分类 (1)
- 程序设计 (1)
- Sharepoint (1)
- Computer Graphic (1)
- IT产品 (1)
- [06]JS/jQuery (1)
- [07]Web开发 (1)
- .NET Solution (1)
- Android (3)
- 机器学习 (1)
- 系统框架设计 (1)
- Others (1)
- 算法 (1)
- 基于Oracle Logminer数据同步 (1)
- 网页设计 (1)
- 原创翻译 (1)
- EXTJS (1)
- Jqgrid (1)
- 云计算 (1)
最新评论
导言
一直对http 的头认证有兴趣,就是路由器的那种弹出对话框输入账号密码怎么实现一直不明白,最近,翻了一下http 协议,发现这是一个RFC 2617的实现,所以写篇文章介绍一下吧.
Http基本认证
这是一个用于web浏览器或其他客户端在请求时提供用户名和密码的登录认证,要实现这个认证很简单:
我们先来看下协议里面怎么定义这个认证的. 1. 编码: 将用户名 追加一个 冒号(':')接上密码,把得出的结果字符串在用Base64算法编码.
- 请求头: Authorization: 认证类型 编码字符串
来看一下客户端如何发起请求例如,有一个用户名为:tom, 密码为:123456 怎么认证呢?
步骤如下 1. 编码
Base64('tom:123456') == dG9tOjEyMzQ1Ng==;
- 把编码结果放到请求头当中
Authorization: Basic dG9tOjEyMzQ1Ng==
请求样例客户端
1 |
GET / HTTP/1.1 |
服务端应答
1 |
HTTP/1.1 200 OK |
如果没有认证信息
1 |
HTTP/1.1 401 Authorization Required |
验证失败的时候,响应头加上WWW-Authenticate: Basic realm="请求域".
这种http 基本实现,几乎目前所有浏览器都支持.不过,大家可以发现,直接把用户名和密码只是进行一次base64 编码实际上是很不安全的,因为对base64进行反编码十分容易,所以这种验证虽然简便,但是很少会在公开访问的互联网使用,一般多用在小的私有系统,例如,你们家里头的路由器,多用这种认证方式.
Http 摘要认证
这个认证可以看做是基本认证的增强版本,使用随机数+密码进行md5,防止通过直接的分析密码MD5防止破解. 摘要访问认证最初由 RFC 2069 (HTTP的一个扩展:摘要访问认证)中被定义加密步骤:
后来发现,就算这样还是不安全(md5 可以用彩虹表进行攻击),所以在RFC 2617入了一系列安全增强的选项;“保护质量”(qop)、随机数计数器由客户端增加、以及客户生成的随机数。这些增强为了防止如选择明文攻击的密码分析。
-
如果 qop 值为“auth”或未指定,那么 HA2 为
-
如果 qop 值为“auth-int”,那么 HA2 为
-
如果 qop 值为“auth”或“auth-int”,那么如下计算 response:
-
如果 qop 未指定,那么如下计算 response:
好了,知道加密步骤,下面我们用文字来描述一下;
最后,我们的response 由三步计算所得. 1. 对用户名、认证域(realm)以及密码的合并值计算 MD5 哈希值,结果称为 HA1。
HA1 = MD5( "tom:Hi!:123456" ) = d8ae91c6c50fabdac442ef8d6a68ae8c
-
对HTTP方法以及URI的摘要的合并值计算 MD5 哈希值,例如,"GET" 和 "/index.html",结果称为 HA2。
HA2 = MD5( "GET:/" ) = 71998c64aea37ae77020c49c00f73fa8
-
最后生成的响应码
Response = MD5("d8ae91c6c50fabdac442ef8d6a68ae8c:L4qfzASytyQJAC2B1Lvy2llPpj9R8Jd3:00000001:c2dc5b32ad69187a
:auth:71998c64aea37ae77020c49c00f73fa8") = 2f22e6d56dabb168702b8bb2d4e72453;
RFC2617 的安全增强的主要方式:
发起请求的时候,服务器会生成一个密码随机数(nonce)(而这个随机数只有每次"401"相应后才会更新),为了防止攻击者可以简单的使用同样的认证信息发起老的请求,于是,在后续的请求中就有一个随机数计数器(cnonce),而且每次请求必须必前一次使用的打.这样,服务器每次生成新的随机数都会记录下来,计数器增加.在RESPONSE 码中我们可以看出计数器的值会导致不同的值,这样就可以拒绝掉任何错误的请求.
请求样例(服务端 qop 设置为"auth")
客户端 无认证
1 |
GET / HTTP/1.1 |
服务器响应(qop 为 'auth')
1 |
HTTP/1.1 401 Authorization Required |
客户端请求(用户名: "tom", 密码 "123456")
1 |
GET / HTTP/1.1 |
服务端应答
1 |
HTTP/1.1 200 OK |
注意qop 设置的时候慎用:auth-int,因为一些常用浏览器和服务端并没有实现这个协议.
发表评论
-
C#WebBrowser控件使用教程与技巧收集--苏飞收集 - sufeinet
2013-06-28 12:07 1067原帖地址:http://www.cnblogs.com/suf ... -
我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】
2013-06-28 12:01 1126原帖地址:http://www.cnblogs.com/lao ... -
[翻译] Oracle Database 12c 新特性Multitenant - Cheney Shue
2013-06-28 11:43 620原帖地址:http://www.cnblogs.com/ese ... -
memcahd 命令操作详解 - 阿正-WEB
2013-06-28 11:37 469原帖地址:http://www.cnblogs.com/azh ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 593原帖地址:http://www.cnblogs.com/ste ... -
面向过程的代码符合大众的思维方式吗? - 史蒂芬.王
2013-06-27 10:28 558原帖地址:http://www.cnblogs.com/ste ... -
RPG游戏之组队测试 - zthua
2013-06-27 10:22 557原帖地址:http://www.cnblogs.com/zth ... -
IT人们给个建议 - SOUTHER
2013-06-26 14:06 523原帖地址:http://www.cnblogs.com/sou ... -
Java向前引用容易出错的地方 - 银河使者
2013-06-26 14:00 494原帖地址:http://www.cnblogs.com/nok ... -
使用Func<T1, T2, TResult> 委托返回匿名对象 - 灰身
2013-06-26 13:54 800原帖地址:http://www.cnblo ... -
【web前端面试题整理03】来看一点CSS相关的吧 - 叶小钗
2013-06-25 10:45 783原帖地址:http://www.cnblogs.com/yex ... -
Windows 8 动手实验系列教程 实验6:设置和首选项 - zigzagPath
2013-06-25 10:27 619原帖地址:http://www.cnblogs.com/zig ... -
闲聊可穿戴设备 - shawn.xie
2013-06-25 10:21 562原帖地址:http://www.cnblo ... -
CentOS下Mysql安装教程 - 小学徒V
2013-06-23 15:24 608原帖地址:http://www.cnblogs.com/xia ... -
vmware安装ubuntu12.04嵌套安装xen server(实现嵌套虚拟化) - skyme
2013-06-23 15:18 836原帖地址:http://www.cnblogs.com/sky ... -
之前专门为IE6、7开发的网站如何迁移到IE10及可能遇到的问题和相应解决方案汇总 - 海之澜
2013-06-23 15:12 949原帖地址:http://www.cnblogs.com/wuz ... -
Android学习笔记--解析XML之SAX - 承香墨影
2013-06-23 15:01 408原帖地址:http://www.cnblo ... -
SQL Server 性能优化之——T-SQL TVF和标量函数
2013-06-19 09:32 670原帖地址:http://www.cnblogs.com/Boy ... -
Nginx学习笔记(二) Nginx--connection&request
2013-06-19 09:26 666原帖地址:http://www.cnblogs.com/cod ... -
从郭美美霸气侧漏看项目管理之项目经理防身术
2013-06-19 09:20 499原帖地址:http://www.cnblogs.com/had ...
相关推荐
本项目中S/Key协议认证过程 1.客户端连接服务器,提示用户输入用户名,将输入的用户名发送到服务器 2.服务器在用户信息字典中查询,根据用户名是否存在向客户端发送不同的反馈信息 3.客户端收到反馈信息,根据内容...
S/Key身份认证协议是一种基于一次性口令(One-Time Password, OTP)的强身份验证方法,主要用于增强网络安全性。在C#中实现S/Key协议,可以为应用程序提供更高级别的用户验证保护,防止恶意攻击者通过重放攻击或者密码...
毕业设计:python WEB 服务统一身份认证协议设计与实现(源码 + 数据库 + 说明文档) 第2章 系统分析 9 2.1可行性分析 9 2.1.1技术可行性 9 2.1.2操作可行性 9 2.1.3经济可行性 9 2.2设计的基本思想 9 2.3基础功能...
在ISAPI(Internet Server Application Programming Interface)协议中,摘要认证是确保基于HTTP REST架构的应用程序安全的重要手段。相比Basic认证,摘要认证提供了更高的安全级别,因为它不直接传输用户名和密码,...
基于MAC地址的Radius认证在Linux下的实现 在计算机网络技术飞速发展的今天,信息安全已经成为计算机网络安全中一个非常重要的内容。客户认证技术是计算机网络安全中最常用、最普遍的一种认证技术。Radius认证是客户...
在描述中提到的"基于HTTP协议的开发接口",通常是指开发者通过HTTP协议来设计和实现的API(Application Programming Interface)。这些接口允许应用程序与服务器进行交互,执行特定的操作,如发送短信或接收短信。...
《基于HDCP协议的认证研究与流加密算法的实现》 在当今数字视听领域,保护数字内容的安全传输已经成为至关重要的问题。High-bandwidth Digital Content Protection(HDCP)协议就是为了防止未经许可的复制和传播而...
《基于TCP/IP协议的网络聊天软件的设计与实现》 在当今信息化社会,网络通信已经成为人们日常生活和工作中不可或缺的一部分。TCP/IP(Transmission Control Protocol/Internet Protocol)协议是互联网的基础,为...
本课程设计在对可信计算的体系结构、Linux的安全机制、现有的认证协议等深入研究的基础上,提出了基于Linux操作系统的用户认证与应用授权的架构,并最终完成了整个系统的搭建。本文重点分析了Kerberos认证系统与LDAP...
无线局域网应用越来越广泛,而安全问题是决定其发展的一个重要因素。首先提出了无线局域网中基于身份的加密和签名方案,基于加密和...进一步提出了基于身份的无线局域网认证协议;最后阐述了协议实现的硬件环境和流程。
本主题聚焦于“基于TCP/IP协议实现上位机对UR机器人的远程控制”,这是一项利用网络通信技术来实现远程操作和监控UR机器人的重要技术。下面我们将详细探讨这一技术的原理、步骤以及实现过程中可能遇到的关键知识点。...
SOCKET作为操作系统提供的API,允许程序员在应用层直接与传输层进行交互,实现TCP/IP协议的编程。无论是UNIX还是Windows系统,都内核级地支持SOCKET接口,从而保证了跨平台的兼容性。利用SOCKET,开发者可以创建连接...
3G 系统的认证与密钥分配协议是基于 GSM 的基础上建立起来的,旨在提供一个安全的认证和密钥分配机制。该协议通过在 MS 和 HLR 之间共享的密码,实现了 MS 和 HLR 之间的双向认证。该协议的过程中有三个实体参与,即...
本文提出了一种基于身份密码系统和区块链的跨域认证协议,以解决异构网络环境中用户访问不同信任域网络服务时的跨域身份认证问题。该协议基于NC身份密码系统,结合区块链技术的分布式对等网络架构,提出了一种联盟链...
在这个项目中,我们探讨的是如何利用ASP.NET实现一个基于TCP协议的简单即时通信软件。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它确保了数据包的有序和无损传输,非常适合于即时...
在实际应用中,Python通过Paramiko库在SSH协议基础上实现的远程管理功能,具有灵活性和扩展性,能够满足复杂网络环境下的管理需求。管理员可以在Python脚本中编写复杂的逻辑,自动执行日常的运维任务,从而提高工作...
本次实验旨在通过实际操作,实现基于PAP(Password Authentication Protocol)认证的公司总部与分公司之间的安全互联。具体而言,实验将围绕PPP(Point-to-Point Protocol)协议下的PAP认证机制展开,确保数据在网络...