HTTP通讯安全中的Digest摘要认证释义与实现

2023-05-16

摘要

出于安全考虑,HTTP规范定义了几种认证方式以对访问者身份进行鉴权,最常见的认证方式之一是Digest认证

Digest认证简介

        HTTP通讯采用人类可阅读的文本格式进行数据通讯,其内容非常容易被解读。出于安全考虑,HTTP规范定义了几种认证方式以对访问者身份进行鉴权,最常见的认证方式之一是Digest认证。Digest是一种加密认证方式,通讯中不会传输密码信息,而仅采用校验方式对接入的请求进行验证。

        Digest认证支持的加密算法有:SHA256,SHA512/256,MD5。上述这几种算法都是由哈希函数来生成散列值,其加密过程为单向计算,请求方无法反算出密码明文。这里需要强调的是,HTTP认证像其它认证方式一样仅仅对资源访问进行鉴权,但无法保证通讯过程的安全。

通讯协商过程

发起请求

# <<127.0.0.1:50315
GET / HTTP/1.1
Host: 127.0.0.1:9090


质询

# >>127.0.0.1:50315
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="http-auth@mozicoder.org",
              nonce="M0P1F4D75VG1IFAJNKA7YG5FW1WRMGCP",
              opaque="IGH008EZM3E277G3BXVGWTABKRE6URHK",
              algorithm=MD5,
              qop="auth"
Server: Mozi.HttpEmbedded/1.4.7.0
 

请求验证

# >>127.0.0.1:50325
GET / HTTP/1.1
Host: 127.0.0.1:9090
Authorization: Digest realm="http-auth@mozicoder.org",
            username="admin",
            nonce="M0P1F4D75VG1IFAJNKA7YG5FW1WRMGCP",
            uri="/", 
            algorithm=MD5,
            response="1cfe3a00105362cbe5174cb525784f4f",
            opaque="IGH008EZM3E277G3BXVGWTABKRE6URHK",
            qop=auth,
            nc=00000001, 
            cnonce="0698175c27a8bcee"

校验并返回

# >>127.0.0.1:50325
HTTP/1.1 200 OK
Server: Mozi.HttpEmbedded/1.4.7.0

Digest认证的参数

服务端

realm

认证域。明文信息,用于提示客户端使用哪些用户名和密码。这个值可以设置成任意字符串,建议不要超出ASCII范畴。建议设置成 {string}@{domain} 这种格式,例如:http-auth@mozicoder.org。

domain

受保护的域名信息。以空格为分割,可以是绝对地址,也可以是相对路径。

nonce

随机数。用于参与加密运算,其值取决于服务端如何生成这个参数值。推荐使用B64字符串或HEX字符串。服务端可通过算法实现none的有效时间来防止重放攻击。

opaque

透传字符串。客户端在请求中附带同样的参数值。

stale

随机数是否过期。用于指示客户端认证信息中的随机数是否过期。

algorithm

算法类型。算法类型包括SHA256,SHA512/256,MD5。如果参数列表中没有出现这个值,则默认使用MD5。建议使用MD5。

qop

加密质量。可选值为auth,auth-int。具体区别请文章中的算法实现。

charset

字符集。其唯一可以设置的值为"UTF-8"。一般不设置这个值,这个参数意义不大。

userhash

是否将用户名也进行加密。取值范围:true|false,默认不进行设置,也就是false。

客户端

realm

认证域。明文信息,用于提示客户端使用哪些用户名和密码。使用服务端返回的字符串。

response

加密结果。此值是加密检验的最终对比对象。

username

用户名。

username*

扩展的用户名。当用户名中出现了不符合ABNF范式的字符串的时候,使用这个参数设置用户名和密码,同时也要满足userhash=false这个条件。

uri

路径信息。指示当前正在请求的路径信息,值为相对于根路径的相对路径。

qop

加密质量。可选值为auth,auth-int。具体区别请文章中的算法实现。

cnonce

客户端随机数。用于参与加密运算,其值取决于客户端如何生成这个参数值。推荐使用B64字符串或HEX字符串。服务端可通过算法实现none的有效时间来防止重放攻击。

nc

