Http协议(5)—HTTP摘要认证

一、摘要认证的改进
1.用摘要保护密码
客户端不发送密码,而是发送一个摘要,服务端只需验证这个摘要是否和密码相匹配

2.单向摘要
a.摘要是一种单向函数,将无限的输入值转化为有限的
b.常见的摘要为MD5:
将任意长度的字节序列转换为一个128位的摘要;
MD5的128位摘要通常会被写成32个十六进制的字符,每个字符4位

3.用随机数防止重放攻击
a.黑客可以截获摘要对服务器无限制的重发攻击
b.可以将随机数添加到密码中,然后再根据具有随机数的密码生成摘要,这样每次生成的
摘要都不相同,可以防止重放攻击

4.摘要认证的握手机制      
(1).服务器计算出一个随机数
(2).服务器将此随机数放在www-Authenticate中,随算法列表一起发往客户端
(3).客户端选择一个算法,计算出密码和其他数据摘要
(4).客户端将摘要放在一条Authorization响应中发往服务端
(5).服务器根据客户端发送的响应计算出相同的摘要,然后服务器将本地生成的摘要与网络
传送过来的摘要进行比较,验证是否匹配

二、摘要计算
1.摘要算法的输入数据
a.由单向散列函数H(d)和摘要KD(s,d)组成的一对函数,s为密码,d为数据
b.一个包含安全信息的数据块,称为A1
c.一个包含请求报文中非保密属性的数据块,成为A2
2.算法H(d)和KD(s,d)
H(<data>) = MD5(<data>)    
KD(<secret>,<data>) = H(concatenate<secret>:<data>)

3.与安全相关的数据(A1)
密码和受保护信息的产物,包含用户名、密码、保护域、随机数
MD5
为每条请求运行单向散列函数,A1是由冒号连接起来的用户名、域、密码
MD5-sess
只在第一次www-Authenticate握手时运行一次散列函数
算法对A1的定义
ps:nonce为当前随机数;cnonce为客户端随机数            

4.与报文有关的数据(A2)
包括URL、请求方法、报文实体,有助于防止方法、资源或报文被篡改
根据保护质量(qop),为A2提供两种策略:
a.只包含HTTP请求方法和URL,默认
b.添加报文实体,当qop="auth-init"时使用
算法对A2的定义
ps:request-method为请求方法;uri-directive-value为请求URI

5.摘要认证会话
客户端响应对保护空间的WWW-Authenticate质询时,会启动一个此保护空间的认证对话

6.预授权
摘要认证:
a.服务器预先在Authentication-Info首部中发送下一个随机数
b.服务器允许在一小段时间内使用同一个随机数
c.客户端和服务器使用同步的、可预测的随机数生成算法

7.随机数的选择
BASE64(time-stamp H(time-stamp ":" ETag ":" private-key))
time-stamp:服务器产生的时间戳
ETag:与所请求实体有关的ETag首部
private-key:只有服务器知道的数据

8.对称认证
客户端对服务器的认证

三、增强保护质量(报文完整性检查)
在三种摘要首部中提供qop字段:
WWW-Authenticate
Authorization
Authentication-Info

1.报文完整性保护(qop="auth-init")

四、应该考虑的实际问题
1.多重质询
服务器可以对某个资源发起多重质询,即既提供基本认证,又提供摘要认证
2.差错处理
认证服务器一定要确保URI指令指定的资源与请求行中指定的资源相同,否则返回400  BadRequest错误
3.保护空间
.域值与被访问服务器的标准根URL结合在一起定义了保护空间
.保护空间确定了可以自动应用证书的区域
.在基本认证中,客户端会假设请求URI中或其下的所有路径都与当前的质询处处于同
一个保护空间
.在摘要认证中,质询的WWW-Authenticate:domain字段对保护空间做了更精确的定义

