前言:通过了解CPE与ACS的验证过程,可以初步认识TR069的一些规则。本文只是在实验中的一点经验记录,并未对协议有深入讲解,某些观点可能存在纰漏。仅适用于刚接触TR069的筒子。
环境
系统:Ubuntu14.04LTS
CPE:easyCWMP
ACS:GenieACS
*其他开源ACS:
openACS:早已停止维护,源码也被作者删除了。目前有一个openACS的官网,此openACS非彼openACS,大家注意了.
freeACS:安装很方便,脚本一键安装,可自行浏览官网。
GenieACS:我知道最新的开源ACS,目前仍在维护。文档全面,推荐用这个来搭建测试服务器。*
easyCWMP安装
官方文档写的算是很详细了,95%的步骤没问题。这里只提一下按照官方文档可能会出错的几个地方:
libubox在make时,报错:
blobmsg_json.c:78:2 error: implicit declaration of function 'is_error'
jshn.c:162:2: error: implicit declaration of function 'is_error'
解决办法:在对应的文件加入以下代码:
#define is_error(ptr) (ptr == NULL)
一共有2-3个文件有这个问题,都按上面添加。
运行easycwmp时报错:
error while loading shared libraries: libjson-c.so.3: cannot open shared object file: No such file or directory
解决办法:执行如下命令
ln -sf /usr/local/lib/libjson-c.so.3.0.0 /usr/lib/libjson-c.so.3
GenieACS安装
GenieACS的文档很是详细,这里不赘述安装过程了,参见官网文档吧,注意文档中的版本,避免各种版本不兼容的问题。
认证流程
TR069的认证规则有多种,本文只描述了Digest认证过程。Digest认证既可以从CPE端发起,也可以从ACS端发起,下面我们会分开讨论,但有一些公用的步骤,我们先在这里说明。
GenieACS与CPE的通信默认是建立在非加密的连接上的,在实际使用时,我们肯定是要用一些手段的。因为TR069上层使用http协议的,我们很容易想到要使用https,这就需要证书了。本文是实验性质,肯定是要自己动手制作一个证书的,执行如下命令即可(确保已安装openssl)
openssl genrsa 1024 > key.pem
openssl req -new -x509 -key key.pem > cert.pem
最简单的步骤了,证书有效期30天。
此段内容参考GenieACS文档。
注意:Component Name 填写GenieACS所在PC的IP吧。
ACS端发起的Digest认证
认证流程如下:
CPE ACS
1.<------------------http(不带auth头信息)-------------
2.------------------ 401 Unauthorized---------------->
3.<------------------http get(带auth头信息)-----------
4.------------------200 OK--------------------------->
5.<-----------------100 continue----------------------
6.------------------6 connect request---------------->
7.<------------------200 OK---------------------------
GenieACS文档传送门
用GenieACS来测试ACS发起的Digest认证比较简单。在GenieACS安装根目录的config文件夹下,有一个auth-sample.js文件:
+++ RECEIVED HTTP REQUEST +++
http_digest_auth_fail_response(336):: http_digest_auth_fail_response: header: Digest realm="realm@easycwmp",qop="auth",nonce="1057d42b5253defd585d849e59e803f70001b083",opaque="328458fab28345ae87ab3210a8513b14eff452a2"--- RECEIVED HTTP REQUEST ---
+++ HTTP SERVER CONNECTION FAILED +++
+++ RECEIVED HTTP REQUEST +++
http_digest_auth_check(379):: http_digest_auth_check: header: username="easycwmp",realm="realm@easycwmp",nonce="1057d42b5253defd585d849e59e803f70001b083",uri="/",qop=auth,nc=00000001,cnonce="0a4f113b",response="4055d3c9d9284a0ec0e1340065414342",opaque="328458fab28345ae87ab3210a8513b14eff452a2"
--- RECEIVED HTTP REQUEST ---
+++ HTTP SERVER CONNECTION SUCCESS +++
2018-05-03 15:37:04 [easycwmp] NOTICE - acs initiated connection
2018-05-03 15:37:04 [easycwmp] NOTICE - add event '6 CONNECTION REQUEST'
2018-05-03 15:37:04 [easycwmp] NOTICE - start session
+++ HTTP CLIENT CONFIGURATION +++
http_client_init(51):: url: https://10.10.2.226:7547
http_client_init(53):: ssl_cert: /home/zzj/OpenWRT/genicacs/genieacs-gui/config/cert.pem
http_client_init(55):: ssl_cacert: /home/zzj/OpenWRT/genicacs/genieacs-gui/config/cert.pem
--- HTTP CLIENT CONFIGURATION ---
2018-05-03 15:37:04 [easycwmp] NOTICE - configured acs url https://