千家信息网

libcurl第五课 Digest Authentication摘要验证使用

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,场景在安迅士摄像机网页上,配置系统选项,HTTP/RTSP Password Settings 中, 选择Encrypted only。获取设备的云台状态信息,使用的是摘要认证例子void CAnXu
千家信息网最后更新 2025年12月01日libcurl第五课 Digest Authentication摘要验证使用

场景
在安迅士摄像机网页上,配置系统选项,HTTP/RTSP Password Settings 中, 选择Encrypted only。获取设备的云台状态信息,使用的是摘要认证

例子
void CAnXunShiConn::TestlibCurlHTTPDegistAuth()
{
CURL *pCurlHandle = curl_easy_init();
curl_easy_setopt(pCurlHandle, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(pCurlHandle, CURLOPT_URL, "http://192.168.18.84/axis-cgi/com/ptz.cgi?camera=1&query=position");
curl_easy_setopt(pCurlHandle, CURLOPT_USERPWD, "root:admin12345");
curl_easy_setopt(pCurlHandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_easy_setopt(pCurlHandle, CURLOPT_WRITEFUNCTION, WriteResponseBody);//设置回调函数
//curl_easy_setopt(pCurlHandle, CURLOPT_HEADER, 1);//保存HTTP头部信息到strResponseData
curl_easy_setopt(pCurlHandle, CURLOPT_WRITEDATA, &strResponseData);//设置回调函数的参数,获取反馈信息
curl_easy_setopt(pCurlHandle, CURLOPT_TIMEOUT, 15);//接收数据时超时设置,如果10秒内数据未接收完,直接退出
curl_easy_setopt(pCurlHandle, CURLOPT_MAXREDIRS, 1);//查找次数,防止查找太深
curl_easy_setopt(pCurlHandle, CURLOPT_CONNECTTIMEOUT, 5);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
CURLcode nRet = curl_easy_perform(pCurlHandle);
if (0 == nRet)
{
std::cout << strResponseData << std::endl;
}
curl_easy_cleanup(pCurlHandle);
}

基础知识
◆ 摘要认证 digest authentication   ← HTTP1.1提出的基本认证的替代方法
服务器端以nonce进行质询,客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础产生的response信息进行认证的方式。
※ 不包含密码的明文传递

摘要认证步骤:
1. 客户端访问一个受http摘要认证保护的资源。
2. 服务器返回401状态以及nonce等信息,要求客户端进行认证。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
3. 客户端将以用户名,密码,nonce值,HTTP方法, 和被请求的URI为校验值基础而加密(默认为MD5算法)的摘要信息返回给服务器。
认证必须的五个情报:
     ・ realm : 响应中包含信息
     ・ nonce : 响应中包含信息
     ・ username : 用户名
     ・ digest-uri : 请求的URI
     ・ response : 以上面四个信息加上密码信息,使用MD5算法得出的字符串。
Authorization: Digest
username="Mufasa",  ← 客户端已知信息
realm="testrealm@host.com",   ← 服务器端质询响应信息
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",  ← 服务器端质询响应信息
uri="/dir/index.html", ← 客户端已知信息
qop=auth,   ← 服务器端质询响应信息
nc=00000001, ← 客户端计算出的信息
cnonce="0a4f113b", ← 客户端计算出的客户端nonce
response="6629fae49393a05397450978507c4ef1", ← 最终的摘要信息 ha3
opaque="5ccc069c403ebaf9f0171e9517f40e41"  ← 服务器端质询响应信息
4. 如果认证成功,则返回相应的资源。如果认证失败,则仍返回401状态,要求重新进行认证。

特记事项:
1. 避免将密码作为明文在网络上传递,相对提高了HTTP认证的安全性。
2. 当用户为某个realm首次设置密码时,服务器保存的是以用户名,realm,密码为基础计算出的哈希值(ha1),而非密码本身。
3. 如果qop=auth-int,在计算ha2时,除了包括HTTP方法,URI路径外,还包括请求实体主体,从而防止PUT和POST请求表示被人篡改。
4. 但是因为nonce本身可以被用来进行摘要认证,所以也无法确保认证后传递过来的数据的安全性。

※ nonce:随机字符串,每次返回401响应的时候都会返回一个不同的nonce。
※ nounce:随机字符串,每个请求都得到一个不同的nounce。
※ MD5(Message Digest algorithm 5,信息摘要算法)
① 用户名:realm:密码 ⇒ ha1
② HTTP方法:URI ⇒ ha2
③ ha1:nonce:nc:cnonce:qop:ha2 ⇒ ha3
WSSE(WS-Security)认证  ← 扩展HTTP认证
WSSE UsernameToken
服务器端以nonce进行质询,客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础产生的response信息进行认证的方式。
※ 不包含密码的明文传递

WSSE认证步骤:
1. 客户端访问一个受WSSE认证保护的资源。
2. 服务器返回401状态,要求客户端进行认证。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: WSSE
realm="testrealm@host.com",
profile="UsernameToken" ← 服务器期望你用UsernameToken规则生成回应
※ UsernameToken规则:客户端生成一个nonce,然后根据该nonce,密码和当前日时来算出哈希值。
3. 客户端将生成一个nonce值,并以该nonce值,密码,当前日时为基础,算出哈希值返回给服务器。
Authorization: WSSE profile="UsernameToken"
X-WSSE:UsernameToken
username="Mufasa",
PasswordDigest="Z2Y......",
Nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
Created="2010-01-01T09:00:00Z"
4. 如果认证成功,则返回相应的资源。如果认证失败,则仍返回401状态,要求重新进行认证。
特记事项:
1. 避免将密码作为明文在网络上传递。
2. 不需要在服务器端作设置。
3. 服务器端必须保存密码本身,否则无法进行身份验证。


认证 信息 密码 客户 客户端 服务器 服务 摘要 用户 基础 方法 用户名 状态 数据 明文 资源 字符 字符串 算法 哈希 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器不绑定端口 数据库中前五名后五名怎么写 网络技术是怎么改变世界的 建立网络安全管理制度的通知 广州社交软件开发公司 数据库挂了该怎么办 网络安全技术演示 香港威宁网络技术游戏 中国华为泰山服务器 西工大软件开发综合能力训练 服务器怎么同时使用 电脑连接服务器会被监控吗 招行软件开发硕士委培生轮岗 工作三年自学软件开发 幻塔更换游戏服务器数据会同步吗 广州金中网络技术有限公司老板 软件开发硬件设备有哪些类型 网络安全岗位能力分析 学生学习网络安全课程的意义 网络安全大事2017 梦幻西游原服务器开服时间 如何做好智慧城市的网络安全建设 网络安全相关基金 hp服务器修改无管理口序列号 微信登录的服务器删除了怎么恢复 建立数据库模式的命令 搜护苗网络安全课 做软件开发的男生单身多吗 系统开发和软件开发区别 android操作数据库
0