`
izuoyan
  • 浏览: 8943401 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTTP的认证模式

阅读更多

SIP类似Http协议。其认证模式也一样。Http协议(RFC 2616 )规定可以采用Base模式和摘要模式(Digest schema)。RFC 2617 专门对两种认证模式做了规定。RFC 1321 是MD5标准。Digest对现代密码破解来说并不强壮,但比基本模式还是好很多。MD5已经被山东大学教授找到方法可以仿冒(我的理解),但现在还在广 泛使用。

1.最简单的攻击方式

  如果网站要求认证,客户端发送明文的用户名密码,那网络上的者可以轻而易举的获得用户名密码,起不到安全作用。我上学时曾在科大实验室局域 网内别人的科大BBS的密码,发现BBS的用户名密码居然是明文传输的。那种做贼的心虚和做贼的兴奋让人激动莫名。偷人钱财会受到道德谴责,偷人密码 只会暗自得意忘形。比“窃书不算偷”还没有罪恶感。因此你的用户名和密码明文传输的话,无异将一块肥肉放在嘴馋的人面前。现在很多ASP网站的认证都将用 户名和密码用MD5加密。MD5是将任意长度的字符串和128位的随机数字运算后生成一个16byte的加密字符串。因此者抓住的是一团乱码。但是, 这有一个问题:如果者就用这团乱码去认证,还是可以认证通过。因为服务器将用户名密码MD5加密后得到的字符串就是那一团乱码,自然不能区别谁是合法 用户。这叫重放攻击(replay attack)。这和HTTP的基本认证模式差不多。为了安全,不要让别人不劳而获,自然要做基本的防范。下面是Http协议规定的两种认证模式。

2.基本认证模式

  客户向服务器发送请求,服务器返回401(未授权),要求认证。401消息的头里面带了挑战信息。realm用以区分要不同认证的部分。客户端收到401后,将用户名密码和挑战信息用BASE64加密形成证书,发送回服务器认证。语法如下:

challenge = "Basic" realm
credentials = "Basic" basic-credentials

示例:

认证头: WWW-Authenticate: Basic realm="zhouhh@mydomain.com"
证书:Authorization: Basic QsdfgWGHffuIcaNlc2FtZQ==


3.摘要访问认证

  为了防止重放攻击,采用摘要访问认证。在客户发送请求后,收到一个401(未授权)消息,包含一个Challenge。消息里面有一个唯一的字 符串:nonce,每次请求都不一样。客户将用户名密码和401消息返回的挑战一起加密后传给服务器。这样即使有,他也无法通过每次认证,不能重放攻 击。Http并不是一个安全的协议。其内容都是明文传输。因此不要指望Http有多安全。

语法:

challenge = "Digest" digest-challenge

digest-challenge = 1#( realm | [ domain ] | nonce |
[ opaque ] |[ stale ] | [ algorithm ] |
[ qop-options ] | [auth-param] )


domain = "domain" "=" <"> URI ( 1*SP URI ) <">
URI = absoluteURI | abs_path
nonce = "nonce" "=" nonce-value
nonce-value = quoted-string
opaque = "opaque" "=" quoted-string
stale = "stale" "=" ( "true" | "false" )
algorithm = "algorithm" "=" ( "MD5" | "MD5-sess" |
token )
qop-options = "qop" "=" <"> 1#qop-value <">
qop-value = "auth" | "auth-int" | token


realm:让客户知道使用哪个用户名和密码的字符串。不同的领域可能密码不一样。至少告诉用户是什么主机做认证,他可能会提示用哪个用户名登录,类似一个Email。
domain:一个URI列表,指示要保护的域。可能是一个列表。提示用户这些URI采用一样的认证。如果为空或忽略则为整个服务器。
nonce: 随机字符串,每次401都不一样。跟算法有关。算法类似Base64加密:time-stamp H(time-stamp ":" ETag ":" private-key) 。time-stamp为服务器时钟,ETag为请求的Etag头。private-key为服务器知道的一个值。
opaque:服务器产生的由客户下去请求时原样返回。最好是Base64串或十六进制字符串。
auth-param:为扩展用的,现阶段忽略。
其他域请参考RFC2617。

授权头语法:

credentials = "Digest" digest-response
digest-response = 1#( username | realm | nonce | digest-uri
| response | [ algorithm ] | [cnonce] |
[opaque] | [message-qop] |
[nonce-count] | [auth-param] )

username = "username" "=" username-value
username-value = quoted-string
digest-uri = "uri" "=" digest-uri-value
digest-uri-value = request-uri ; As specified by HTTP/1.1
message-qop = "qop" "=" qop-value
cnonce = "cnonce" "=" cnonce-value
cnonce-value = nonce-value
nonce-count = "nc" "=" nc-value
nc-value = 8LHEX
response = "response" "=" request-digest
request-digest = <"> 32LHEX <">
LHEX = "0" | "1" | "2" | "3" |
"4" | "5" | "6" | "7" |
"8" | "9" | "a" | "b" |
"c" | "d" | "e" | "f"

response:加密后的密码
digest-uri:拷贝Request-Line,用于Proxy
cnonce:如果qop设置,才设置,用于双向认证,防止攻击。
nonce-count:如果服务器看到同样的计数,就是一次重放。

示例:

401响应: HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
再次请求:
Authorization: Digest username="Mufasa",
realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/dir/index.html",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"

4.比较基本认证和摘要访问认证都是很脆弱的。基本认证可以让者直接获得用户名和密码,而摘要访问认证者只能获得一次请求的文档。

分享到:
评论

相关推荐

    模拟Digest认证的登录demo

    一个模拟http 401 Digest认证的登录海康NVR抓取摄像头列表的小demo

    RestTemplate如何通过HTTP Basic Auth认证.docx

    首先,HttpBasic模式要求传输的用户名密码使用Base64模式进行加密。如果用户名是 "admin" ,密码是“ admin”,则将字符串"admin:admin"使用Base64编码算法加密。加密结果可能是:YWtaW46YWRtaW4=。 然后,在...

    这可能是史上功能最全的Java权限认证框架!

    这可能是史上功能最全的Java权限认证框架! Sa-Token 功能一览: 登录认证 —— 单端登录、多端登录、同端互斥登录、七天内免登录 权限认证 —— 权限认证、...Basic认证 —— 一行代码接入 Http Basic 认证 ......

    AC高级B卷66分文字.docx

    短信认证支持短信猫,短信网关和webservice模板(即http接口) B.SSL产品线使用的GSM短信猫有两种,新式GSM短信猫(背板黑色)和老式GSM短信猫(背板为银色),AC同时支持这两种GSM短信猫 C.短信认证支持mac/...

    MVC用户认证实例

    这个资源是与我的一篇介绍MVC模式的用户认证实例相配套的war包。http://blog.csdn.net/island20/archive/2007/09/06/1775060.aspx&lt;br&gt;只要大家电脑上有tomcat5.5版本的服务器(其他版本的我还没试验过),只要把这个...

    微服务框架搭建 基于oauth2 认证中心服务

    #微服务框架认证授权中心 项目采用spring cloud、oauth2、spring security # 依赖环境 JDK8、 Maven、 Mysql、 Redis 、nacos 注册中心采用阿里巴巴 nacos 缓存使用的是redis oauth2数据存储在数据库中 ...

    nginx实现http双向验证.docx

    HTTP双向认证过程中,每个用户都需要有自己惟一的证书,通过CA的级联证书模式,使所有的证书都对应同一个根证书。这样需要自己生成一套CA根级证书,再借助其生成二级证书作为client证书。此时client私钥签名不仅可以...

    二十三种设计模式【PDF版】

    技术认证,但是如果你没有学习掌握 GoF 设计模式,只能说明你还是一个技工。 在浏览《Thingking in Java》(第一版)时,你是不是觉得好象这还是一本 Java 基础语言书籍?但又不纯粹是,因为这本书的作 者将面向对象...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    http://blog.csdn.net/fksec/article/details/7888251 对应的书籍资料见: OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053) 共2部分:此为第001部分 基本信息 原书名: OCA/OCP Oracle...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    向公司外部提供的http/api接口,推荐使用“错误码”方式返回异常或者错误信息。 B .对于应用内部的方法调用,推荐使用“抛出异常”的方式处理异常或者错误信息。 C .跨应用的RPC调用,推荐使用将“错误码”和...

    【Java学习+面试宝典】 一份涵盖大部分Java程序员所需要掌握的核心知识

    HTTP API 认证授有哪些方法? Java 技术栈中的技术点缩写 面试题: 【美团】Java 岗 154 道面试题(2.0版) 100 期 Java 面试题汇总 文章推荐: Java后端优质文章推荐 设计模式: 从零开始单排学设计模式「UML...

    hope-oauth:最精简的oauth2授权认证服务:认证服务,资源服务,授权码模式,数据库持久化令牌,客户端

    Oauth2-服务 技术栈:Spring-Boot2 Oauth2 Spring-Security 开发人员:低调小熊猫(aodeng) 使用文档 Oauth2支持的授权方式目前有...http://localhost:8080/oauth/authorize?response_type=code&scope=read write&clie

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 ...OAuth2.0认证的四种模式?它们的大体流程是什么? Spring cloud Security OAuth2包括哪些组件?职责? 分布式系统认证需要解决的问题? 掌握学习方法,掌握思考方式。

    重新封装zend_soap实现http连接安全认证的php代码

    复制代码 代码如下: &lt;?... protected $_password = ”; public function __construct($wsdl = null, array $options = null) { parent::__construct($wsdl,$options); if(isset($options[‘login’])){ $this-&gt;_...

    网络设备安全基线.xlsx

    全局模式下启用如下命令: 可用于serial"telnet"ssh"http"enable认证 Pixfirewall(config)#username username {nopassword"password password [encrypted]} [privilege level] Pixfirewall(config)#aaa ...

    鹰:HTTP密钥持有人认证方案

    HTTP密钥持有者认证方案。 协议和JS API的文档位于。 所有权变更 曾经是hueniverse/hawk ,后来被誉为hawk 。 然后,在7.0.10发布之后,将其移至hapijs/hawk存储库并以@hapi/hawk发行。 在发布版本8.0.0之后,Hapi...

    SQL忘记密码修改sql数据库密码

    一、在sql server 2005下,从Windows身份验证方式修改为混合身份验证模式 方法二:(如果已经禁用了Windows认证登录的情况下记忆sa密码) 以下注册表键: ...http://support.microsoft.com/kb/322336/zh-cn

    Thingsboard入门指南.ppt

    设备接入:MQTT、CoAP、HTTP ...集群模式:Zookeeper用于服务发现,一致性哈希保证消息的扩展性和可用性。 安全:SSL用于HTTP和MQTT 设备认证:Token和X.509 第三方工具:AKKA【Actor】、Zookeeper、gRPC、Cassandra

Global site tag (gtag.js) - Google Analytics