1.1盒端主动发起Http Digest认证流程
![](https://i-blog.csdnimg.cn/blog_migrate/a83aac267ae4841e0079142deb03fae7.png)
机顶盒(CPE)通过HTTP Digest Authentication发起与终端管理系统(ACS)的认证连接,连接方式遵循RFC 2617的规定。
机顶盒连接终端管理系统的地址由Device.ManagementServer.URL参数提供。
机顶盒主动想终端管理系统发起一个HTTP 连接请求,终端管理系统会要求进行HTTP Digest Authentication认证。并按照RFC2671规范,盒端和盒端管理系统在之后的请求和应答时信息均带有认证头信息。
认证中的用户名、密码为Device.ManagementServer.Username 及Device.ManagementServer.Password
l终端管理系统地址(ACS地址)在出厂时和快速放装时进行统一配置。
1.盒端(CPE)首先发起不带Digest 验证头的sendInform请求报文,内容如下:
![图片](https://i-blog.csdnimg.cn/blog_migrate/66ea625cab8ddccc1820b9ffec06c905.jpeg)
![图片](https://i-blog.csdnimg.cn/blog_migrate/8271dd9c87d023b7e42dfd09dd0e6d2a.jpeg)
2.盒端管理系统(ACS)收到上述报文后,发现没有认证消息(带有Authorization:标识的报文),然后发送401错误报文:
![图片](https://i-blog.csdnimg.cn/blog_migrate/e48502f50a26f4126c1e6ad78a6c8ab9.jpeg)
3.盒端(cpe)收到报文后,经过分析得到报文错误为401,代码中通过分析报文中是否有WWW-Authenticate: Digest 字段,如果有,那么将其中的realm,nonce,opaque,qop的值存储下来,并将程序中的Http Digest认证参数:DaEnabled置为true,使发送下一个回复报文之前初始化Http Digest认证插件。通过函数:http_da_post_header,(本地配置的realm必须与收到的realm一致否则验证不能通过)将本地文件配置的realm和从盒端管理系统(ACS)收到的nonce,opaque,qop等值通过函数http_da_calc_HA1,生成一个唯一的字符串并存入response字段,并将这些信息组合到报文的头部,最后发送给ACS的报文为:
![图片](https://i-blog.csdnimg.cn/blog_migrate/9caa5ef4275354e82017c5c9588bd924.jpeg)
4.盒端管理系统(ACS)收到上述报文后,确认其含Authorization:字段,并且Authorization:字段中的response的值正确,那么认证通过,并发送回复报文:
![图片](https://i-blog.csdnimg.cn/blog_migrate/a6373040387bd7647d51c70ee1d24df2.jpeg)
5.盒端(CPE)收到回复报文后,分析为认证通过报文后,发送一个inform内容为空的确认报文:——其实就是个空报文
![图片](https://i-blog.csdnimg.cn/blog_migrate/d8817412820b1ba12ca2749df9a9b470.jpeg)
6.到此认证结束
1.2盒端管理系统主动发起的连接流程
![图片](https://i-blog.csdnimg.cn/blog_migrate/2ab121e5515d42911603987b46b0d574.jpeg)
1.在盒端管理系统主动发起对盒端的连接请求之前,通过心跳,已获得盒端的连接地址。
2.盒端在收到UDP请求后,应主动返回相应数据包。
3.盒端与盒端管理系统进行交互后,由盒端作为客户端打开TCP连接,进行正常的PRC交换,并在Inform方法的EventCode代码中填写6CONNECTION REQUEST
4.打开连接,建立HTTP摘要认证链接(其交互过程与盒端发起的主动连接请求相同)
2盒端(CPE)发送Inform报文函数流程
![](https://i-blog.csdnimg.cn/blog_migrate/243af9e91c1fcdd0938fa187f3004a2f.png)