HTTP Digest Access Authentication Schema
HTTP Digest Access Authentication Schema
- 背景
- 介绍
- Challenge
- Response
- 摘要计算
- 流程
- 总结
- 参考
背景
本文内容大多基于网上其他参考文章及资料整理后所得,并非原创,目的是为了需要时方便查看。
介绍
HTTP Digest Access Authentication Schema,HTTP 摘要访问认证模式,是 HTTP 1.1 引入的替代 HTTP Basic Access Authentication Schema 的方案,为了解决 HTTP Basic Access Authentication Schema 中存在的安全问题:通过网络传输未加密的用户ID和密码。
HTTP Digest 同 HTTP Basic 一样,基于 challenge-response 认证机制实现身份认证方案,不同之处在于,HTTP Digest 不会直接发送明文密码,而是采用 checksum 检验方式对请求进行验证。
HTTP Digest Access Authentication 中的 challenge 使用一个 nonce 值,一个有效的 response 包含的 checksum 由 用户ID、密码、nonce、HTTP请求方法 和 HTTP请求URI 通过算法生成(默认 MD5),这样就永远不会以明文方式发送密码。
Challenge
服务器发送的 challenge:Digest digest-challenge,其中 Digest 指明服务器需要的访问认证方式,digest-challenge 格式如下:
realm | [domain] | nonce | [opaque] | [stale] | [algorithm] | [qop-options] | [auth-param]
其中 realm 和 nonce 这两个字段是必须的。字段说明:
realm:一个标识受保护资源的字符串,指示用户应该使用哪个用户ID和密码进行认证。此字符串至少应该包含执行认证的主机名称,还可以另外指示哪些用户集合可能具有访问权限,如:registered_users@somehost。domain: 授权访问的URI列表,每项之间以空格符分隔。nonce:服务器每次返回401 Unauthorized时生成的唯一随机数,通常推荐使用 Base64 编码或十六进制数,实际依赖于服务器的具体实现。服务器向客户端发送 challenge 时会附带一个nonce随机数,客户端返回的 response 中摘要值计算会用到此nonce值。nonce的存在增加了破解密码的难度,防范了 中间人 及 恶意服务器 等攻击类型。RFC 2617建议生成随机数的计算公式:nonce=Base64(timestamp MD5(timestamp:ETag:private-key))。opaque:服务器指定的一个数字字符串,客户端后续发送的对相同域(realm)的访问请求中,HTTP Headers 的Authorization应带有此值(保持不变),通常推荐使用 Base64 编码或十六进制数据。stale:一个标识,表明客户端的上一请求中使用了过期的nonce值。如果为TRUE则提示客户端使用新的加密response值重试请求。只有当服务器收到一个nonce过期的请求,但该nonce有一个有效的摘要(表明客户端知道正确的用户ID和密码)时,服务器才应该将stale设置为TRUE。algorithm:一个字符串,指明生成摘要和校验和(checksum)的算法,如果没有设置则默认采用 MD5。qop:quality of protection,质量保护,包含auth和auth-int两种策略,默认auth,auth-int增加了报文完整性检测。auth-param:为未来扩展保留。
Response
客户端发送的 response:Digest digest-response,其中 Digest 指明客户端遵从的访问认证方式,digest-response 格式如下:
username | realm | nonce | digest-uri | response | [algorithm] | [cnonce] | [opaque] | [message-qop] | [nonce-count] | [auth-param]
字段说明:
username:用于特定域(realm)认证的用户ID。digest-uri:请求的相对URI,因为代理在传输过程中可能修改请求,所以此处重复说明。response:摘要,是由32位十六进制数字组成的字符串,证明客户端知道密码。qop:同 challenge 中qop用途一致,必须是服务器发送的 challenge 中指明支持的qop之一,此值会影响摘要计算。cnonce:客户端随机数,使得双方都可以查验对方的身份,并对消息的完整性提供一些保护。nc:nonce计数器,是一个十六进制的数值,表示同一nonce下客户端发送出请求的数量,在第一个 response 请求中nc=00000001,目的是让服务器保持这个计数器的一个副本,以便检测重复的请求。auth-param:为未来扩展保留。
摘要计算
response 的值由三步计算而成,使用冒号作为分隔符合并多个数值:
- 对用户ID、域(realm)及密码的合并值计算MD5哈希,结果称为
HA1(安全相关)。- 如果算法是 MD5,则
A1=<userid>:<realm>:<password> - 如果算法是 MD5-sess,则
A1=MD5(<user>:<realm>:<password>):<nonce>:<cnonce>
HA1 = MD5(A1) = MD5(username:realm:password) - 如果算法是 MD5,则
- 对 HTTP 方法以及 URI 的摘要的合并值计算 MD5 哈希,如
GET和/dir/index.html,结果称为HA2(报文相关)。A2表示是与报文自身相关的信息,比如 URL,A2加入摘要计算的主要目的是有助于防止反复。- 若
qop为指定或指定为auth,则A2=<request-method>:<uri-directive-value>
HA2 = MD5(A2) = MD5(method:digestURI)- 若
qop指定为auth-int,则A2=<request-method>:<uri-directive-value>:MD5(<request-entity-body>)
HA2 = MD5(A2) = MD5(method:digestURI:MD5(entityBody)) - 若
- 对
HA1、nonce、nc、cnonce、qop以及HA2的合并值计算 MD5 哈希,结果即为客户端提供的 response 值,计算规则:- 若
qop没有指定,则response = MD5(HA1:nonce:HA2) - 若
qop指定为auth或auth-int,则response = MD5(HA1:nonce:nonceCount:clientNonce:qop:HA2)
- 若
流程