客户端请求校验的次数。是一个16进制的数值,表示同一nonce下客户端发送出请求的数量。

userhash

是否将用户名也进行加密。取值范围:true|false,默认不进行设置,也就是false。注意:上述参数值仅username, realm, nonce, uri,response, cnonce, and opaque这几个字段可以使用""进行包裹。

Digest认证的验证算法

response=H(HA1:HD:HA2)

//如果加密算法以"-sess"结束

if  !algorithm.EndWith("-sess"){

        HA1=H(username:realm:password)

}else{

        HA1=H(username:realm:password: nonce:cnonce)

}

HD=nonce:nc:cnonce:qop

if  qop!="auth-int"{

        HA2=H(Method:url)

}else{

        HA2=H(Method:url:Body-Length)

}

 

参考文档

[RFC7616]    R. Shekh-Yusef, Ed.D. Ahrens,S. Bremer,"HTTP Digest Access Authentication"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP通讯安全中的Digest摘要认证释义与实现 的相关文章

  • 构建可扩展 Web 应用程序的书籍? (数据库性能/调优、网络、一般性能等)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 从计算机科学专业毕业并作为一名从事 Web 应用程序的软件工程师进入 现实世界 后 我对如何正确扩展 W
  • 尝试将过滤器添加到 Grizzly+Jersey 应用程序时出现问题

    我有这个服务器初始化类 package magic app main import org glassfish grizzly http server HttpServer import org glassfish jersey grizz
  • HTTP 查询字符串和 []

    PHP 使用 在查询参数名称中 以确保多次出现的参数都出现在 GET超全局变量 否则只出现最后一次出现的情况 还有其他软件可以做到这一点吗 但从RFC 3986 https www rfc editor org rfc rfc3986 以及
  • WCF - 进行多次调用时随机客户端超时

    我有一个WPF客户端通过以下方式请求数据WCF服务托管于IIS 7 服务方法调用存储过程 SQL 2012 using EF检索一些数据 由于需要加载大量数据 因此客户端会多次调用服务方法 以 分解 数据加载并避免大量负载和超时 我们使用生
  • 使用 PushStreamContent 从 HTTPClient 上传

    我想将大量数据上传到网络服务器from客户端机器 我直接跳到 PushStreamContent 这样我就可以直接写入流 因为结果的大小各不相同 并且可能相当大 流程如下 User runs query gt Reader Ready Ev
  • 减少1000张图片的HTTP请求?

    我知道这个问题可能听起来有点疯狂 但我想也许有人会想出一个聪明的主意 假设您在一个 HTML 页面上有 1000 个缩略图 图像大小约为5 10 kb 有没有办法在单个请求中加载所有图像 以某种方式将所有图像压缩到一个文件中 或者您对该主题
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • 使用 Google OAuth2.0 时出现错误请求

    从 Salesforce 中使用 Google OAuth 时 我收到 400 错误请求 以下错误与无效的 grant type 有关 但如果您查看 使用刷新令牌 下的文档 您会发现它是正确的 https developers google
  • POST 后使用 303 重定向以避免“网页已过期”:如果字节数超过 GET 请求可以处理的字节数,它会工作吗?

    我想解决 网页已过期 问题 首先 我刚刚将 POST 更改为 GET 但这导致出现错误 我的 HTTP 请求超出了 GET 的最大大小 所以 现在我想尝试下面链接中描述的技术 帖子 303 重定向 但是我仍然会遇到相同的大小限制问题吗 对
  • 按照约定应返回哪些 REST PUT/POST/DELETE 调用?

    根据 REST 意识形态 PUT POST DELETE 请求的响应正文中应该包含什么 返回码呢 是HTTP OK enough 如果有的话 这种约定的原因是什么 我发现了一篇描述 POST PUT 差异的好文章 发布与放置 http ww
  • 在 iOS 中,http 204 响应返回空白页面,有办法阻止这种情况吗?

    以前可能有人问过这个问题 但我似乎找不到解决方案 所以如果是这种情况 我深表歉意 我正在开发一个使用express的简单节点应用程序 其中一个帖子路由返回 http 204 并发送它 下面是我的代码 router post id funct
  • .net core 2.0代理请求总是导致http 407(需要代理身份验证)

    我正在尝试通过 net core 2 0 Web 应用程序中的 WebProxy 发出 HTTP 请求 我得到的代码在 net框架中运行良好 所以我知道 相信 这不是环境问题 我也尝试使用两者来发出请求HttpWebRequest and
  • ASP.NET Core URL 重写

    我正在尝试将我的网站从 www 重定向到非 www 规则以及 http 到 https https example com https example com 在中间件中 我曾经在 web config 中进行这些重定向更改 例如
  • RestSharp RestClient的默认超时值是多少?

    任何人都知道默认超时值休息锐利 https github com restsharp 休息客户端 RestSharp 在底层使用 HttpWebRequest 它有一个默认超时 https msdn microsoft com en us
  • 面向服务的架构 - AMQP 或 HTTP

    一点背景 非常大的整体 Django 应用程序 所有组件都使用相同的数据库 我们需要分离服务 以便我们可以独立升级系统的某些部分而不影响其余部分 我们使用 RabbitMQ 作为 Celery 的代理 现在我们有两个选择 使用 REST 接
  • python 2.7 中的 HTTP 2 请求

    在 python 中向 HTTP 1 和 HTTP 2 发出请求有什么区别吗 我可以像这样在 python 中进行 HTTP 1 x 调用 url http someURL values param1 key param2 key2 dat
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • HTTP Header Key 可以重复吗?

    在 JAVA HttpUrlConnection 中 请求 Header 设置的主要逻辑代码如下 public synchronized void set String k String v for int i nkeys i gt 0 i
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • 从 PCAP 嗅探重建数据

    我试图通过 libpcap 嗅探 HTTP 数据 并在处理 TCP 有效负载后获取所有 http 内容 标头 有效负载 根据我的讨论编写 http 嗅探器 或任何其他应用程序级嗅探器 https stackoverflow com ques