4.重写URI
代理可以改变URI语法而不改变实际指向的资源来重写URI
由于摘要认证需要检查URI的完整性, 故URI一经修改会破坏摘要
5.缓存
共享缓存收到Authorization首部的请求并且转接那条请求产生的响应时,当响应中提供了
Cache-Control:must-revalidate和Cache-Control:public时才会将此响应作为任何其他    
请求的应答使用    
Cache-Control:must-revalidate:
缓存可以在应答后续请求时使用响应的实体部分,但是后续请求应该和原始服务器进行
验证
Cache-Control:public:
对任意后继请求都可以使用响应实体

五、安全性考虑
1.首部篡改
防篡改机制:
端到端加密与首部进行数字加密

2.重放攻击
3.多重认证机制

4.词典攻击
密码猜测估计

5.恶意代理攻击和中间人攻击
6.选择明文攻击
预先计算的词典攻击
批量暴力型攻击

7.存储密码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Http协议(4)—HTTP认证机制

一、认证1.HTTP质询/响应认证框架服务器收到一条请求并没有按照请求执行动作,而是以一个认证质询执行响应,要求用户提供一个保密信息说明他是谁,当用户再次发送请求时要附上保密证书,如果证书匹配则执行请求,否则返回一条错误信息2.认证协议与首部官方的两个认证协议:基本认证、…

Http协议(6)—安全HTTP

一、保护HTTP的安全1.功能:.服务器认证:客户端知道它是在与真正的服务器进行通信.客户端认证:服务器知道它是在与真正的客户端进行通信.完整性:服务器与客户端的数据不会被修改.加密:客户端与服务器的对话是私密的,不会被窃听.效率:运行足够快的算法.普适性:所有客户端和服务器…

Apache JMeter--网站自动测试与性能测评

Apache JMeter--网站自动测试与性能测评2013-02-28 15:48:05标签&#xff1a;JmeterFrom:http://bdql.iteye.com/blog/291987 出于学习热情&#xff0c;翻译总结Emily H. Halili的《Apache JMeter》一书的部分内容。 JMeter的简介 可以肯定的是&#xff0c;JMeter至少符合以下几…

hdu3081 Marriage Match II(最大流)

转载请注明出处&#xff1a; http://www.cnblogs.com/fraud/ ——by fraud Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2410 Accepted Submission(s): 820 Problem Descriptio…

log4net 日志框架的配置

log4net 日志框架的简单配置 添加对log4net程序集的引用 选择程序集文件添加引用即可&#xff0c;需要注意的是需要添加相应程序版本的程序集&#xff0c;如果你的应用是基于.netFramework2.0&#xff0c;则应选择net 2.0版本的程序集 修改配置文件&#xff0c;配置log4net相…

CSS 设计指南(第3版) 初读笔记

第1章 HTML标记与文档结构 关于<title>标签&#xff1a;搜索引擎会给<title>标签中的文字内容赋予很高的权重。而且这些文字也会作为网页标题出现在搜索结果列表中。 无论你想了解哪个HTML元素&#xff0c;第一个要问的问题都应该是&#xff1a;它是块元素&#xf…

Objective-C中的@property和@synthesize用法

代表“Objective-C”的标志&#xff0c;证明您正在使用Objective-C语言 Objective-C语言关键词&#xff0c;property与synthesize配对使用。 功能&#xff1a;让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。 如&#xff1a; 1、在头文件中&#xff1a;…

Android用户界面程序设计示例

[例1]按钮和Toast弹出对话框 1 [例2] TextView文本框 &#xff08;1&#xff09; 3 [例3]TextView文本框 &#xff08;2&#xff09; 4 [例4]编辑框EditText 4 [例5]单选RadioButton 6 [例6]Toast的用法简介 8 [例7]多选checkbox 12 [例8]菜单Menu 14 …

Spring Thread Pool 线程池的应用

Spring and Java Thread example 扫扫关注“茶爸爸”微信公众号坚持最初的执着&#xff0c;从不曾有半点懈怠&#xff0c;为优秀而努力&#xff0c;为证明自己而活。Download it – Spring-Thread-Example.zip (22 KB)转自&#xff1a;http://www.mkyong.com/spring/spring-and…