- 客户端请求访问受保护资源;
- 服务端接收到请求后,在请求头部(HTTP Request Headers)中未找到
Authorization,返回401 Unauthorized,返回响应头(HTTP Response Headers)中带有WWW-Authenticate:WWW-Authenticate: Digest realm="testrealm@host.com", qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41" - 客户端收到服务器响应后,使用
用户ID、密码、nonce、HTTP请求方法和HTTP请求URI,通过指定算法(如默认的 MD5)计算生成一个摘要,将此摘要与认证请求一起发送给服务器进行认证。客户端发送的认证请求中包含 Authorization 头信息,格式如下:
其中Authorization: Digest username="Mufasa", realm="testrealm@host.com", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/dir/index.html", qop=auth, nc=00000001, cnonce="0a4f113b", response="6629fae49393a05397450978507c4ef1", opaque="5ccc069c403ebaf9f0171e9517f40e41"response的计算过程:HA1 = MD5("Mufasa:testrealm@host.com:Circle Of Life") = 939e7578ed9e3c518a452acee763bce9 HA2 = MD5("GET:/dir/index.html") = 39aff3a2bab6126f332b942af96d3366 response = MD5("939e7578ed9e3c518a452acee763bce9:dcd98b7102dd2f0e8b11d0f600bfb0c093:00000001:0a4f113b:auth:39aff3a2bab6126f332b942af96d3366") = 6629fae49393a05397450978507c4ef1 - 服务器收到客户端的认证请求后,使用存储的密码和发送的参数计算摘要,如果与客户端发送的摘要匹配则认证成功。成功认证后,服务器可以返回
Authentication-Info响应头,格式:
字段说明:Authentication-Info: nextnonce | [message-qop] | [response-auth] | [cnonce] | [nonce-count]nextnonce:如果服务器返回nextnonce,则客户端下次请求的头信息中Authorization的nonce需要设置为此值,否则可能导致服务器要求重新认证。message-qop:服务器应用与响应的qop,auth表示认证,auth-int表示完整性认证保护,应该与对应的客户端请求中qop值一致。response-auth:支持双向身份认证,即表明服务器知道用户的密码。cnonce:同 response 中cnonce。nonce-count:同 response 中nc。
注意:
- 后续客户端可以提交新请求,重复使用服务器密码随机数(
nonce),服务器仅在每次响应401 Unauthorized时发送新的nonce。 - 后续请求中,十六进制请求计数器(
nc)必须比前一次要大,否则攻击者可以使用同样的认证信息重放已有的请求。 - 服务器应当记住最近生成的密码随机数(
nonce),也可以为每一个密码随机数分配一个过期时间,如果客户端请求中携带的是过期的密码随机数,则服务器响应401 Unauthorized,并在digest-challenge中添加stale=TRUE,表明客户端应该使用新的密码随机数重发请求。
总结
HTTP Digest 相比于 HTTP Basic 的优势:
- 不发送明文密码;
- 使用随机数
nonce防止重放攻击。
HTTP Digest 的缺陷:
- 如果摘要数据被攻击者截获,密码可能会被离线破解;
- 不提供消息完整性和机密性保护,最好配合 HTTPS 使用。
参考
[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication](RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication)
相关文章:
HTTP Digest Access Authentication Schema
HTTP Digest Access Authentication Schema 背景介绍ChallengeResponse摘要计算流程总结参考 背景 本文内容大多基于网上其他参考文章及资料整理后所得,并非原创,目的是为了需要时方便查看。 介绍 HTTP Digest Access Authentication Schemaÿ…...
MySql超大Sql文件导入效率优化
对于MySQL中超大SQL文件的导入,效率优化是至关重要的,因为不当的操作可能导致导入过程耗时过长,甚至失败。以下是一些建议来优化MySQL超大SQL文件的导入效率: 调整max_allowed_packet参数: 这个参数定义了MySQL服务器和…...
【leetcode1944--队列中可以看到的人数】
有n人排成一个队列,从左到右编号为0到n-1,height数组记录每个人的身高,返回一个数组,记录每个人能看到几个人。 类比:山峰问题,高的后面的矮的看不见。 从后往前,最后一个元素入栈,…...
基于51单片机的室内空气质量检测-仿真设计
本设计是基于单片机的空气质量检测设计,主要实现以下功能: 可实现通过SGP30测量二氧化碳及甲醛浓度,当超过设置的最大值时,进行报警及通风和净化空气处理 可实现通过MQ-4测量甲烷浓度,当超过设置的最大值时࿰…...
day22二叉树part08 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
**235. 二叉搜索树的最近公共祖先 ** 这里利用上了二叉搜索树的特性,从上到下遍历,最近的公共祖先一定是满足p->val < root->val < q->val的 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, Tr…...
【Linux】Linux环境基础开发工具_2
文章目录 四、Linux环境基础开发工具2. vimvim的常见模式 未完待续 四、Linux环境基础开发工具 2. vim vim 是Linux下的一款 多模式编辑器 ,可以用来写代码,是 vi 的升级版。 此时无法输入,需要切换模式。 如上图,i 就是切换成…...
长方形边框 上方中间有缺口 css
<div class"text_6">大234234师掌4234柜</div><div class"text-wrapper_1"><span class"paragraph_1">四川慧创云戈科技有限公司推出的“大师掌柜”,是一个以餐饮外卖为切入口,专注实体小店新零售…...
2024-05-29 架构-程序设计-思考
摘要: 最近在抽出时间做一个数据库的driver, 其中有些问题驱动的软件代码的思考,是很值得回味的。 做的系统,所思考的问题,所设计的解决方案,其实都是可以看作是对解决问题方式。而不仅仅是某个类库的API的使用,某个…...
关于网络的基础知识
大家好,在当今数字时代,网络已经成为我们生活中不可或缺的一部分,它连接着世界的每一个角落,让信息、资源和人们彼此之间无阻碍地交流和共享。然而,对于许多人来说,网络仍然是一个神秘而复杂的领域…...
CTF网络安全大赛简单web题目:eval
题目来源于:bugku 题目难度:简单 一道简单web的题目 题目源代码: <?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> 这个PHP脚本有几个关键部分,但…...
Linux通过 SSH 使用 rsync 进行文件传输
目录 目的整体思路ssh建立连接A服务器上的操作输入 ssh-keygen 生成密钥对查看公钥 B服务器上的操作设置公钥认证 A服务器上的操作使用SSH登录进行测试 同步数据知识拓展SSH(Secure Shell)rsync(Remote Sync) 目的 使用SSH&#…...
【保姆级介绍下Foxmail 邮箱】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
ABAP MD04增强排除MRP元素
场景 MD04跑出来很多MRP元素,用户想手工控制某些MRP元素不参与运算 分析 增强点还蛮好找的,控制MRP元素是否参与运算用下面的se19三代增强点就可以,打个断点看下MD04进的哪个增强点就行 旧版本的用这个:MD_CHANGE_MRP_DATA 新…...
构建一个简单的情感分析器:使用Python和spaCy
构建一个简单的情感分析器:使用Python和spaCy 引言 情感分析是自然语言处理(NLP)中的一项重要技术,它可以帮助企业和研究人员理解公众对特定主题或产品的看法。 在本篇文章中,我们将使用Python编程语言和 spaCy 库来构…...
数据库设计实例---学习数据库最重要的应用之一
一、引言【可忽略】 在学习“数据库系统概述”这门课程时,我一直很好奇,这样一门必修课,究竟教会了我什么呢? 由于下课后,,没有拓展自己的眼界,上课时又局限于课堂上老师的讲课水平,…...
数据结构算法题day05
数据结构算法题day05 题目算法思想代码运行代码 题目 从有序表中删除所有其值重复的元素,使表中所有元素的值均不同。算法思想 第一个元素(不重复)依次向后扫描,不重复就保留,重复(不保留)就删…...
关于《Java并发编程之线程池十八问》的补充内容
一、写在开头 在上一篇文章我们写《Java并发编程之线程池十八问》的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充。 二、Runnable vs Callable 在创建线程的时候,一般会选用 Runnable 和 Callable 两种方式。 【源码对…...
扒出秦L三个槽点,我不考虑买它了
文 | Auto芯球 作者 | 雷慢 比亚迪的有一个王炸“秦L”,再一次吸引了我注意力, 我上一辆车刚卖不久,最近打算买第二辆车, 二手车和新车都有在看, 我又是一个坚定的实用主义者, 特别是现在的经济环境不…...
【408真题】2009-28
“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…...
LeetCode---链表
203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 代码示例1:(直接使用原来的链表来进行移除节点操作) //时间复杂度: O(n) //空间复杂度: O(1) class Solu…...
Win11装Anaconda总卡住?试试这个Miniconda曲线救国法(附清华源配置)
Win11装Anaconda总卡住?试试这个Miniconda曲线救国法(附清华源配置) 最近在Windows 11上安装Anaconda时,不少开发者都遇到了进度条卡死或包提取失败的困扰。这个问题看似简单,却让很多数据科学初学者和Python开发者头疼…...
从零开始:Windows与Ubuntu20.04双系统安装全指南
1. 为什么需要双系统? 对于很多刚接触Linux的朋友来说,直接在物理机上安装Ubuntu可能会有点担心。毕竟Windows用习惯了,万一Ubuntu用不顺手怎么办?这时候双系统就是最好的解决方案。我自己的第一台开发机就是WindowsUbuntu双系统&…...
告别环境配置劝退!跨平台研发环境搭建终极指南:从零基础到工程化落地
对于每一位开发者而言,研发环境是所有代码的「第一生产车间」,是技术成长的起点。但行业内一个非常普遍的现状是:超过80%的编程新手,在入门的第一周就会栽在环境配置上。 下载超时、权限报错、版本冲突、command not found玄学问…...
3步打造专属音乐库:开源工具解锁无损音质体验
3步打造专属音乐库:开源工具解锁无损音质体验 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 作为一款功能强大的开源音乐资源工具,洛雪音乐音源整合了全网海量音乐资源&am…...
Phi-3 Forest Lab企业应用:金融研报关键数据提取+趋势归纳AI助理
Phi-3 Forest Lab企业应用:金融研报关键数据提取趋势归纳AI助理 1. 金融研报处理的行业痛点 金融分析师每天需要处理大量研报,从中提取关键数据并归纳趋势。传统人工处理方式面临三大挑战: 效率瓶颈:阅读一份20页的研报平均耗时…...
技术赋能B端拓客:号码核验行业的革新与实践,氪迹科技法人号码核验系统,阶梯式价格
2026年,随着B端市场竞争的持续加剧,“精准获客、降本增效”已从行业口号转变为企业生存发展的核心诉求,号码核验作为B端拓客全流程的前置关键环节,其服务质量直接决定了拓客效率、人力效能与投入回报比,成为影响企业拓…...
如何将MacBook刘海变成你的私人文件中转站:NotchDrop完整使用指南
如何将MacBook刘海变成你的私人文件中转站:NotchDrop完整使用指南 【免费下载链接】NotchDrop Use your MacBooks notch like Dynamic Island for temporary storing files and AirDrop 项目地址: https://gitcode.com/gh_mirrors/no/NotchDrop 你是否曾觉得…...
Qwen3-TTS-VoiceDesign一文详解:speech_tokenizer作用机制与语音表征可视化
Qwen3-TTS-VoiceDesign一文详解:speech_tokenizer作用机制与语音表征可视化 1. 引言:从文字到声音的魔法转换 你有没有想过,为什么现在的AI语音合成听起来越来越像真人?为什么只需要用文字描述"温柔的成年女性声音"&a…...
Qwen3-ASR-1.7B问题解决:服务重启、音频格式兼容全攻略
Qwen3-ASR-1.7B问题解决:服务重启、音频格式兼容全攻略 1. 引言:语音识别服务的稳定性挑战 语音识别技术正在改变我们处理音频内容的方式,但在实际部署中,服务稳定性和格式兼容性常常成为绊脚石。Qwen3-ASR-1.7B作为阿里云通义千…...
CVPR/ICML/TMI顶会风向标:医学图像分割三大落地范式,从模型精调到临床闭环
1. 医学图像分割的临床落地挑战与范式转变 医学图像分割作为AI在医疗领域最成熟的应用之一,正经历着从实验室精度竞赛到临床实用落地的关键转型。我在参与多家三甲医院PACS系统智能化改造时发现,临床医生对算法的需求呈现明显的"三高"特征&…...