随机推荐

  • Linux环境下搭建git服务器和TortoiseGit客户端 ssh key测试

    Linux环境下搭建git服务器和TortoiseGit客户端 ssh key测试 1 git的安装2 用户和 ssh目录创建3 本地创建公钥私钥4 在服务器端导入本地公钥5 开启服务器中的RSA认证6 创建仓库7 本地克隆 1 git的安
  • RealSense技术在SR300摄像头上的应用

    RealSense技术在SR300摄像头上的应用 一 实感摄像头 1 RealSense技术 在计算机的发展过程中我们始终没有抛弃键盘和鼠标 xff0c 前几年win8和触屏的配合形成 了一种新的电脑使用模式 xff0c 但是依然没有打破传
  • 自动控制理论(2)——控制系统的数学模型(微分方程、传递函数)

    系列文章目录 自动控制理论 xff08 1 xff09 自动控制理论概述 自动控制理论 xff08 3 xff09 控制系统的数学模型 xff08 系统框图和信号流图 xff09 文章目录 系列文章目录一 线性系统的微分方程1 微分方程的建
  • Android 8.1共享系统代理中的热点(LineageOS15.1)

    https github com Mygod VPNHotspot 下载安装这个软件 xff0c 需要ROOT 开发者选项 xff1a 关闭WLAN硬件加速 该软件设置 xff1a 关闭IPV6 打开 修复DHCP 开启手机自带的热点 该软
  • 浏览器页面滚动条美化(样式)

    浏览器页面滚动条美化 xff08 样式 xff09 最近测试反应我们的产品在浏览器中当页面宽高出现溢出的情况下页面滚动条太丑了 xff01 让我们美化一下 xff01 然后花了一点时间专研了一下关于滚动条样式的相关知识 xff0c 今天就在
  • Android串口工具

    参考Android系统实现方式 xff0c 串口操作采用native实现 xff0c 比java层用文件流的方式更高效 xff0c 不需要延时和睡眠处理 xff0c 大量自测不会出现读取不到数据等问题 特点 xff1a 1 提供基本的串口操
  • 【VINS-Fusion入门之一】让系统跑起来

    文章目录 简介配置执行单目 43 IMU双目 43 IMU双目相机双目 43 GPS 落地备注 xff1a 简介 VINS xff0c 英文缩写Visual Inertial Systems 是一个实时视觉SLAM框架 xff0c 2017
  • 【VINS-Fusion入门之二】基于优化的多传感器融合

    文章目录 简介特征参考论文 解读系统框图相机模型 xff1a 配置文件全局优化闭环优化状态估计 简介 VINS Fusion is an optimization based multi sensor state estimator whi
  • RealSense T265使用教程

    RealSense ROS 安装 https github com IntelRealSense realsense ros 安装教程 https www intelrealsense com get started tracking ca
  • c++面试宝典

    目录 一 多线程 二 指针 三 字符串 四 面向对象 五 基本用法 六 c 43 43 11 七 算法 c 43 43 面试必考多线程 xff0c 内存 xff08 智能指针 xff09 xff0c 常见算法 xff0c 设计模式 一 多线
  • 音视频编解码之傅里叶变换和小波变换

    傅里叶变换的核心是从时域到频域的变换 xff0c 而这种变换是通过一组特殊的正交基来实现的 傅立叶变换使我们能通过频率成分来分析一个函数 任何信号 xff08 如图像信号 xff09 都可以表示成一系列正弦信号的叠加 傅立叶变换在实际中有非
  • CMakeLists.txt生成makefile

    本CMakeLists txt的project名称 会自动创建两个变量 xff0c PROJECT SOURCE DIR和PROJECT NAME PROJECT SOURCE DIR xff1a 本CMakeLists txt所在的文件夹
  • 编程之禅-程序员的哲学

    编程之道 xff0c 一个酷爱东方哲学和练太极拳的老外写的书 作者是一位资深的程序设计师 xff0c 从他的爱好和著作中 可以看得出作者的文化底蕴 而他现在从事的工作 xff0c 是如何把最好的管理技术和高科技企业联系起来 xff0c 而这
  • Pixhawk-开篇

    Pixhawk 开篇 互联网上关于介绍Pixhawk的文章特别多 有心人自己去网上查看吧 本篇文章未完 可能会有更新 不足请指出 QQ 4862879 说重点 Pixhawk指的是一款开源的硬件 下图的那个 是把原来的PX4FMU 43 P
  • Pixhawk_bootloader简介

    Pixhawk Bootloader引导过程简介 自己结合网络上的资源总结的内容 有不对的地方请及时指出 有侵权的请指出 QQ 4862879 Pixhawk硬件使用STM32的芯片 Cortex M3的内核有三种启动方式 xff0c 其分
  • 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)

    在前一节中 xff0c 简单介绍了移动机器人的3D建模 xff0c 并在gazebo三维仿真环境中实现了简单的移动 这一节采用gmapping包实现机器人的SLAM xff08 同时定位与地图建立 xff09 使用上一节构建的机器人3D模型
  • Git 远程推送被拒绝的一种解决方案

    Git 远程推送被拒绝的一种解决方案 参考文章 xff1a xff08 1 xff09 Git 远程推送被拒绝的一种解决方案 xff08 2 xff09 https www cnblogs com wf skylark p 9315463
  • 关于putty连接服务器提示server unexpectedly closed connection解决方法

    关于putty连接服务器提示server unexpectedly closed connection解决方法 参考文章 xff1a xff08 1 xff09 关于putty连接服务器提示server unexpectedly close
  • centos7下部署主机监控,mysql指标监控,(prometheus+grafana+node_exporter+mysqld_exporter+alertmanager)

    先解释一下这些组件都是干什么用的 xff0c 组件说明prometheus server 是 Prometheus 组件中的核心部分 xff0c 负责实现对监控数据的获取 xff0c 存储以 及查询 exporter 简单说是采集端 xff
  • HTTP通讯安全中的Digest摘要认证释义与实现

    摘要 出于安全考虑 xff0c HTTP规范定义了几种认证方式以对访问者身份进行鉴权 xff0c 最常见的认证方式之一是Digest认证 Digest认证简介 HTTP通讯采用人类可阅读的文本格式进行数据通讯 xff0c 其内容非常容易被解