Emule使用Upnp,解决Lowid和port not reachable的问题

路由器上钩选开启Upnp Emule->选择->扩展选项->Upnp&#xff0c; 服务器&#xff1a;【从URL更新】http://upd.emule-security.org/server.met转载于:https://www.cnblogs.com/zhyong/p/4422139.html

Android动画及滑动事件冲突解决(转载)

原文链接&#xff1a;http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路&#xff0c;也是重点和难点。 此篇转载文章思路清晰&#xff0c;结构合理&#xff0c;用图文混合的方式完美的讲解了动画和事件冲突…

使用临时表解决union和order by不能同时使用的问题

最近遇见了这样一个问题&#xff0c;有4张表&#xff0c;A&#xff08;单据&#xff09;表&#xff0c;B&#xff08;产品&#xff09;表&#xff0c;C&#xff08;产品类型&#xff09;&#xff0c;D&#xff08;单据产品关联表&#xff09;。 B表有唯一对应的类型C&#xff…

2.3线性表的链式存储和运算—双向链表

以上讨论的单链表的结点中只有一个指向其后继结点的指针域next&#xff0c;因此若已知某结点的指针为p&#xff0c;其后继结点的指针则为p->next &#xff0c;而找其前驱则只能从该链表的头指针开始&#xff0c;顺着各结点的next 域进行&#xff0c;也就是说找后继的时间性能…

通过栈(Stack)实现对树的遍历

说到数的遍历树&#xff0c;长期以来的第一印象都是通过递归去实现。然而今天看了某位前辈的代码&#xff0c;才发现使用栈去实现遍历是那么简单。理论上通过数组也是可以实现同等功能的&#xff0c;毕竟Stack也是通过数据去实现的。 package com.sysway.ui.widget;import jav…

StroyBoard中UICollectionView中添加Header和footer

到Storyboard中&#xff0c;选择collection view controller中的"Collection View"。在Attributes inspector中&#xff0c;选择"Section Header"和"Section Footer",一旦选中你就会在屏幕中看到下面的的显示&#xff1a; 最重要的是&#xff0c…

树形结构数据汇总查询解决方案+优化求助

最近遇到一个地区数据汇总的问题&#xff0c;地区下的地址呈树形结构&#xff0c;&#xff08;简化结构&#xff09;如A市下有B、C区&#xff0c;B区下有D、E街道。先要查询所有地区的人数&#xff08;包括子区域&#xff09;&#xff0c;如A的人数直属A的人数B的人数C的人数D的…

Dom4j 学习笔记

dom4j 是一种解析 XML 文档的开放源代码 XML 框架。dom4j下载地址 本文主要记载了一些简单的使用方法。 一、xml文件的解析 dom4j既可以解析普通的xml文件&#xff0c;也可以解析一个InputStream&#xff0c;先看看xml文件长什么样子&#xff1a; <books><book>&l…

交叉连接(CROSS JOIN)的实际应用

一次偶然的机会&#xff0c;使用到了万年不用的交叉连接&#xff08;CROSS JOIN&#xff09; 业务场景如下&#xff1a; 1、存在多个运营商&#xff0c;每个运营商下面都有各种类型的设备&#xff0c;不同运营商的设备不完全相同&#xff1b; 2、任何设备有且仅有两种用途‘…

C# xml文件读取与修改

c#读写xml文件已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; Code<?xml version"1.0" encoding"gb2312"?><bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Obero…

外连接从表过滤

1、使用left join时从表的过滤 WITH a AS( SELECT A aid FROM dual UNION ALL SELECT B FROM dual UNION ALL SELECT C FROM dual UNION ALL SELECT D FROM dual UNION ALL SELECT E FROM dual ), b AS( SELECT A aid,10 num,1 type FROM dual UNION ALL SELECT B,20,2 FROM d…